Как принять булевские решения по управлению из командлета, который возвращает не булевы результаты? - PullRequest
0 голосов
/ 04 октября 2018

Код говорит сам за себя в отношении того, что я пытаюсь сделать.Как заставить оператор if работать в логическом режиме на основе результатов такого командлета, как get-hotfix?По сути, я хочу, чтобы значение True было ЛЮБОМ результатом, а значение false - нулевым возвращением.

Я верю, что PowerShell уже делает это в том смысле, что любой результат всегда считается логическим значением true, и никакой результат не возвращается как ноль.,Мне нужно знать синтаксис на if ($hot -EQ True), который не выдаст ошибку.

#get a list of computernames
$inputFile = Read-Host -Prompt "Please enter the directory path of the input file."
#parse the list of computernames into an array.
$info = Get-Content $inputFile

#loop to run the hotfix check against all the computers.
foreach ($Data in $info) {
  $hot =  Get-HotFix -ComputerName $Data | Where-Object hotfixid -EQ KB4338824
    #if patch is found output true to user
    if ($hot -EQ True){
      Write-Host $Data + "is True"    
    }
    #if patch is not found output false to user
    else {
      Write-Host $Data + "is False" 
    }  
  }

1 Ответ

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

Выбор говорящих имен переменных помогает понять код много.

  • один способ проверить значение свойства - [string]::IsNullOrEmpty()
  • Я бы проверил идентификатор напрямую с помощью Get-Hotfix без Where-Object.
  • и использовал бы [PSCustomObject]@{} для возврата таблицы, легко сохраняемой в виде файла CSV.
  • -EA 0является сокращением для -ErrorAction SilentlyContinue

## Q:\Test\2018\10\04\SO_52649161.ps1

$ComputerList = Read-Host -Prompt "Please enter the directory path of the input file."
$Computers    = Get-Content $ComputerList
$Hotfix       = 'KB4338824'

$result = ForEach($Computer in $Computers){
    $Installed = (!([string]::IsNullOrEmpty(
        (Get-HotFix -ID $Hotfix -Computer $Computer -EA 0).InstalledOn)))
    [PSCustomObject]@{
        Computer  = $Computer
        Hotfix    = $Hotfix
        Installed = $Installed
    }
}
$result
$result | Export-Csv -Path HotFixSummary.csv -NoTypeInformation

Пример вывода

Computer Hotfix    Installed
-------- ------    ---------
PC1      KB4338824     False
PC2      KB4338824      True
...