PowerShell(v1.0)スクリプトから実行中のバッチファイルのP(ロセス)IDを特定する必要があります。誰もこれを行う方法を提案することはできますか?Powershellで実行中のバッチファイルのPIDを特定する
ありがとう、MagicAndi。
PowerShell(v1.0)スクリプトから実行中のバッチファイルのP(ロセス)IDを特定する必要があります。誰もこれを行う方法を提案することはできますか?Powershellで実行中のバッチファイルのPIDを特定する
ありがとう、MagicAndi。
これは可能かどうかは、バッチファイルの実行方法によって異なります。
一般的に、これを見つけることができる唯一の方法は、バッチを開始するために使用するコマンドラインを調べることです。しかし、
PS Home:\> gwmi Win32_Process | ? { $_.commandline -match "test\.cmd" } | ft commandline,processid -auto
commandline processid
----------- ---------
cmd /c ""C:\Users\Me\test.cmd" " 1028
:Windowsエクスプローラでバッチファイルをダブルクリックする場合は、コマンドラインを含みますが、その後Win32_Process
にGet-WMIObject
を使用することができますPowerShellで
cmd /c ""C:\Users\Me\test.cmd" "
のようなコマンドラインを取得しますコマンドプロンプトから直接バッチを開始した場合、バッチが実行されていて、誰が起動しているのかを外部的に知る方法はありません。
これは信頼できる方法では可能ではないと私は考えています。バッチファイル自体は別のプロセスを起動するのではなく、代わりにcmd.exeインスタンス内で実行されます。特定のプロセスからどのファイルが実行されているかを確実に伝えるエクスポートされたデータはありません。
ただし、バッチファイルを実行するためにcmd.exeインスタンスが特に起動されている場合は例外です。その場合、アプリケーションのコマンドラインに表示され、バッチファイルのコマンドラインをgrepすることができます。これは、cmd.exeプロンプトから複数のバッチファイルを実行しても、通常の場合は解決されません。
有効な回答の匿名のdownvote – JaredPar
実行中のバッチファイルのPIDを検出する方法が1つ見つかりました。あなたはそれを識別するために、バッチファイルでバッチコンソールウィンドウのタイトルを設定する必要があります。
...
Title MyBatchWindow
...
PowerShellスクリプトでは、MainwindowTitleプロパティをチェックし、あなたのバッチと一致したプロセスからPIDを取得することができますウィンドウタイトル:
$batchProcess = get-process cmd | where-Object {$_.MainWindowTitle -eq "MyBatchWindow"}
$processID = $batchProcess .ID
...
私はこの方法をテストしている、そして両方のどこでそれをダブルクリックすることによって、またはコマンドラインからそれを呼び出すことにより、バッチファイルを呼び出す動作しているように見えます。
ヨハネス、優れた答え。 +1コマンドプロンプトから呼び出された特定のバッチファイルを特定する方法については、私の答えを参照してください。この回答に問題がある場合は、それにコメントしてください!ありがとう。 – MagicAndi
私がここでやっていることは、かわいそうではありません。 – Joey
ヨハネス、それはきれいである必要はありません - それはちょうどうまくいくものを得るのに十分です。 – MagicAndi