Назад | Перейти на главную страницу

Использование get-wsuscomputer с -ComputerUpdateStatus

У меня WSUS установлен на коробке Server 2012R2. Я пытаюсь использовать Get-WsusComputer Команда powershell, чтобы получить список компьютеров с ожидающими или неудачными обновлениями. Документация для команды, кажется, предполагает, что -ComputerUpdateStatus правильный вариант для этого.

-ComputerUpdateStatus Задает состояние обновления компьютера, представленное в пользовательском интерфейсе консоли WSUS. Допустимые значения для этого параметра: ...

Проблема, с которой я столкнулся, заключается в том, что использование этой опции, похоже, не имеет никакого значения. Когда я смотрю на консоль в графическом интерфейсе, около 75% моих систем находятся в состоянии ОК, некоторые из них какое-то время были отключены, некоторые имеют сбои, а остальные показывают пару 1-2 обновлений в нужном столбце.

PS D:\> get-wsuscomputer -ComputerTargetGroups Workstations | Measure-Object

Count    : 264

PS D:\> get-wsuscomputer -ComputerTargetGroups Workstations `
>>                  -ComputerUpdateStatus Failed  | Measure-Object

Count    : 264

PS D:\> get-wsuscomputer -ComputerTargetGroups Workstations `
>>                  -ComputerUpdateStatus FailedOrNeeded | Measure-Object

Count    : 264

Эта опция просто сломана? Или мне не хватает чего-то очевидного о том, как его использовать?

Ошибка в модуле WSUS PowerShell. Я декомпилировал модуль, и команда GetWSUSComputer выглядит так, как будто кто-то установил для переменной все статусы по умолчанию, если она равна нулю, даже если для переменной не было значения, определенного до следующей строки. Конструкция модуля не раскрывает состояние обновления компьютера в объекте, предоставляемом Get-WSUSComputer, поэтому вы также не можете фильтровать его постфактум.

Вот статья, описывающая все, что вас интересует.

https://blogs.technet.microsoft.com/heyscriptingguy/2012/01/20/get-windows-update-status-information-by-using-powershell/

Я попробовал часть кода из этой статьи, он работает очень хорошо. Обратите внимание на опечатку по адресу:

$wsus.GetUpdateStatue($updatescope,$False)

так должно быть:

$wsus.GetUpdateStatus($updatescope,$False)