我对使用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语句也会被重现。
答案 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