Определите PID исполняемого пакетного файла в Powershell - PullRequest
1 голос
/ 27 августа 2009

Мне нужно определить P (rocess) ID исполняемого пакетного файла из скрипта PowerShell (v1.0).Кто-нибудь может предложить способ сделать это?

Спасибо, MagicAndi.

Ответы [ 3 ]

3 голосов
/ 27 августа 2009

Ну, возможно ли это, зависит от того, как вы выполнили пакетный файл.

В общем, единственный способ узнать это - посмотреть на командную строку, используемую для запуска пакета. Если дважды щелкнуть командный файл в проводнике Windows, вы получите командную строку, например

cmd /c ""C:\Users\Me\test.cmd" "

В Powershell вы можете использовать Get-WMIObject на Win32_Process, который включает в себя командную строку:

PS Home:\> gwmi Win32_Process | ? { $_.commandline -match "test\.cmd" } | ft commandline,processid -auto

commandline                             processid
-----------                             ---------
cmd /c ""C:\Users\Me\test.cmd" "             1028

Однако, если вы запустили пакет непосредственно из командной строки, у вас не будет способа узнать, что пакет запущен и кто его запустил.

2 голосов
/ 27 августа 2009

Я нашел один метод обнаружения PID запущенного пакетного файла. Вам нужно будет установить заголовок окна консоли пакета в файле пакета, чтобы идентифицировать его:

...
Title MyBatchWindow
...

В сценарии PowerShell вы можете проверить свойство MainwindowTitle и получить PID из процесса, который соответствует заголовку вашего пакетного окна:

$batchProcess = get-process cmd | where-Object {$_.MainWindowTitle -eq "MyBatchWindow"}
$processID = $batchProcess .ID
...

Я проверил этот метод, и он, похоже, работает как при вызове командного файла, дважды щелкнув его, так и при вызове из командной строки.

1 голос
/ 27 августа 2009

Я не верю, что это возможно надежным способом. Сами пакетные файлы не запускают отдельный процесс, а запускаются в экземпляре cmd.exe. Из этого конкретного процесса нет экспортированных данных, которые бы достоверно указывали, какой файл запускается.

Единственное исключение - если экземпляр cmd.exe запускается специально для запуска пакетного файла. В этом случае он появится в командной строке приложения, и можно будет выполнить командную строку для командного файла. Это не решит нормальный случай, хотя несколько командных файлов запускаются из командной строки cmd.exe.

...