Определите PID исполняемого пакетного файла в Powershell
Мне нужно идентифицировать P(rocess) ID исполняемого пакетного файла из сценария PowerShell (v1.0). Кто-нибудь может предложить способ сделать это?
Спасибо, МэджикАнди.
3 ответа
Ну, возможно ли это, зависит от того, как вы выполнили командный файл.
В общем, единственный способ узнать это - посмотреть на командную строку, использованную для запуска пакета. Если дважды щелкнуть командный файл в проводнике 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
Однако, если вы запустили пакет непосредственно из командной строки, у вас не будет способа узнать, что пакет запущен и кто его запустил.
Я нашел один метод обнаружения PID запущенного пакетного файла. Вам нужно будет установить заголовок окна консоли пакета в файле пакета, чтобы идентифицировать его:
...
Title MyBatchWindow
...
В сценарии PowerShell вы можете проверить свойство MainwindowTitle и получить PID из процесса, который соответствует заголовку вашего пакетного окна:
$batchProcess = get-process cmd | where-Object {$_.MainWindowTitle -eq "MyBatchWindow"}
$processID = $batchProcess .ID
...
Я проверил этот метод, и он, кажется, работает и там, где вы вызываете пакетный файл, дважды щелкнув по нему, или вызвав его из командной строки.
Я не верю, что это возможно надежным способом. Сами пакетные файлы не запускают отдельный процесс, а запускаются в экземпляре cmd.exe. Из этого конкретного процесса нет экспортированных данных, которые бы точно указывали, какой файл запускается.
Единственное исключение - если экземпляр cmd.exe запускается специально для запуска пакетного файла. В этом случае он появится в командной строке приложения, и можно будет выполнить командную строку для командного файла. Это не решит нормальный случай, хотя несколько командных файлов запускаются из командной строки cmd.exe.