【问题标题】:PowerShell: how to get if else construct right?PowerShell:如果 else 构造正确,如何获得?
【发布时间】:2011-11-29 16:49:44
【问题描述】:

我正在努力学习powershell并尝试构造一个if else语句:

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

虽然有 svchost 进程,但最终会变成“未见”。如何修改它以获得正确的结果?

【问题讨论】:

    标签: powershell if-statement conditional powershell-2.0


    【解决方案1】:

    你的 if-else 结构是完美的,但改变 if 条件如下:

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

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

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

    还有其他“更好”的检查方法:

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

    【讨论】:

      【解决方案2】:

      您可以简单地要求 Get-Process 获取您所追求的进程:

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

      【讨论】:

      • 但是如果没有进程,那将会出错。这就是为什么我没有建议它。或使用silentlycontinue 使其复杂化
      • 我应该自己添加的。无论如何,这是向用户介绍 ErrorAction 选项的另一种方式。
      • 只是对尚未习惯的人的提示:-ErrorAction SilentlyContinue可以缩写为-ea 0。非常适合打高尔夫球和互动使用,如果您需要的话。不过,不要在脚本中使用它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 2021-12-25
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多