Windows 8.1 Hotfix Repository

Discussion in 'Windows 8' started by komm, Aug 31, 2013.

  1. DonZoomik

    DonZoomik MDL Novice

    Apr 5, 2015
    17
    8
    0
    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
    }
     
  2. adric

    adric MDL Expert

    Jul 30, 2009
    1,398
    1,519
    60
    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.
     
  3. DonZoomik

    DonZoomik MDL Novice

    Apr 5, 2015
    17
    8
    0
    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.
     
  4. adric

    adric MDL Expert

    Jul 30, 2009
    1,398
    1,519
    60
    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
     
  5. DonZoomik

    DonZoomik MDL Novice

    Apr 5, 2015
    17
    8
    0
    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
    
     
  6. DonZoomik

    DonZoomik MDL Novice

    Apr 5, 2015
    17
    8
    0
    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")
        }
    }
     
  7. adric

    adric MDL Expert

    Jul 30, 2009
    1,398
    1,519
    60
    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. :confused::D I was hoping for a simple solution.
     
  8. DonZoomik

    DonZoomik MDL Novice

    Apr 5, 2015
    17
    8
    0
    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.
     
  9. abbodi1406

    abbodi1406 MDL KB0000001

    Feb 19, 2011
    17,250
    91,017
    340
    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 :D
     
  10. ch100

    ch100 MDL Addicted

    Sep 11, 2016
    841
    704
    30
    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.
     
  11. ch100

    ch100 MDL Addicted

    Sep 11, 2016
    841
    704
    30
  12. Tiger-1

    Tiger-1 MDL Guru

    Oct 18, 2014
    7,894
    10,735
    240
    Hi ch100, very interesting your post :g:
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  13. abbodi1406

    abbodi1406 MDL KB0000001

    Feb 19, 2011
    17,250
    91,017
    340
    @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
     
  14. ch100

    ch100 MDL Addicted

    Sep 11, 2016
    841
    704
    30