2014-09-05 6 views
1

У меня есть приложение, которое запускает несколько экземпляров самого себя. напримерpowershell v2 - как получить идентификатор процесса

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

Использование Powershell v2 Я пытаюсь создать простой скрипт, который дал массив AppNames и экземпляров, она перебирает их, проверяет, если они работают, а затем закрывает их.

Я полагал, что лучший способ сделать это - проверить для каждого экземпляра, если он обнаружит его processID и передать его командлету stop-process.

НО, я не могу понять, как получить идентификатор процесса.

До сих пор у меня есть:

$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 
      } 
    } 

Может кто-нибудь сказать мне, где можно получить идентификатор процесса из пожалуйста?

+1

это должно быть проще: '$ PID = Get-Process имя_приложения | выберите -expand идентификатор' –

+0

Я еще новичок к powershell, но вот почему мне это нравится. 15 строк кода сокращены до 1. Однако при запуске я получаю следующую ошибку: «Невозможно перезаписать переменный PID, потому что он доступен только для чтения или постоянный» – IGGt

+1

О, извините, это встроенное имя переменной, вы можете заменить любым вы хотите, например, '$ processid' –

ответ

4

вы можете использовать Get-Process Командлет вместо использования WMI:

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

+0

Это замечательные приветствия. – IGGt

Смежные вопросы