2014-08-28 105 views
0

我想通過PS來完成以下任務,並且遇到了需要的問題。我已經嘗試了很多不同的格式來編寫這個腳本,這是我想到的最接近的。PowerShell終止多個進程

我運行以下,沒有錯誤,但沒有結果。

$softwarelist = 'chrome|firefox|iexplore|opera' 
get-process | 
Where-Object {$_.ProcessName -eq $softwarelist} | 
stop-process -force

這是另一個我正在嘗試的例子,但這個例子並沒有終止我提供的所有進程(IE在W8.1中)。

1..50 | % {notepad;calc} 

$null = Get-WmiObject win32_process -Filter "name = 'notepad.exe' OR name = 'calc.exe'" | 

% { $_.Terminate() }

感謝您的幫助!

回答

7

您的$softwarelist變量看起來像一個正則表達式,但在您的Where-Object條件中,您正在使用-eq運算符。我想你想的-match操作:

$softwarelist = 'chrome|firefox|iexplore|opera' 
get-process | 
    Where-Object {$_.ProcessName -match $softwarelist} | 
    stop-process -force 

您也可以通過多個進程Get-Process,例如

Get-Process -Name 'chrome','firefox','iexplore','opera' | Stop-Process -Force 
+0

我已經給這一個嘗試,這確實與-match到位當量的工作。你簡化字符串是一種改進,我會用它來代替。 -eq不能以這種方式與變量數組一起使用嗎? – lasersauce 2014-08-28 22:37:14

+0

我不知道'-eq'是如何對陣的,但在這種情況下'$ softwarelist'不是一個數組,它是一個字符串。要創建一個數組,你必須將它分開,例如'$ softwarelist -split'|''。 – 2014-08-29 02:46:59

1
# First, create an array of strings. 
$array = @("chrome","firefox","iexplore","opera") 


# Next, loop through each item in your array, and stop the process. 
foreach ($process in $array) 
{ 
    Stop-Process -Name $process 
} 
+0

我喜歡使用多個數組的想法,我覺得數組=靈活性。也許這是我在數據庫管理員工作期間的一個錯誤觀念。 – lasersauce 2014-08-28 22:51:51