Config Manager TS Errors and possible solutions

Error Type Cause Possible Solution
0x87D01106 TS App Install – bad command Check command line/Application Path
0x87D0031D TS App Install – Misconfiguration  Assiged to user but setup to only install when no user is signed in.
0x87D00324  TS App Install – Bad detection rule? Check if detection rule applies.
0x800701E7 TS ?? Restart with boot CD or PXE.
0×80070032 TS No file system Using command support, format (quick) the disk or recreate the disk using diskpart.exe
0×80070490 TS Partition too small for image/
~Failed to find driver for PCI\VEN device
~trying to use a WIM image that does not specify OS bit-depth support (32/64)
Repartition drive
Review SMSTS.log for driver info. Likely need to add the PCI\VEN into an .inf or txtsetup.oem file
0×80070241 TS Error during TS user interface caused in memory Restart with boot CD or PXE.
0x80072EE7 TS IP address is not on a subnet that connect to the SCCM server Change the port the Ethernet cable is connected on. Restart with boot CD or PXE
0×800704d0 TS Corrupted wim file/Drive Marked as Dirty Run “Chkdsk c: /offlinescanandfix” on HD
0×80070570 TS Corrupted wim file/Drive Marked as Dirty Run “Chkdsk c: /offlinescanandfix” on HD
0x80040001 TS Could not get the client GUID Check whether the machine has been imported to the site database. Refer to clientidmgr.log in MP location for details.
0x80040101 TS Network access account is not set Check the admin UI to make sure Network Access Account is set
0x80040102 TS No content location returned for the given package Check the server side to make sure the package is distributed to at least one distribution point. Also check whether advertisement allows the task sequence to fall back to remote distribution point when there is no local distribution point
0x80040103 TS Could not access package content in the distribution point Make sure Network Access Account is set correctly. Check the underline network connectivity.
0x80040104 TS Could not find reference program policy Make sure the reference program policy is downloaded locally. Check policy agent log for details.
0x80040105 TS Could not find CCM_ClientAgentConfig raw policy Make sure policy is downloaded locally. Check policy agent log for details.
0x80004005  TS Failed to get client identity Try a different boot media, Check network connection, IPCONFIG and DNS,  Check Time and Date, Format C: drive
0x80091007 TS Hash Error on task sequence HardDrive Test, Check Time, Task sequence might had recently been changed. Wait a few minutes and try again
0x8024001a TS Failed to install updates Shouldn’t affect anything, click restart button
0x80070057 TS Failure to Retrieve Policies. Check Network Connectivity, Quick Format
0x80022005 TS ??- Possible bad naming script. Retry image; Verify that name length is 15 or less characters long with no spaces.
0x80072ee7 TS winhttp failure Check Network Connectivity, IPCONFIG and DNS settings
0x800700a1 TS Cannot Write to… format the drive. If new drive: Partition
0x80070002 TS Cannot find file specified. Check Time/Connection, Run “Chkdsk c: /offlinescanandfix” on HD,  (Desktop Management) Check software on DP, Check pool status on MP/DP.
0x80070570 TS _SMSTaskSequence – directories could not be created Format C: Drive 
0x800703E5 TS Overlapped I/O operation is in progress. Bad hash, update/transfer for package in progress. 
0x00000001 TS Task in sequence failed Check logs for script/task errors
0xC0000001 TS Recent software change Format C: Drive 
0x80070032 TS Failed to prepare the system partition for staging Repartition HD format as NTFS,  If UEFI image BOOT to UEFI not Legacy.
0x8007000E TS Too many Tasks, Updates, Packages applied to Object/Machine Make Unknown, Disable Updates, Remove machine from installation collections.
SCCLient has
Stopped Working (BEX)
Software Center Display Driver issue Update Display Driver, Switch to microsoft generic display driver.

PowerShell – Running a Program in Compatibility Mode

If you manually change the compatibility mode of an executable you will notice that this changes an item in the registry in the following location:

HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\

To take advantage of this from within a script:

$wDir = $PSScriptRoot
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\" -PropertyType String -Name "$wDir\[Program].exe" -Value "~ WIN7RTM" -Force
Start-Process "$wDir\[Program].exe" -ArgumentList @( "-i", "silent") -Wait
Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\" -Name "$wDir\[Program].exe"

This can be useful to install older software.

Windows Upgrade using User Friendly Deployment/Triggering for SCCM Task Sequences

With the introduction to Windows 10 and its update cycle, if your refresh schedule is not as aggressive you are looking at having to push upgrades to your devices in order to keep them current and supported.

The real challenge comes with working around the user’s schedule to try to minimize interruptions. We opted to set up an Application that will give the user an option of kicking off the task sequence or selecting a time to Schedule the deployment.

Using a WPF form through Powershell we created a form that has a scheduled date range and time:

If they select run now the Task Sequence would kick off from the script with a block of code similar to this:

