使用带有管道命令的If语句

时间:2013-10-27 17:58:34

标签: powershell

我对使用PowerShell和计算机编程一般都很陌生。我正在尝试创建一个脚本来杀死一个进程(在这种情况下是firefox),如果它超过10mb的工作集。我想使用if语句执行此操作,并且还包含管道命令。到目前为止,我有这个:

get-process|where-object {$_.ProcessName -eq"firefox"}

if ($_.WorkingSet -gt10000000)
      {kill}
else
       {"This process is not using alot of the computers resources"}

任何人都可以帮忙解决这个问题吗?即使firefox超过10MB工作集,else语句也会被重现。

2 个答案:

答案 0 :(得分:4)

您需要将条件包装在循环中:

Get-Process | ? { $_.ProcessName -eq 'firefox' } | % {
  if ($_.WorkingSet -gt 10MB) {
    kill $_
  } else {
    "This process is not using alot of the computers resources"
  }
}

否则条件将独立于管道进行评估,这意味着当前对象变量($_)在该点为空。

答案 1 :(得分:3)

您可以使用Name参数过滤相关过程(不需要为此目的使用Where-Object),然后将对象传递给Stop-Process cmdlet。注意-WhatIf开关,它显示了cmdlet运行时会发生什么(cmdlet未运行)。删除它以执行cmdlet。

Get-Process -Name firefox | 
Where-Object {$_.WorkingSet -gt 10mb} | 
Stop-Process -WhatIf