Shaun Cassell does a very nice job explaining what can go wrong HERE. One thing he doesn’t spell out is that you cannot have ANY spaces. For those of you who don’t know, when you install/upgrade ConfigMgr 2007. The setup wizard actually has to contact MS servers to download required components. You can do this ahead of time by running.
<path>setup.exe /download <path>
If you run the above command and nothing happens.. goto %SYSTEMDRIVE%ConfigMgrSetup.txt, if that log file contains.
<07-13-2008 10:02:24> Download folder F:SCCMUPDATES” does not exist
<07-13-2008 10:02:24> Failed to download prerequisite components (0x80070003)
Stop… you have spaces somewhere, the most sure fire way around this is to map a drive. Map a drive to the source and target destination folders. Furthermore if you start downloading updates, and it “fails” check your destination. If any updates at all have successfully downloaded. Start it back up, that is a network timeout.
<
p class=”headermaintitle”>Will work:
\servershareSCConfigMgr07SMSSETUPBINI386setup.exe /download c:SCCMUpdates
D:SCConfigMgr07SMSSETUPBINI386setup.exe /download c:SCCMUpdates
S:setup.exe /download T:
<
p class=”headermaintitle”>Will NOT work:
\serversome shareSCConfigMgr07SMSSETUPBINI386setup.exe /download c:SCCMUpdates
D:SCConfigMgr07SMSSETUPBINI386setup.exe /download c:SCCM Updates
OR… A little POSH goodness. Before I figured out what was going on. I wrote this quick Powershell script to download them for me. 😉
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
$manifestturl = 'http://go.microsoft.com/fwlink/?LinkId=104106' function Download-File ([string]$URL,[string]$savepath) { $web = New-Object System.Net.WebClient $web.headers.Add("User-agent", "Powershell") $web.DownloadFile($URL,$savepath) } function Get-SCCMPrereq { param([string]$path, [switch]$verbose) $holdverbose = $VerbosePreference if ($verbose) { $VerbosePreference = 'Continue'} if ((Test-Path $path) -ne $TRUE) { <span style="white-space:pre"> </span>Write-Verbose "$path not found, Attempting to create it." mkdir $path | Out-Null } $tempdir = ([system.IO.Path]::GetTempFileName()).Replace('.tmp',''); mkdir $tempdir | out-null Write-Verbose "Downloading ConfigMgr.manifest.cab" Download-File $manifestturl "$($path)ConfigMgr.Manifest.cab" Write-Verbose "Decompressing ConfigMgr.manifest.cab" $destFolder = $((new-object -com Shell.Application).NameSpace($tempdir)) $destFolder.CopyHere((new-object -com Shell.Application).NameSpace("$($path)ConfigMgr.Manifest.cab").items()) [xml]$configManifest = gc "$($tempdir)ConfigMgr.Manifest.xml" #process the ConfigMgr.Manifest.xml $manifest = $configManifest.SCCM2007.Group | % { $_.File } | % { $obj = New-Object PSObject $obj | Add-Member NoteProperty "URL" $_.Source $obj | Add-Member NoteProperty "File" $_.CopyName $obj | Add-Member NoteProperty "MD5" $_.MD5 Write $obj } $manifest | foreach-object -begin {clear-host;$i = 0} ` -process { Download-File $_.URL "$($path)$($_.File)" ; ` $i = $i + 1;` write-progress -activity "Downloading ConfigMgr Prerequisits" ` -status "Progress:" -currentOperation $_.file -percentcomplete ($i / $manifest.count * 100) ` } ` -end { if ((((ls 'C:SCCM_UPDATES').count) - 1) -eq $manifest.count){ Write-Host "Operation Completed Successfully $i out of $($manifest.count) Downloaded." } else { Write-error "ERROR only $i out of $($manifest.count) Successfully downloaded." } } } get-sccmprereq 'C:SCCM_UPDATES' -verbose |
~ Glenn