Function KickOffTS ($TSName){
 if($TSName -ne $null -and $TSName -ne ""){
 $aScript = {(Get-WmiObject -Namespace root\ccm\policy\machine\actualconfig -ClassName CCM_SoftwareDistribution -Filter "PKG_Name = `"$($TSName)`"").ADV_AdvertisementID | foreach{'Select * from CCM_Scheduler_ScheduledMessage where ScheduledMessageID like "' + $_ + '%"'} | foreach{Get-WmiObject -Query "$_" -Namespace root\ccm\policy\machine\actualconfig}|foreach{([wmiclass] "\\.\root\ccm:SMS_Client").TriggerSchedule($_.ScheduledMessageID)}}
 if((Get-WmiObject -Namespace root\ccm\policy\machine\actualconfig -ClassName CCM_SoftwareDistribution -Filter "PKG_Name = `"$($TSName)`"") -ne $null){
 $TS = (Get-WmiObject -Namespace root\ccm\policy\machine\actualconfig -ClassName CCM_SoftwareDistribution -Filter "PKG_Name = `"$($TSName)`"")
 $TSOldrrb = $TS.ADV_RepeatRunBehavior
 $TS.ADV_RepeatRunBehavior = "RerunAlways"
 $TS.put() | Out-Null
 invoke-Command $aScript
 start-sleep -Seconds 1
 $TS.ADV_RepeatRunBehavior = $TSOldrrb
 $TS.put() | Out-Null
 }
 Else{Write-Warning "Task Sequence was not found"}
 }
 Else{Write-Warning "Task Sequence name was not given"}
}
KickOffTS "[TaskSequenceName]"

If they decide to schedule the deployment a Scheduled task would kick off a condensed form of the script at the selected Scheduled time.

[email protected]"
if((Get-WmiObject -Namespace root\ccm\policy\machine\actualconfig -ClassName CCM_SoftwareDistribution -Filter \"PKG_Name = `'[TaskSequenceName]`'\")){"(Get-WmiObject -Namespace root\ccm\policy\machine\actualconfig -ClassName CCM_SoftwareDistribution -Filter \"PKG_Name = `'[TaskSequenceName]`'\").ADV_AdvertisementID | foreach{\"Select * from CCM_Scheduler_ScheduledMessage where ScheduledMessageID like `'`$_%`'\"}| foreach{Get-WmiObject -Query "`$_" -Namespace root\ccm\policy\machine\actualconfig} | foreach{([wmiclass] \"\\.\root\ccm:SMS_Client\").TriggerSchedule(`$_.ScheduledMessageID)}}
"@
$action = New-ScheduledTaskAction -Execute 'Powershell.exe' -Argument $aScript2 
$trigger =  New-ScheduledTaskTrigger -At $TimeScheduled -Once
$stSetting = New-ScheduledTaskSettingsSet -WakeToRun Register-ScheduledTask -Action $action -Trigger $trigger -Settings 
$stSetting -TaskName "Win10 Upgrade Task" -Description "Windows 10 Upgrade Task" -User "System" -RunLevel Highest

 Requirements:

The task sequence you want to kick off must be deployed as required in some way to the device.

The task sequence rerun behavior must allow the task sequence to rerun. If the behavior is set to rerun if failed and the task sequence has succeeded before then your trigger action will not work. In my initial example I set the rerun behavior to “RerunAlways” then back to the previous state after the task sequence is triggered. Be careful to not cause unwanted kick offs when changing this settings.
Finally the task sequence must be allowed the scheduled time either by having a maintenance window available at that time or checking the box that allows it to run outside of a maintenance window.

After thoughts:

There were other ways to kick off task sequences using Powershell but some of these options seemed to access WMI items that were only available when the user was logged in. Not great for task sequences that you want to push at a scheduled time when the user may or may not be logged into the system. Manipulating the WMI items in the examples above gave the most consistent and reliable results.

Drivers & Where to get them.

A few different resources for drivers from different sources around the web to facilitated deployments:

Dell

HP

Lenovo

SCConfigmgr.com also has a very cool scripted solution for downloading drivers which can also create driver packages automatically in SCCM I recommend checking them out because they have many other tools that can help with many different tasks:

Alternatively you can also use powershell to extract drivers from a specific model of machines and then import them to another similar model or create an SCCM package from the extracted drivers:

To export the drivers to a network share:

Export-WindowsDriver -Destination "\\[Server]\[Share]\$((Get-WmiObject -Class win32_computersystem).Model)\" -Online

There are different ways to import drivers on to an online computer I personally tend to use pnputil since this has been functional for many versions of windows:

$drivers = (Get-ChildItem -Path "\\[Server]\[Share]\$((Get-WmiObject -Class win32_computersystem).Model)\" -Filter "*.inf" -Recurse -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Fullname) 
foreach($driver In $drivers){
    pnputil.exe -i -a $driver
}

You can also always have windows search for drivers in this location using the Device Manager > Update Driver option.