WSUS API获取更新需要计数

在查看WSUS 3.0 API时,我无法find是否需要给定的更新。 UpdateInstallationState枚举有一个NotApplicable值,其描述如下:“ 该更新不适用于客户端计算机 ”。

Meeaning,该更新可能已经安装,因此不再适用于目标计算机。

Powershell代码将计算每次更新的更新适用的计算机目标的数量。

 $updateScope = New-Object Microsoft.UpdateServices.Administration.UpdateScope $updateScope.ApprovedStates = [Microsoft.UpdateServices.Administration.ApprovedStates]::Any $updateScope.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::All $updatesCount = @{} ForEach ($cpt in $WSUS.GetComputerTargets().GetEnumerator()) { ForEach ($updt in $cpt.GetUpdateInstallationInfoPerUpdate($updateScope)) { If (-not $updatesCount.ContainsKey($updt.UpdateId)) { $updatesCount.Set_Item($updt.UpdateId, 0) } If ($updt.UpdateInstallationState -eq [Microsoft.UpdateServices.Administration.UpdateInstallationState]::NotApplicable) { Continue } $updatesCount[$updt.UpdateId] += 1 } } 

在我的WSUS服务器上运行此代码,我将得到不适用的更新(计数等于0)。 但是,在WSUS控制台pipe理中,我确实看到一些不需要的更新。

如何知道计算机目标是否真的需要更新,并计算WSUSpipe理控制台中显示的“ 需要的计数”值?

解决scheme是在Update对象本身的State成员。

只有当更新服务器在本地存储软件包时才会设置NotNeeded状态,所以需要从configuration中检查。

包的状态也被绑定到批准状态。 所以如果软件包已经被批准但是既不被下载也不被安装,那么软件包被认为是不需要的。

我检查了这一点,这反映了WSUSpipe理控制台的行为。

 $toDecline = @() If ($WSUS.GetConfiguration().HostBinariesOnMicrosoftUpdate -or $WSUS.GetConfiguration().DownloadUpdateBinariesAsNeeded) { ForEach ($updt in $WSUS.GetUpdates($updateScope).GetEnumerator()) { If ($updt.IsDeclined) { Continue } If ($updt.State -eq [Microsoft.UpdateServices.Administration.UpdateState]::NotNeeded -or $updt.State -eq [Microsoft.UpdateServices.Administration.UpdateState]::Ready) { $updtSummary = $updt.GetSummary($computerScope) If ($updtSummary.DownloadedCount -eq 0 -and $updtSummary.InstalledCount -eq 0) { $toDecline += $updt.Id } } } } Write-Verbose("Number of uneeded updates: {0}." -f $toDecline.Length)