2013-01-10 10 views
1

场景:我想检查给定的进程是否正在运行,如果是,则等待它关闭。如何使用WMI在Perl中查找当前用户的进程

我的Perl脚本使用WMI-> Win32_Process来获取正在运行的进程列表。我能找到正在运行的进程与下面的代码

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

其中$processName在脚本中设置。

上面的代码在桌面上运行良好,但代码在终端服务器中以不同的方式工作,因为它上面的代码选择了其他用户的运行进程。

问题:如何在上述查询中添加用户名/ ID过滤器?有没有简单的方法来获得当前用户的过程?

+0

您应该向我们展示'$ processName'是如何设置的。也许它变得更清楚你想要做什么。 –

+0

您正在使用哪个WMI模块?听起来像'DBD :: WMI'。 – Borodin

+0

'$ processName'是我的应用程序名称..因为参数的缘故,我们可以将它保留为outlook.exe – KK99

回答

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"; 
     } 
    } 
} 

编辑:加入修改后的代码作为简单的变量没有工作。我删除了所有错误检查以保持简单

谢谢大家

+0

这是行不通的吗?我认为'GetOwner'需要变量作为参数,我很惊讶它是否可以用于纯粹的Perl变量。 – Borodin

+0

请参阅更新的代码。谢谢 – KK99

相关问题