PowerShell: how to get if else construct right?

后端 未结 2 489
太阳男子
太阳男子 2021-01-17 14:31

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\"         


        
相关标签:
2条回答
  • 2021-01-17 15:00

    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"
    }
    
    0 讨论(0)
  • 2021-01-17 15:07

    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"
    }
    
    0 讨论(0)
提交回复
热议问题