1

PowerShell (v1.0) スクリプトから実行中のバッチ ファイルの P(プロセス) ID を特定する必要があります。誰でもこれを行う方法を提案できますか?

ありがとう、マジックアンディ。

4

3 に答える 3

3

実行中のバッチ ファイルの PID を検出する 1 つの方法を見つけました。バッチ ファイルを識別するために、バッチ コンソール ウィンドウのタイトルを設定する必要があります。

...
Title MyBatchWindow
...

PowerShell スクリプトでは、MainwindowTitle プロパティを確認し、バッチ ウィンドウ タイトルに一致するプロセスから PID を取得できます。

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

この方法をテストしたところ、バッチ ファイルをダブルクリックして呼び出す場所でも、コマンド ラインから呼び出す方法でも機能するようです。

于 2009-08-27T16:57:33.617 に答える
3

それが可能かどうかは、バッチ ファイルをどのように実行したかによって異なります。

一般に、これを見つける唯一の方法は、バッチの開始に使用されたコマンド ラインを確認することです。Windows エクスプローラーでバッチ ファイルをダブルクリックすると、次のようなコマンド ラインが表示されます。

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

Powershell では、コマンド ラインが含まれるGet-WMIObjectonを使用できます。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

ただし、バッチをコマンド プロンプトから直接開始した場合は、バッチが実行中であることと、誰が開始したかを外部から確認する方法がありません。

于 2009-08-27T16:49:34.130 に答える
1

これが信頼できる方法で可能であるとは思いません。バッチ ファイル自体は別のプロセスを起動するのではなく、cmd.exe インスタンス内で実行されます。どのファイルが実行されているかを確実に伝える特定のプロセスからエクスポートされたデータはありません。

1 つの例外は、特にバッチ ファイルを実行するために cmd.exe インスタンスが起動された場合です。その場合、アプリケーションのコマンド ラインに表示され、バッチ ファイルのコマンド ラインを grep することができます。cmd.exe プロンプト内から複数のバッチ ファイルが実行されている場合でも、これは通常のケースを解決しません。

于 2009-08-27T16:46:09.380 に答える