If you’ve created a golden image VM, you may have run across the hassle of keeping it updated. You can fire it up monthly and run updates, or just wait and update as the first step in deploying a new machine. OR… You can deploy updates to the offline VM with a little prep work and powershell.
These notes are for deploying the monthly cumulative update on Windows Server 2016, but it should work for older versions and other updates.
The first step is to download the update file. Then use the Expand program (built in) to extract the contents:
expand <PATHTOUPDATEFILE> -F:* <EXTRACTDESTINATION>
In the extract folder, find the .cab file for the update. Copy that to the VM host. In this example, I’m using C:\Temp.
Now either open a PS Session or from the VM host open PowerShell.
Go to a folder on the local disk (this process failed when mounting into a CSV) and create a temporary folder to use as a mount point. It’s easiest if this is also where you’ve put the .cab file.
mkdir -Path C:\Temp\MountDir
Now mount the offline VHD(X) you want to update.
Mount-WindowsImage -ImagePath $VHDtoUpdate -Path C:\Temp\MountDir -Index 1
Now apply the image.
Add-WindowsPackage -Path C:\Temp\MountDir -PackagePath $updatepath
Wait while the process runs, then dismount the VHD(X).
Dismount-WindowsImage -Path C:\Temp\MountDir -Save
Now repeat for additional virtual machines, or clean up your temporary mount folder.
rd -Path C:\Temp\MountDir
Now you can start up your updated VM.
$vmhost = <yourhost> Enter-PSSession -ComputerName $vmhost $cummupdatepath = "C:\Temp\Windows10.0-KB4022715-x64.cab" $VHDtoUpdate = "C:\ClusterStorage\Volume1\Example\Virtual Hard Disks\Example.vhdx" mkdir -Path C:\Temp\MountDir Mount-WindowsImage -ImagePath $VHDtoUpdate -Path C:\Temp\MountDir -Index 1 Add-WindowsPackage -Path C:\Temp\MountDir -PackagePath $cummupdatepath pause Dismount-WindowsImage -Path .\MountDir -Save rd -Path C:\Temp\MountDir Exit-PSSession