1

Perl で Win32_Process::GetOwner メソッドを使用して、実行中のすべてのプロセスの名前とドメイン プロパティを列挙したいのですが、私のコードは以下のとおりです。

use strict;
use warnings;
use Win32::OLE('in');
use Win32::OLE::Variant;

my $retval;
my $machine = ".";
my $outParam;
my $CLASS = "Winmgmts:{impersonationlevel=impersonate}!\\\\$machine\\root\\cimv2";
my $WMI = Win32::OLE->GetObject($CLASS) or die("GetObject:" . Win32::OLE->LastError());
my $process = $WMI->InstancesOf("Win32_Process");

my $vtName = Win32::OLE::Variant->new(VT_CY, VT_EMPTY);
my $vtDomain = Win32::OLE::Variant->new(VT_CY, VT_EMPTY);
foreach my $obj(in $process)
{
    $retval = $obj->GetOwner($vtName, $vtDomain);
    if($retval == 0){
        print $vtName->Value() . "\t" . $vtDomain->Value() . "\n";
    }
}

スクリプトは適切に実行できますが、毎回「ゼロ」のエコー文字列が表示されます。

エコー

この問題の原因とその修正方法を誰が教えてくれますか? ありがとうございました!

4

1 に答える 1

1

Karthik には、探しているコードが既にあるようです。

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

また、他の誰かが Perl が実際のデータではなくステータス コード 0 を発行するという同じ問題を抱えているようです: http://code.activestate.com/lists/perl-win32-users/16230/

于 2013-01-25T20:12:45.933 に答える