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 回答