1

シナリオ: 特定のプロセスが実行されているかどうかを確認し、実行されている場合は終了するまで待ちます。

私の Perl スクリプトは WMI-->Win32_Process を使用して、実行中のプロセスのリストを取得しています。以下のコードで実行中のプロセスを見つけることができます

my $objWMIService = Win32::OLE->GetObject("winmgmts:\\\\localhost\\root\\CIMV2");
my $sqry = "SELECT * FROM Win32_Process where Name = \"$processName\" ";`

$processNameスクリプトで設定されている場所。

上記のコードはデスクトップでは正常に動作しますが、ターミナル サーバーでは別の方法で動作します。これは、上記のコードが他のユーザーの実行中のプロセスを取得するためです。

質問: 上記のクエリにユーザー名/ID フィルターを追加するにはどうすればよいですか? 現在のユーザーのプロセスを取得する簡単な方法はありますか?

4

1 に答える 1

0

解決策を手に入れました(少なくとも回避策)。誰かが興味を持った場合に備えて。

use Win32::OLE::Variant;
my $useridval;  
my ($strUser, $strDomain) = (   Variant(VT_BSTR|VT_BYREF, '<undef>'),   Variant(VT_BSTR|VT_BYREF, '<undef>')    );
foreach my $objItem (in $colItems) {
    $useridval = $objItem->GetOwner($strUser, $strDomain);
    if (length($useridval) > 0) {
    if ($useridval == 0 ){
        print ("Process " . $objItem->{Name} . " id: " . $objItem->{ProcessId} . " session id: " . $objItem->{SessionId}) . " owner: " . $strUser->Value . "\n";
        }
    }
}

編集:単純な変数が機能しなかったため、変更されたコードを追加しました。シンプルにするために、すべてのエラーチェックを削除しました

皆さん、ありがとうございました

于 2013-01-10T12:54:19.360 に答える