2013-05-21 84 views
2

當使用Get-Process時,我如何使用字符串作爲-Name?Powershell Get-Process字符串作爲名稱

$program = "MyProgram" 
Get-Process $program 

而不是

Get-Process -MyProgram 
+0

爲什麼不使用'Get-Process -Name MyProgram'? –

+0

例如,我試圖做的是創建一個數組爲字符串與不同的程序名稱,並做一個foreach循環,該foreach它將得到的過程,然後做一些事情 – ThingWings

+4

'-Name'參數接受和字符串數組:'' Get-Process -Name powershell,chrome'。然後你可以通過管道輸出到'ForEach-Object'來循環。 –

回答

4

PowerShell的將接受的名稱,不管是什麼。

Get-Process Firefox 

將返回所有正在運行的Firefox。同樣,陣列將工作太:

Get-Process Firefox, iexplore 

或者

$Proc = @("Firefox","iexplore") 
Get-Process $Proc 

明確聲明的陣列,然後檢查每個正在運行的進程。

當然,如前所述,您可以和應該使用-Name爲清晰。但沒有什麼改變。該腳本還是應該讀的東西,如:

$Proc = @("Firefox","iexplore") 
Get-Process -Name $Proc 

也有位置對象的方法:

Get-Process | Where-Object {$_.Name -eq "Firefox"} 

要做到「東西」有了它,只是管對象爲腳本塊。

位置對象:

PS C:\> Get-Process | Where-Object {$_.Name -eq "Firefox"} | fl $_.ID 

返回:

Id  : 7516 
Handles : 628 
CPU  : 1154.1421983 
Name : firefox 

得到處理$ PROC | FT ID,名稱

將返回:

Id Name 
    -- ---- 
    7516 firefox 
    12244 iexplore 
    12640 iexplore 

或者,你可以最後再使用通過他們所提到的的foreach對象,循環:

Get-Process $Proc | ForEach-Object {If($_.Path -contains "C:\Program Files*"){Write-host "Bad Directory"} else{ write-host "Safe"}} 

如果.exe文件上面運行的是從C:\ Program Files *運行,然後寫出「Safe」,否則寫入「Bad Directory」。

0

似乎通過普及協議,回答你的問題是爲-Name參數Get-Process像這樣提供一個字符串數組:

Get-Process -Name MyProgramA,MyProgramB 

你可以

Get-Process -Name MyProgramA,MyProgramB | ForEach-Object {$_} 
:然後通過使用管道循環

你也可以使用一個變量:

Get-Process -Name $MyProgramStringArrray