如何在 Where-Object Powershell 中使用 If Else

How To Use If Else In Where-Object Powershell

我正在尝试搜索安装在机器上的 HotFixes,并将安装了指定 KB 的机器名称通过管道传输到未安装 KB 的 excel sheet "else" 管道名称到另一个 excel sheet.

我已经记下了执行此操作的基本命令,但是因为它使用了 % (foreach) 命令,所以它会将机器名称附加到 excel sheet 中的每个 KB找到或没有找到,我最终得到了几十个重复项。

我怎样才能让这段代码为所有 KB 的每次搜索附加一个条目,而不是为每个 KB 附加一个条目?

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
}

您正在循环检查已安装的修补程序,并为每个修补程序编写结果,而您想要做的只是写下给定机器是否安装了修补程序。我假设您将在多台机器上 运行 并且输出文件将在网络共享上。

您需要在初始传递后跳出 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
    }
}