查看WSUS 3.0 API 时,我无法找到是否需要给定更新。UpdateInstallationState枚举具有NotApplicable
以下描述的值:“更新不适用于客户端计算机”。
意思是,该更新可能已经安装,因此不再适用于目标计算机。
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 控制台管理中,我确实看到了一些不需要的更新。
我如何知道计算机目标是否真的需要更新并计算WSUS 管理控制台中显示的所需计数值?
解决方案是在Update对象本身及其
State
成员中。仅当
NotNeeded
更新服务器在本地存储包时才设置状态,因此需要从配置中检查。包的状态也绑定到批准状态。因此,如果包已被批准但既没有下载也没有安装,则假定不需要该包。
我检查了一下,这反映了 WSUS 管理控制台的行为。