Check if the specific update will move the image into pending state. You must check the CAB, not MSU (extract it if necessary). Undetermined usually will not move image to pending state. On W10 CUs are marked as not OffineCapable but you they don't actually move to pending. Example from my scripts... Code: $UpdateFileData = Get-Item -Path $Update $UpdateMetadata = Get-WindowsPackage -Path $TempMountDir -PackagePath $UpdateFileData.FullName If ($UpdateMetadata.CompletelyOfflineCapable -eq 'Yes' -or $UpdateMetadata.CompletelyOfflineCapable -eq 'Undetermined') { Add-WindowsPackage -PackagePath $UpdateFileData.FullName -Path $TempMountDir }
all the .mum files I checked on W10 show completelyOfflineCapable="no" whereas on W8.1 the .mum files show completelyOfflineCapable="yes". I don't know if that determines how a fix is flagged though. Still, that doesn't really solve anything.
The flag is indicative but in my experience, it is reliable on W8.1. On W10, it is not (Pending is not actually invoked). I'm not sure how .mum is checked but Get-WindowsPackage requires that you run it against a mounted image - possibly there are additional checks to determine if it is actually completelyOfflineCapable versus plainly checking .mum flag. My integration scripts run fine and they actually skip some updates (most from WUDownloader + some of my own stuff) during W8.1 integration run and allow ResetBase to run.
Do you install with the /preventpending option? Otherwise, I still don't see how you manage to do a ComponentCleanup for offline on W8.1
No, I integrate each update separately (eg iterate over each update, not integrating everything from folder) and before integration I check if it would move image to "pending" status. Pseudocode: Code: get updates foreach update if MSU extract, goto cab if cab check completelyOfflineCapable if completelyOfflineCapable integrate else skip
Some bigger blocks from my scrips, not published publicly. Note that that WS2016 issue in comments seems to be fixed with latest SS patches. Code: #To allow image downsizing when adding updates. #Some updates set Pending flag to image, requiring image to boot before resetbase. This is not desired so we try to integrate only updates that do not set Pending. #This seems to work fine on Win81/2012/2012R2. On Win10 CompletelyOfflineCapable is not reliable so we integrate all updates anyways. #This flag is not supported on WinVista/2008/7/2008R2 servicing stack #Windows2016 scrubs too many components during resetbase, making image unpatchable so this cannot be used on WS2016 until servicing stack has been fixed. To be exact, when image is deployed, SS chooses superseded and removed components as winners. This is definetly a bug. #ToDo - flags based enum If ($Image -like "Windows10*") { Write-CustomLog "HACK MODE! integrating all MSUs despite CompletelyOfflineCapable flag" Add-WindowsPackage -PackagePath $ImageArchitectureUpdatesFolder -Path $TempMountDir | Out-Null } ElseIf ($Image -eq "WindowsVista" -or $Image -eq "Windows2008" -or $Image -eq "Windows7" -or $Image -eq "Windows2008R2") { Write-CustomLog "This image cannot be ResetBase, skipping preprocessing" } Else { Write-CustomLog "Preprocessing image for ResetBase" Get-ChildItem -Path $ImageArchitectureUpdatesFolder -File | ForEach-Object {Integrate-NonPendingUpdates -TempMountDir $TempMountDir -Update $_.FullName -TempUpdateDir $TempUpdateDir} } Code: Function Integrate-NonPendingUpdates { Param( [string][Parameter(Mandatory=$True)]$TempMountDir, [string][Parameter(Mandatory=$True)]$Update, [string][Parameter(Mandatory=$True)]$TempUpdateDir ) #2 courses of action #If update is a CAB, get metadata directly $UpdateFileData = Get-Item -Path $Update Write-CustomLog ("Processing update file " + $UpdateFileData.Name) If ($UpdateFileData.Extension -eq '.cab') { Apply-NonPendingUpdate -TempMountDir $TempMountDir -Update $UpdateFileData.FullName } ElseIf ($UpdateFileData.Extension -eq '.msu') { Write-CustomLog "Update file is MSU, preprocessing" #Clean up tempdir $TempUpdateDirChildren = Get-ChildItem $TempUpdateDir If ($TempUpdateDirChildren) {$TempUpdateDirChildren | Remove-Item -Recurse} #Expand files from msu to tempdir expand $UpdateFileData.FullName -f:*.cab $TempUpdateDir #Get cabs, exclude WSUSSCAN $TempUpdateDirCabs = Get-ChildItem -Path $TempUpdateDir -Filter *.cab | Where-Object -FilterScript {$_.Name -ne 'WSUSSCAN.cab'} ForEach ($TempUpdateDirCab in $TempUpdateDirCabs) { Apply-NonPendingUpdate -TempMountDir $TempMountDir -Update $TempUpdateDirCab.FullName } #Cleanup Get-ChildItem $TempUpdateDir | Remove-Item -Recurse } Else { Write-CustomLog "Incorrect update file" } } Function Apply-NonPendingUpdate { Param( [string][Parameter(Mandatory=$True)]$TempMountDir, [string][Parameter(Mandatory=$True)]$Update ) $UpdateFileData = Get-Item -Path $Update $UpdateMetadata = Get-WindowsPackage -Path $TempMountDir -PackagePath $UpdateFileData.FullName If ($UpdateMetadata.CompletelyOfflineCapable -eq 'Yes' -or $UpdateMetadata.CompletelyOfflineCapable -eq 'Undetermined') { Add-WindowsPackage -PackagePath $UpdateFileData.FullName -Path $TempMountDir Write-CustomLog ("Applying update " + $UpdateFileData.Name) } Else { Write-CustomLog ("Update " + $UpdateFileData.Name + " cannot be added, will add pending flag") } }
Thank you for taking the time to help, but this is a bit to complicated for me since I'm not into Powershell scripts and I don't understand exactly how you are installing. I use Komm's Update Checker (KUC) to service my wim files and I would have to completely redo everything to something I don't understand to make my wim files smaller. I was hoping for a simple solution.
I don't know of any solutions that would check this flag, that's why I made my own. I don't know how KUC works it but you could contact KUC's maintainer if he could integrate it. If implemented, integration would be much slower though. Each MSU would have to be extracted, checked and integrated separately (integration could be done in one run though...). Plus a second run after resetbase to integrate skipped ones.
I think it will be excluded from the rollup, and targeted for servers only otherwise they would add it with yesterday's rollup maybe they are going to tolerate with some CPUs for servers or the opposite
I don't know. The timezone updates are released separately Catalog only and generally only included in the Monthly Rollup, but not in the Preview. This CPU detection patch is interesting and more clarification is needed about the intent.
@ch100 you are mixing KB3173424 SSU for Windows 8.1 & Server 2012R2 with KB3173426 for Server 2012 and Windows 8 now are you sure KB3173424 can be installed on barebone W8.1 or S2012R2 without KB2919355? nevertheless, it was sloppy work from Microsoft engineers to make this mess SSU should alway be independent from KB2919355