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.
First Post
Look for Powershell, SCCM and other general Windows information.