如何在 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
}
}
我正在尝试搜索安装在机器上的 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
}
}