WSUS API получает необходимое обновление, количество

При просмотре API WSUS 3.0 я никак не могу определить, требуется ли данное обновление. . Перечисление 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 A Консоль администрирования?

0
задан 24 March 2016 в 18:03
1 ответ

Решение заключалось в самом объекте Update с его членом State .

Состояние NotNeeded устанавливается только в том случае, если сервер обновлений сохраняет пакеты локально, поэтому это необходимо проверить в конфигурации.

Также состояние пакета привязано к состоянию утверждения. Поэтому, если пакет был одобрен, но не загружен и не установлен, предполагается, что пакет не нужен.

Я проверил, и это отражает поведение консоли администрирования WSUS.

$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)
1
ответ дан 4 December 2019 в 16:39

Теги

Похожие вопросы