PowerShell: how to get if else construct right?

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-01 15:10:05

问题


I'm trying to learn powershell and tried to construct a if else statement:

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

This ends up into "not seen", although there is svchost processes. How to modify this to get correct results?


回答1:


Your if-else construct is perfect, but change the if condition like below:

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

Initially you were comparing an object to the "svchost" which will evaluate to false. With the -expandProperty flag, you are getting that property of the object, which is a string and can be properly compared to "svchost".

Note that in the above you are comparing array of strings, which contains the name of process, to "svchost". In case of arrays -eq is true if the array contains the other expression, in this case the "svchost"

There are other "better" ways to check as well:

if (Get-Process | ?{ $_.Name -eq "svchost"}) {
  Write-Host "seen"
}
else {
  Write-Host "not seen"
}



回答2:


You can simply ask Get-Process to get the process you're after:

if (Get-Process -Name svchost -ErrorAction SilentlyContinue) 
{
  Write-Host "seen"
}
else 
{
  Write-Host "not seen"
}


来源:https://stackoverflow.com/questions/7631564/powershell-how-to-get-if-else-construct-right

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!