Как использовать если иначе в Powershell Where-Object - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь выполнить поиск исправлений, установленных на машине, и передать имя машины с указанным КБ, установленным на лист Excel, «иначе» передать имена машин без КБ, установленного на другой лист Excel.

IМы получили базовую команду, которая сделает это, но поскольку она использует команду% (foreach), она добавляет имя машины к листу Excel для каждого КБ, который он находит или не находит, и я получаю десятки дубликатов..

Как я могу заставить этот код добавлять одну запись для каждого поиска во всех КБ, а не для каждого КБ?

Get-HotFix | %{if($_.HotFixID -match "KB2687455"){(get-wmiobject win32_computersystem).name | Out-File C:\Installed.txt -append}` else{(get-wmiobject win32_computersystem).name | Out-File C:\NotInstalled.txt -Append}}

РЕДАКТИРОВАТЬ:

У меня естьнашел работу вокруг.Вместо того, чтобы пытаться сделать это в коде типа командной строки, я переписал код, и он неожиданно сработал.Дайте мне знать, если увидите какие-либо потенциальные проблемы с этим кодом.

if (Get-HotFix |?{$_.HotFixID -match "KB2687455"}) {
    (get-wmiobject win32_computersystem).name | out-file C:\Installed.txt
}
else {
    (get-wmiobject win32_computersystem).name | out-file C:\NotInstalled.txt
}

1 Ответ

0 голосов
/ 17 октября 2018

Вы перебираете установленные исправления и записываете результаты для каждого исправления, когда все выглядит так, как будто все, что вам нужно сделать, это записать, установлено ли на данном компьютере исправление или нет.Я предполагаю, что вы будете запускать это на нескольких машинах, и что выходной файл будет находиться в общей сетевой папке.

Вам нужно выйти из блока ELSE после первоначального прохода:

Get-HotFix | % { 
    if($_.HotFixID -match "KB2687455") {
        (get-wmiobject win32_computersystem).name | Out-File C:\temp\Installed.txt -append
    } else{
        (get-wmiobject win32_computersystem).name | Out-File C:\temp\NotInstalled.txt -Append
        break
    }
}
...