2013-01-10 25 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

相關問題