Сценарий обнаружения для исправлений Windows - PullRequest
0 голосов
/ 08 марта 2019

Итак, недавно у нас возникли проблемы с обновлением KB971033 в нашей сети, и мне удалось получить рабочий сценарий для его удаления и повторной активации Windows, однако при попытке заставить сценарий обнаружения работать так, чтобы он работал только на зараженных компьютерах, я не могу заставить его правильно выводить true или false при тестировании с установленными КБ.

Пока это то, что я бегу. Независимо от того, что я делаю, он выдаст false. Что-нибудь очевидное, что мне не хватает?

if ((get-hotfix).hotfixid -eq "KB971033") {$true} else {$false}

Ответы [ 4 ]

2 голосов
/ 08 марта 2019

(get-hotfix).hotfixid возвращает массив, поэтому вы не должны сравнивать его с -eq.

Это должно сделать это:

((Get-HotFix  | Select-Object -ExpandProperty HotFixID) -contains 'KB971033')

или для краткости:

(((Get-HotFix).HotFixID) -contains 'KB971033')
1 голос
/ 08 марта 2019

ИМО совершенно неэффективно просеивать через все исправления при тестировании отдельного исправления.

if (Get-Hotfix -ID KB971033 -EA 0) {$true} else {$false}

-EA 0 является сокращением для -ErrorAction SilentlyContinue

0 голосов
/ 08 марта 2019

В моей среде Windows Server 2016 ваш код работает нормально ... возможно, исправление не установлено или отсутствует в списке с помощью get-hotfix

В противном случае вы можете попробовать это:

$HotfixID= "KB971033"
IF((get-hotfix).hotfixid | ?{ $_ -eq $HotfixID}){$true} else {$false}

Работает также на удаленном компьютере:

(get-hotfix).hotfixid -ComputerName "***SomeDNSName / FQDN***"
0 голосов
/ 08 марта 2019

Может быть попробовать

 if ($(get-hotfix).hotfixid -eq "KB971033") {$true} else {$false}

"$" превратит результат "Get-Hotfix" в объект с элементом ".hotfixID".

...