Windows Updates/Patches: Unterschied zwischen den Versionen
Aus Wiki-WebPerfect
Admin (Diskussion | Beiträge) |
Admin (Diskussion | Beiträge) |
||
Zeile 1: | Zeile 1: | ||
− | == Install Windows | + | == Search, Download & Install Windows Updates == |
− | '' | + | ''Because of the Windows Update dilemma with different Windows versions, I wrote the following script that should works on Windows Server 2016, 2019, 2022 and maybe higher.'' |
+ | |||
<source lang="powershell"> | <source lang="powershell"> | ||
$MSUpdateSearcher = New-Object -ComObject Microsoft.Update.Searcher | $MSUpdateSearcher = New-Object -ComObject Microsoft.Update.Searcher | ||
Zeile 31: | Zeile 32: | ||
} | } | ||
} | } | ||
+ | </source> | ||
+ | |||
+ | === Windows Update Dilemma === | ||
+ | ==== Windows Server 2019 ==== | ||
+ | Microsoft ships with Windows Server 2019 the PowerShell-Module "WindowsUpdateProvider" that is handy and this works like following: | ||
+ | <source lang="powershell"> | ||
+ | Import-Module WindowsUpdateProvider | ||
+ | $availableUpdates = Start-WUScan | ||
+ | if ($availableUpdates.Count -gt 0) { | ||
+ | Write-Host "[$(Get-Date -Format HH:mm:ss)] Following $($availableUpdates.Count) Updates are about to be installed:" | ||
+ | $availableUpdates | Format-Table Title, MsrcSeverity | ||
+ | $null = Install-WUUpdates -Updates $availableUpdates | ||
+ | Write-Host "[$(Get-Date -Format HH:mm:ss)] $($availableUpdates.Count) Updates has been succesfully installed" | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | ==== Windows Server 2016 ==== | ||
+ | Microsoft said on Windows Server 2016 you should use the CIM-Class MSFT_WUOperationsSession like following: | ||
+ | <source lang="powershell"> | ||
+ | $cimInstance = New-CimInstance -Namespace root/Microsoft/Windows/WindowsUpdate -ClassName MSFT_WUOperationsSession | ||
+ | $updateScanResult = Invoke-CimMethod -InputObject $cimInstance -MethodName ScanForUpdates -Arguments @{SearchCriteria = "IsInstalled=0"; OnlineScan = $true } | ||
+ | $availableUpdates = $updateScanResult.Updates | ||
+ | Invoke-CimMethod -InputObject $cimInstance -MethodName ApplyApplicableUpdates | ||
</source> | </source> | ||
Version vom 18. Januar 2022, 09:42 Uhr
Inhaltsverzeichnis
Search, Download & Install Windows Updates
Because of the Windows Update dilemma with different Windows versions, I wrote the following script that should works on Windows Server 2016, 2019, 2022 and maybe higher.
$MSUpdateSearcher = New-Object -ComObject Microsoft.Update.Searcher $Updates = $MSUpdateSearcher.Search("IsInstalled=0 AND IsHidden=0").Updates $MSUpdateCollection = New-Object -ComObject Microsoft.Update.UpdateColl foreach($Update in $Updates) { $MSUpdateCollection.Add($Update) | Out-Null } if($MSUpdateCollection.Count -gt 0) { Write-Host "Accept EULA, if is necessary." foreach($Update in $MSUpdateCollection) { if($Update.EulaAccepted -eq 0) {$Update.AcceptEula()} } Write-Host "Download the selected updates." $MSUpdateSession = New-Object -ComObject Microsoft.Update.Session $MSUpdateDownloader = $MSUpdateSession.CreateUpdateDownloader() $MSUpdateDownloader.Updates = $MSUpdateCollection $MSUpdateDownloader.Download() Write-Host "Install the downloaded updates." $MSUpdateInstaller = New-Object -ComObject Microsoft.Update.Installer $MSUpdateInstaller.Updates = $MSUpdateCollection $InstallResult = $MSUpdateInstaller.Install() if ($InstallResult.RebootRequired) { Restart-Computer -Force } }
Windows Update Dilemma
Windows Server 2019
Microsoft ships with Windows Server 2019 the PowerShell-Module "WindowsUpdateProvider" that is handy and this works like following:
Import-Module WindowsUpdateProvider $availableUpdates = Start-WUScan if ($availableUpdates.Count -gt 0) { Write-Host "[$(Get-Date -Format HH:mm:ss)] Following $($availableUpdates.Count) Updates are about to be installed:" $availableUpdates | Format-Table Title, MsrcSeverity $null = Install-WUUpdates -Updates $availableUpdates Write-Host "[$(Get-Date -Format HH:mm:ss)] $($availableUpdates.Count) Updates has been succesfully installed" }
Windows Server 2016
Microsoft said on Windows Server 2016 you should use the CIM-Class MSFT_WUOperationsSession like following:
$cimInstance = New-CimInstance -Namespace root/Microsoft/Windows/WindowsUpdate -ClassName MSFT_WUOperationsSession $updateScanResult = Invoke-CimMethod -InputObject $cimInstance -MethodName ScanForUpdates -Arguments @{SearchCriteria = "IsInstalled=0"; OnlineScan = $true } $availableUpdates = $updateScanResult.Updates Invoke-CimMethod -InputObject $cimInstance -MethodName ApplyApplicableUpdates
Remove Windows Update
wusa /uninstall /kb:<KB-Number>