我正在尝试学习powershell并尝试构建if if语句:

if ((Get-Process | Select-Object name) -eq "svchost") {
    Write-Host "seen"
    }
    else {
    Write-Host "not seen"
    }

尽管存在svchost进程,但这最终变成了“未看到”。如何修改它以获得正确的结果?

最佳答案

您的if-else构造是完美的,但是请更改if条件,如下所示:

(Get-Process | Select-Object -expand name) -eq "svchost"

最初,您将对象与“svchost”进行比较,该对象的评估结果为false。使用-expandProperty标志,您将获得对象的该属性,该属性是一个字符串,可以与“svchost”进行适当比较。

请注意,在上面,您正在将包含进程名称的字符串数组与“svchost”进行比较。如果是数组,则-eq为true(如果该数组包含另一个表达式),在这种情况下为“svchost”

还有其他“更好”的检查方法:
if (Get-Process | ?{ $_.Name -eq "svchost"}) {
  Write-Host "seen"
}
else {
  Write-Host "not seen"
}

10-06 12:45