我正在尝试学习powershell并试图构建一个if else语句:
if ((Get-Process | Select-Object name) -eq "svchost") {
Write-Host "seen"
}
else {
Write-Host "not seen"
}
虽然存在svchost流程,但最终会变成“未见”。如何修改它以获得正确的结果?
答案 0 :(得分:10)
你的if-else结构是完美的,但改变if条件如下:
(Get-Process | Select-Object -expand name) -eq "svchost"
最初,您将对象与“svchost”进行比较,后者将评估为false。使用-expandProperty
标志,您将获得该对象的属性,该属性是一个字符串,可以正确地与“svchost”进行比较。
请注意,在上面您将比较包含进程名称的字符串数组到“svchost”。如果数组包含另一个表达式,则数组-eq
为真,在本例中为“svchost”
还有其他“更好”的方法可以检查:
if (Get-Process | ?{ $_.Name -eq "svchost"}) {
Write-Host "seen"
}
else {
Write-Host "not seen"
}
答案 1 :(得分:2)
您可以直接询问Get-Process以获得您所追求的流程:
if (Get-Process -Name svchost -ErrorAction SilentlyContinue)
{
Write-Host "seen"
}
else
{
Write-Host "not seen"
}