Я пытаюсь получить владельца нескольких процессов на Windows-машине с WMI и PHP. Я использовал эту статью, чтобы написать следующий код PHP:
https://www.sitepoint.com/php-wmi-dig-deep-windows-php/
Я могу получить свойства каждого экземпляра, но мне нужен владелец.
И я знаю, что есть метод «GetOwner» в классе Win32_Process, где я должен получить владельца (и домен или ReturnValue).
Я также попытался использовать WMI Explorer и WMI codegenerator, чтобы получить представление о том, как работает синтаксис.
Этот код должен повторять владельца каждого процесса на моей локальной машине.
Вот мой PHP-код:
<?php
$pc = "localhost"; //IP of the PC to manage
$WbemLocator = new COM ("WbemScripting.SWbemLocator");
$WbemServices = $WbemLocator->ConnectServer($pc, 'root\\cimv2');
$WbemServices->Security_->ImpersonationLevel = 3;
$userlist = $WbemServices->ExecQuery ( "Select * from Win32_Process" );
foreach ($userlist as $u) {
$owner= $u->GetOwner; //how to get the owner or domain here?
var_dump($owner);
}
Это возвращается почти для каждого процесса:
C: \ Users \ MyUserName \ test_wmi.php: 22:
Int (0)
Что означает успешное завершение, как описано здесь: https://msdn.microsoft.com/En-US/library/aa390460.aspx
В конце я хочу сделать что-то вроде этого, но в PHP, а не в VB:
gallery.technet.microsoft.com/Monitor-Process-CPU-Pct-by-0f3a5a1c (извините, я не могу публиковать более двух ссылок)
Кто-нибудь имеет представление о синтаксисе, чтобы получить владельца (а не код возврата)?
Спасибо!
Наконец-то я решил эту проблему: D
<?php
$pc = "localhost"; //IP of the PC to manage
$WbemLocator = new COM ("WbemScripting.SWbemLocator");
$WbemServices = $WbemLocator->ConnectServer($pc, 'root\\cimv2');
$WbemServices->Security_->ImpersonationLevel = 3;
$userlist = $WbemServices->ExecQuery ( "Select * from Win32_Process" );
foreach ($userlist as $u) {
$owner= $u->ExecMethod_('GetOwner')->User;
var_dump($owner);
}
Других решений пока нет …