Windows Assessment and Deployment Kit (Windows ADK) Preview

With the recent Windows 10 Technical Preview version 10.0.10041, developer tools were published as well as hardware tools. At the bottom of the hardware tools page, you can find the preview version of the Windows Assessment and Deployment Kit (Windows ADK).

Here’s the PowerShell script to download the files required by ADK (~3GB) that uses the cmdlets from the BITS module.

#Requires -Version 4
#Requires -RunAsAdministrator

Function Get-ADKFiles {
[CmdletBinding()]
param(
    [parameter(Mandatory)]
    [system.string]$TargetFolder
)
Begin {
    $HT = @{}
    $HT += @{ ErrorAction = 'Stop'}
    # Validate target folder
    try {
        Get-Item $TargetFolder @HT | Out-Null
    } catch {
        Write-Warning -Message "The target folder specified as parameter does not exist"
        break
    }
 
    # March 24, 2015
    $PatchLevel = "10.0.10041"
 
}
    
Process {
    
    $adkGenericURL = (Invoke-WebRequest -Uri http://go.microsoft.com/fwlink/?LinkID=525592  -MaximumRedirection 0 -ErrorAction SilentlyContinue)
    
    # 302 = redirect as moved temporarily
    if ($adkGenericURL.StatusCode -eq 302) {

        # Currently set to http://download.microsoft.com/download/2/E/7/2E74CA3D-858C-4401-B6FF-3E1C2D1D5F0C/adk/
        # Resolving download root for: http://go.microsoft.com/fwlink/?LinkID=525592
        $MainURL = $adkGenericURL.Headers.Location
    
        $InstallerURLs = DATA {
            ConvertFrom-StringData @'
                0=0302dc615b0a5fd4810430b2cdacb5e3.cab
                1=036c618de505eeb40cca35afad6264f5.cab
                2=0708be5ffbe332f6a1571c929c1322a5.cab
                3=0a3a39d2f8a258e1dea4e76da0ec31b8.cab
                4=0b63b7c537782729483bff2d64a620fa.cab
                5=0c48c56ca00155f992c30167beb8f23d.cab
                6=0ce2876e9da7f82aac8755701aecfa64.cab
                7=0d981f062236baed075df3f42b1747db.cab
                8=11bdc4a4637c4d7ab86107fd13dcb9c6.cab
                9=125b1c8c81e36ec9dbe5abf370ff9919.cab
                10=1439dbcbd472f531c37a149237b300fc.cab
                11=14f4df8a2a7fc82a4f415cf6a341415d.cab
                12=1616336d1700fbea038fd3dc4c6c917b.cab
                13=186c4aa0cae637da0996e87ababf5b71.cab
                14=18e5e442fc73caa309725c0a69394a46.cab
                15=1bd4f044e271b42b110fe533720c10e9.cab
                16=1f90b0f7321fab8dcdedaba3b30415f3.cab
                17=23ca402f61cda3f672b3081da79dab63.cab
                18=24b9e5f1f97c2f05aa95ee1f671fd3cc.cab
                19=2517aec0259281507bfb693d7d136f30.cab
                20=268b1a41f6bd2906449944b964bf7393.cab
                21=27c0562eb1efb3ad282cf987ae40e873.cab
                22=2e134b026e871c5e8e547b6711578fb3.cab
                23=2e82f679c8709f838e7c839f7864ac84.cab
                24=3585b51691616d290315769bec85eb6f.cab
                25=3611bd81544efa3deb061718f15aee0c.cab
                26=36e3c2de16bbebad20daec133c22acb1.cab
                27=377a2b6b26ea305c924c25cf942400d6.cab
                28=3814eaa1d4e897c02ac4ca93e7e7796a.cab
                29=388dee738d7d1c99d6fe776a85ee32f8.cab
                30=38d93b8047d5efb04cf01ab7ec66d090.cab
                31=3b71855dfae6a44ab353293c119908b8.cab
                32=3d610ba2a5a333717eea5f9db277718c.cab
                33=3dc1ed76e5648b575ed559e37a1052f0.cab
                34=3e602662e913edefa58e52e04e900bf8.cab
                35=3eaef6a740a72a55f4a0ac3039d05419.cab
                36=413a073d16688e177d7536cd2a64eb43.cab
                37=450f8c76ee138b1d53befd91b735652b.cab
                38=45c632fb53b95fe3bd58a6242325afa6.cab
                39=4d2878f43060bacefdd6379f2dae89b0.cab
                40=4defb086385752d8cd0d1432900fb4ca.cab
                41=4e56c6c11e546d4265da4e9ff7686b67.cab
                42=4fc82a5cedaab58e43b487c17f6ef6f3.cab
                43=500e0afd7cc09e1e1d6daca01bc67430.cab
                44=527b957c06e68ebb115b41004f8e3ad0.cab
                45=56dd07dea070851064af5d29cadfac56.cab
                46=56e5d88e2c299be31ce4fc4a604cede4.cab
                47=57007192b3b38fcd019eb88b021e21cc.cab
                48=5775a15b7f297f3e705a74609cb21bbc.cab
                49=5ac1863798809c64e85c2535a27a3da6.cab
                50=5d984200acbde182fd99cbfbe9bad133.cab
                51=5eea85046f0c2112e2fcd0bac2c2cfc8.cab
                52=625aa8d1c0d2b6e8cf41c50b53868ecd.cab
                53=630e2d20d5f2abcc3403b1d7783db037.cab
                54=662ea66cc7061f8b841891eae8e3a67c.cab
                55=6894c1e1e549c4ab533078e3ff2e92af.cab
                56=690b8ac88bc08254d351654d56805aea.cab
                57=69f8595b00cf4081c2ecc89420610cbd.cab
                58=6a68bedadf2564eeef76c19379aae5ef.cab
                59=6bdcd388323175da70d836a25654aa92.cab
                60=6cc7aebd21947dbd8ea4884662780188.cab
                61=6d2cfb2c5343c33c8d9e54e7d1f613f9.cab
                62=6d3c63e785ac9ac618ae3f1416062098.cab
                63=6da2af86cb1227e66cf9bc85f2786782.cab
                64=6dc62760f8235e462db8f91f6eaa1d90.cab
                65=6e142759ce3a6e36e52e089caffaffe1.cab
                66=7011bf2f8f7f2df2fdd2ed7c82053d7f.cab
                67=732eefaf52275b7a708311a31c82c814.cab
                68=7608a6c73562800dd82c513d6d2dcd94.cab
                69=77adc85e5c49bbd36a91bb751dc55b39.cab
                70=781e7c95c1b6b277057c9b53b7b5a044.cab
                71=791b388183dc99f779aa6adadab92e9a.cab
                72=7a8eaeba46cc44d02a9a46fcbb641a12.cab
                73=7c11b295fb7f25c6d684b1957e96a226.cab
                74=7c195d91008a0a6ad16e535ac228467d.cab
                75=83bd1072721871ea0bdc4fab780d9382.cab
                76=84cf100ee76440117226cfb9af196ba3.cab
                77=8624feeaa6661d6216b5f27da0e30f65.cab
                78=870d7f92116bc55f7f72e7a9f5d5d6e1.cab
                79=8bc062474f7e4aa85efdc73d3fe8b442.cab
                80=8c9919a5e8638dd2b352b0a218939370.cab
                81=8d25d56b34194978403f6bba33f419c5.cab
                82=8f264641cdc436354282a744033e7850.cab
                83=9050f238beb90c3f2db4a387654fec4b.cab
                84=93ed81ef8cf2e77c6ebc8aba5d95b9cf.cab
                85=94cae441bc5628e21814208a973bbb9d.cab
                86=9722214af0ab8aa9dffb6cfdafd937b7.cab
                87=97b6e3671e2e5d03ea25df25a8056e70.cab
                88=9d2b092478d6cca70d5ac957368c00ba.cab
                89=9f0be655144a0c68c7f087465e1ad4f9.cab
                90=9f8944e2cc69646284cd07010e7eee99.cab
                91=a011a13d3157dae2dbdaa7090daa6acb.cab
                92=a03686381bcfa98a14e9c579f7784def.cab
                93=a1d26d38d4197f7873a8da3a26fc351c.cab
                94=a22d6a2483a921a887070cd800030e47.cab
                95=a29a0c716f903f42aca181dca250f681.cab
                96=a30d7a714f70ca6aa1a76302010d7914.cab
                97=a32918368eba6a062aaaaf73e3618131.cab
                98=a565f18707816c0d052281154b768ac0.cab
                99=a7eb3390a15bcd2c80a978c75f2dcc4f.cab
                100=aa25d18a5fcce134b0b89fb003ec99ff.cab
                101=aa4db181ead2227e76a3d291da71a672.cab
                102=abbeaf25720d61b6b6339ada72bdd038.cab
                103=Application Compatibility Toolkit-x64_en-us.msi
                104=Application Compatibility Toolkit-x86_en-us.msi
                105=Assessments on Client-x86_en-us.msi
                106=Assessments on Server-x86_en-us.msi
                107=b0189bdfbad208b3ac765f88f21a89df.cab
                108=b3892d561b571a5b8c81d33fbe2d6d24.cab
                109=b4687bc42d465256ad1a68aec6886f83.cab
                110=b5227bb68c3d4641d71b769e3ac606a1.cab
                111=b6758178d78e2a03e1d692660ec642bd.cab
                112=bbf55224a0290f00676ddc410f004498.cab
                113=bd00e61b3056a8aa44b48303f6fa1e62.cab
                114=be7ebc1ac434ead4ab1cf36e3921b70e.cab
                115=c300c91a497ea70c80a6d0efc9454c35.cab
                116=c6babfeb2e1e6f814e70cacb52a0f923.cab
                117=c98a0a5b63e591b7568b5f66d64dc335.cab
                118=cd23bfdfd9e3dfa8475bf59c2c5d6901.cab
                119=cfb8342932e6752026b63046a8d93845.cab
                120=d2611745022d67cf9a7703eb131ca487.cab
                121=d344672ad340db2b98b706ff06350843.cab
                122=d519967dbb262c80060d9efb5079aa23.cab
                123=d562ae79e25b943d03fc6aa7a65f9b81.cab
                124=dotNetFx45_Full_x86_x64.exe
                125=e0509d502dcdae109023403fc3bc8ac4.cab
                126=e5f4f4dc519b35948be4500a7dfeab14.cab
                127=e65f08c56c86f4e6d7e9358fa99c4c97.cab
                128=ea9c0c38594fd7df374ddfc620f4a1fd.cab
                129=eacac0698d5fa03569c86b25f90113b5.cab
                130=eb90890d25e1dee03cf79844d9f823f4.cab
                131=ec093852a41cbd9d167b714e4f4a2648.cab
                132=ed711e0a0102f1716cc073671804eb4c.cab
                133=eea40dab42b1052e4d55a25291e91ccd.cab
                134=eebe1a56de59fd5a57e26205ff825f33.cab
                135=f051f100a86ad4c94057a1d5280d9283.cab
                136=f2a850bce4500b85f37a8aaa71cbb674.cab
                137=f480ed0b7d2f1676b4c1d5fc82dd7420.cab
                138=f4e72c453e36ce0795c8c9fcaae2b190.cab
                139=f6aa96e71953e06cb7a3f69e76804b6d.cab
                140=f7699e5a82dcf6476e5ed2d8a3507ace.cab
                141=f8f7800500b180b8a2103c40ce94f56a.cab
                142=fa7c072a4c8f9cf0f901146213ebbce7.cab
                143=fbcf182748fd71a49becc8bb8d87ba92.cab
                144=fcc051e0d61320c78cac9fe4ad56a2a2.cab
                145=fd5778f772c39c09c3dd8cd99e7f0543.cab
                146=fe2c9602686dc1bcbf80a0f18bd54b49.cab
                147=fe43ba83b8d1e88cc4f4bfeac0850c6c.cab
                148=Flashing Tools-x86_en-us.msi
                149=Imaging And Configuration Designer-x86_en-us.msi
                150=InstallRegHiveRecoveryDriverAmd64.exe
                151=InstallRegHiveRecoveryDriverX86.exe
                152=Kits Configuration Installer-x86_en-us.msi
                153=Microsoft Compatibility Monitor-x86_en-us.msi
                154=SQLEXPR_x86_ENU.exe
                155=Toolkit Documentation-x86_en-us.msi
                156=User State Migration Tool-x86_en-us.msi
                157=Volume Activation Management Tool-x86_en-us.msi
                158=wasinstaller.exe
                159=WimMountAdkSetupAmd64.exe
                160=WimMountAdkSetupArm.exe
                161=WimMountAdkSetupX86.exe
                162=Windows Assessment Services - Client (AMD64 Architecture Specific, Client SKU)-x86_en-us.msi
                163=Windows Assessment Services - Client (AMD64 Architecture Specific, Server SKU)-x86_en-us.msi
                164=Windows Assessment Services - Client (Client SKU)-x86_en-us.msi
                165=Windows Assessment Services - Client (Server SKU)-x86_en-us.msi
                166=Windows Assessment Services - Client (X86 Architecture Specific, Client SKU)-x86_en-us.msi
                167=Windows Assessment Services-x86_en-us.msi
                168=Windows Assessment Toolkit (AMD64 Architecture Specific)-x86_en-us.msi
                169=Windows Assessment Toolkit (X86 Architecture Specific)-x86_en-us.msi
                170=Windows Assessment Toolkit-x86_en-us.msi
                171=Windows Deployment Customizations-x86_en-us.msi
                172=Windows Deployment Tools-x86_en-us.msi
                173=Windows PE x86 x64 wims-x86_en-us.msi
                174=Windows PE x86 x64-x86_en-us.msi
                175=Windows System Image Manager on amd64-x86_en-us.msi
                176=Windows System Image Manager on x86-x86_en-us.msi
                177=WPT Redistributables-x86_en-us.msi
                178=WPTarm-arm_en-us.msi
                179=WPTx64-x86_en-us.msi
                180=WPTx86-x86_en-us.msi
'@
        }
    
        $PatchesURLs = DATA {
            ConvertFrom-StringData @'
'@
        }
   
        "Installers","Patches\$PatchLevel" | ForEach-Object -Process {
            # Create target folders if required as BIT doesn't accept missing folders
            If (-not(Test-Path (Join-Path -Path $TargetFolder -ChildPath $_))) {
                try {
                    New-Item -Path (Join-Path -Path $TargetFolder -ChildPath $_) -ItemType Directory -Force @HT
                } catch {
                    Write-Warning -Message "Failed to create folder $($TargetFolder)/$_"
                    break
                }
            }
        }
        # Get adksetup.exe
        try {
            Invoke-WebRequest -Uri "$($MainURL)adksetup.exe" -OutFile  "$($TargetFolder)\adksetup.exe" @HT
        } catch {
            Write-Warning -Message "Failed to download adksetup.exe because $($_.Exception.Message)"
        }
    
        # Create a job that will downlad our first file
        $job = Start-BitsTransfer -Suspended -Source "$($MainURL)Installers/$($InstallerURLs['0'])" -Asynchronous -Destination (Join-Path -Path $TargetFolder -ChildPath ("Installers/$($InstallerURLs['0'])")) 
            
        # Downlod installers
        For ($i = 1 ; $i -lt $InstallerURLs.Count ; $i++) {
            $URL = $Destination = $null
            $URL = "$($MainURL)Installers/$($InstallerURLs[$i.ToString()])"
            $Destination = Join-Path -Path (Join-Path -Path $TargetFolder -ChildPath Installers) -ChildPath (([URI]$URL).Segments[-1] -replace '%20'," ")
            # Add-BitsFile http://technet.microsoft.com/en-us/library/dd819411.aspx
            $newjob = Add-BitsFile -BitsJob $job -Source  $URL -Destination $Destination
            Write-Progress -Activity "Adding file $($newjob.FilesTotal)" -Status "Percent completed: " -PercentComplete (($newjob.FilesTotal)*100/($InstallerURLs.Count))
        }
   
        # Donwload Patches
        For ($i = 0 ; $i -lt $PatchesURLs.Count ; $i++) {
            $URL = $Destination = $null
            $URL = "$($MainURL)Patches/$PatchLevel/$($PatchesURLs[$i.ToString()])"
            $Destination = Join-Path -Path (Join-Path -Path $TargetFolder -ChildPath "Patches/$PatchLevel") -ChildPath (([URI]$URL).Segments[-1] -replace '%20'," ")
            # Add-BitsFile http://technet.microsoft.com/en-us/library/dd819411.aspx
            $newjob = Add-BitsFile -BitsJob $job -Source  $URL -Destination $Destination
        }
    
        # Begin the download and show us the job
        Resume-BitsTransfer  -BitsJob $job -Asynchronous
    
        # http://msdn.microsoft.com/en-us/library/windows/desktop/ee663885%28v=vs.85%29.aspx
        while ($job.JobState -in @('Connecting','Transferring','Queued')) {
            Write-Progress -activity "Downloading ADK files" -Status "Percent completed: " -PercentComplete ($job.BytesTransferred*100/$job.BytesTotal)
        } 
        Switch($job.JobState) {
             "Transferred" {
                Complete-BitsTransfer -BitsJob $job
                break
            }
             "Error" {
                # List the errors.
                $job | Format-List
            } 
            default {
                # Perform corrective action.
            } 
        }
    } else {
        Write-Warning -Message "Guessing the ADK location returned the status code $($adkGenericURL.StatusCode)"
    }
}
End {}
}

Let’s see how to use the above script:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned -Force
.  ~/documents\get-ADKFiles.ps1
mkdir ~/Downloads\ADK.10.0.10041 -Force
Get-ADKFiles -TargetFolder ~/Downloads\ADK.10.0.10041

Now you’ve got the tools to build WinPE (Windows Preinstallation Environment) with PowerShell 5.0 😎

Advertisements

One thought on “Windows Assessment and Deployment Kit (Windows ADK) Preview

  1. Pingback: Dew Drop – March 26, 2015 (#1982) | Morning Dew

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s