2013-10-27 79 views
1

我對使用PowerShell和一般的計算機編程完全陌生。我試圖創建一個腳本來殺死一個進程(在這種情況下是firefox),如果它超過了10MB的工作集。我想用if語句來做這件事,並且還包括一個管道命令。到目前爲止,我有這個:通過管道命令使用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

您需要包裝條件在一個循環:

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

否則條件將被從管道,這意味着當前的對象變量($_)將在該點空獨立地進行評價。

3

您可以使用Name參數(無需爲此使用Where-Object)過濾有問題的進程,然後將對象傳遞給Stop-Process cmdlet。請注意0​​開關,它顯示瞭如果cmdlet運行(該cmdlet未運行)會發生什麼情況。將其刪除以執行該cmdlet。

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

+1。我提出了兩個答案,但這實際上是處理這種情況的更強大的方式。如果可以的話,我會給這個+2。 :) – Neolisk