Powershell 将If语句与管道命令一起使用
一般来说,我对使用PowerShell和计算机编程是完全陌生的。我试图创建一个脚本,如果进程超过10mb的工作集,它将终止进程(本例中为firefox)。我希望使用if语句并包含piping命令来完成此操作。到目前为止,我有:Powershell 将If语句与管道命令一起使用,powershell,Powershell,一般来说,我对使用PowerShell和计算机编程是完全陌生的。我试图创建一个脚本,如果进程超过10mb的工作集,它将终止进程(本例中为firefox)。我希望使用if语句并包含piping命令来完成此操作。到目前为止,我有: get-process|where-object {$_.ProcessName -eq"firefox"} if ($_.WorkingSet -gt10000000) {kill} else {"This process is not us
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语句也会一直被复制。您需要将条件封装在一个循环中:
Get-Process | ? { $_.ProcessName -eq 'firefox' } | % {
if ($_.WorkingSet -gt 10MB) {
kill $_
} else {
"This process is not using alot of the computers resources"
}
}
否则,将独立于管道对条件进行求值,这意味着当前对象变量(
$)\u
在该点将为空。您需要将条件包装在循环中:
Get-Process | ? { $_.ProcessName -eq 'firefox' } | % {
if ($_.WorkingSet -gt 10MB) {
kill $_
} else {
"This process is not using alot of the computers resources"
}
}
否则,该条件将独立于管道进行计算,这意味着当前对象变量(
$\u
)将在该点为空。您可以通过使用Name参数筛选有问题的流程(无需为此使用Where object
)然后将对象通过管道传输到Stop进程
cmdlet。请注意-WhatIf
开关,它显示了如果cmdlet运行(cmdlet未运行)会发生什么情况。删除它以执行cmdlet
Get-Process -Name firefox |
Where-Object {$_.WorkingSet -gt 10mb} |
Stop-Process -WhatIf
您可以通过使用Name参数(无需为此目的使用
Where Object
)来过滤有问题的进程,然后将对象通过管道传输到Stop process
cmdlet。请注意-WhatIf
开关,它显示了如果cmdlet运行(cmdlet未运行)会发生什么情况。删除它以执行cmdlet
Get-Process -Name firefox |
Where-Object {$_.WorkingSet -gt 10mb} |
Stop-Process -WhatIf
+1.我对两个答案都投了赞成票,但这确实是一种处理此类情况的更为强大的方式。如果可以的话,我会给这个打+2分。:)+1.我对这两个答案都投了赞成票,但这确实是一种处理此类情况的更为强大的方式。如果可以的话,我会给这个打+2分。:)