1

一般来说,我对使用 PowerShell 和计算机编程完全陌生。我正在尝试创建一个脚本,如果它超过 10mb 的工作集,它将杀死一个进程(在这种情况下是 firefox)。我想使用 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 语句总是被复制。

4

2 回答 2

4

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

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

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

于 2013-10-27T18:03:18.577 回答
3

您可以使用 Name 参数(无需Where-Object用于此目的)过滤有问题的进程,然后将对象通过管道传输到Stop-Processcmdlet。注意这个-WhatIf开关,它显示了 cmdlet 运行时会发生什么(cmdlet 没有运行)。删除它以执行 cmdlet。

Get-Process -Name firefox | 
Where-Object {$_.WorkingSet -gt 10mb} | 
Stop-Process -WhatIf
于 2013-10-27T20:24:45.857 回答