2014-09-05 101 views
1

我有一個應用程序,運行它自己的多個實例。 e.gpowershell v2 - 如何獲得進程ID

AppName.exe instance1 
AppName.exe instance2 
AppName.exe instance3 

使用PowerShell V2我試圖創建一個給定的AppNames和實例的數組,一個簡單的腳本,它遍歷他們,檢查他們是否正在運行,然後關閉下來。

我想最好的辦法是檢查每個實例,如果發現捕獲它的processID,並將其傳遞給stop-process cmdlet。

但是,我無法弄清楚如何獲得進程ID。

到目前爲止,我有:

$appName = "AppName.exe" 
$instance = "instance1" 

$filter = "name like '%"+$appName+"%'" 
$result = Get-WmiObject win32_process -Filter $filter 

foreach($process in $result) 
    { 
     $desc = $process.Description 
     $commArr = $process.CommandLine -split"()" 
     $inst = $commArr[2] 
     $procID = "GET PROCESS ID HERE" 

     if($inst -eq $instance) 
      { 
       Stop-Process $procID 
      } 
    } 

誰能告訴我從哪裏請給進程ID?

+1

這應該是simplier:'$ PID = GET-過程應用程序名稱|選擇-expand ID' – 2014-09-05 13:05:50

+0

我還是新PowerShell,但這就是爲什麼我喜歡它。 15行代碼減少到1.但是,運行時,出現以下錯誤 - 「無法覆蓋變量PID,因爲它是隻讀或常量」 – IGGt 2014-09-05 13:15:46

+1

哦,對不起,這是一個內置的變量名稱,可以替換爲任何你想要例如'$ processid' – 2014-09-05 13:17:04

回答

4

,你可以使用它來獲取進程cmdlet的而不是使用WMI:

$procid=get-process appname |select -expand id

+0

這是偉大的歡呼聲。 – IGGt 2014-09-05 13:39:22