我需要從PowerShell(v1.0)腳本中識別正在執行的批處理文件的P(rocess)ID。任何人都可以提出一種做法嗎?在Powershell中識別執行批處理文件的PID
謝謝,MagicAndi。
我需要從PowerShell(v1.0)腳本中識別正在執行的批處理文件的P(rocess)ID。任何人都可以提出一種做法嗎?在Powershell中識別執行批處理文件的PID
謝謝,MagicAndi。
嗯,這是否可能取決於你如何執行批處理文件。
一般來說,唯一可能的方法是查看用於啓動批處理的命令行。在Windows資源管理器如果您雙擊一個批處理文件,你會得到一個像
cmd /c ""C:\Users\Me\test.cmd" "
使用PowerShell命令行,那麼你可以在Win32_Process
使用Get-WMIObject
其中包括命令行:
PS Home:\> gwmi Win32_Process | ? { $_.commandline -match "test\.cmd" } | ft commandline,processid -auto
commandline processid
----------- ---------
cmd /c ""C:\Users\Me\test.cmd" " 1028
然而,如果您直接從命令提示符啓動批處理,那麼您無法從外部找到批處理正在運行以及是誰啓動的批處理。
我不相信這是可行的,可靠的方式。批處理文件本身不啓動單獨的進程,而是在cmd.exe實例中運行。沒有從該特定進程導出的數據可以可靠地告訴你正在運行的文件。
一個例外是,如果cmd.exe實例專門啓動以運行批處理文件。在這種情況下,它將出現在應用程序的命令行中,並且可以對批處理文件的命令行進行grep操作。儘管在cmd.exe提示符下運行多個批處理文件,但這並不能解決正常情況。
耶,有效答案的匿名downvote – JaredPar
我發現了一種發現正在運行的批處理文件的PID的方法。您將需要設置批次控制檯窗口的標題在批處理文件來標識它:
...
Title MyBatchWindow
...
在PowerShell腳本,您可以從您的批量匹配的進程檢查MainWindowTitle屬性和檢索PID窗口標題:
$batchProcess = get-process cmd | where-Object {$_.MainWindowTitle -eq "MyBatchWindow"}
$processID = $batchProcess .ID
...
我已經測試過這個方法,而且似乎都在那裏你調用通過雙擊該批處理文件,或通過命令行調用它的工作。
約翰內斯,優秀的答案。 +1請查看我的答案,以找到一個甚至可以從命令提示符調用的特定批處理文件的可能方法。如果您發現此答案有問題,請對其進行評論!謝謝。 – MagicAndi
雖然,我在這裏做的是*不夠*漂亮。 – Joey
約翰內斯,它不一定非常漂亮 - 它足夠好,可以得到一些有用的東西。 – MagicAndi