Удаленный запрос WMI с помощью PHP

Мой текущий код выглядит так:

define ( 'CPU_NAME', 'remote_server' );
$obj = new COM ( 'winmgmts:{impersonationLevel=impersonate}//' . CPU_NAME . '/root/cimv2' );
if ( is_object ( $obj ) ){ 
     $process = $obj->execquery ( "SELECT * FROM Win32_Process" );
}

Где бы я разместил учетные данные для входа на удаленный_сервер? Я вижу, что для этого потребуется имя пользователя и пароль, но я не уверен, как это реализовать.

Любая помощь будет оценена по достоинству.

Ссылка: http://us3.php.net/manual/en/class.com.php


person John Moses    schedule 03.10.2010    source источник
comment
Что вы имеете в виду под я вижу, где нужно ввести имя пользователя и пароль, но не знаю, как это реализовать? Если вы видите, куда пойдет пароль, как вы можете не знать, куда его вводить?   -  person Tomalak    schedule 03.10.2010
comment
Я вижу, что он принимает один, но не там, где он идет. Любая помощь будет принята с благодарностью.   -  person John Moses    schedule 04.10.2010
comment
У вас включен DCOM в php.ini, верно?   -  person YWE    schedule 12.10.2010


Ответы (2)


ПОДКЛЮЧЕНИЕ

Для глобальных администраторов

define("NAMECOMP", 'COMP1'); // COMP1 - name or ip of local or remote computer 
$WMI= new COM ( 'winmgmts:{impersonationLevel=impersonate}//'. NAMECOMP.'/root/cimv2' ); 

Для с логином и паролем

$objLocator = new COM("WbemScripting.SWbemLocator");
$objService = $objLocator->ConnectServer(
                'ComputerName', //name/ip remote/local comp
                "root\cimv2",
                'login', //login remote/local comp
                'password', //password remote/local comp
                "MS_409",
                "ntlmdomain: YourDomain" //domain remote/local comp
            );

ПОЛУЧИТЬ ИНФОРМАЦИЮ

$CountCore=0;
foreach ($WMI->instancesof ( 'Win32_Processor' ) as $proc ) {
  ++$CountCore;
}
echo 'Count Core = ' . $CountCore; 

добавить информацию о скорости и процессоре сокета

$CountCore=0;
foreach ($WMI->instancesof ( 'Win32_Processor' ) as $Processor) {
  ++$CountCore;
  $Speed=$Processor->CurrentClockSpeed;
  $Socket=$Processor->SocketDesignation;
}
echo 'count core = '.$CountCore;
echo 'speed = ' . $Speed. 'Mhz';
echo 'socket = '.$Socket; 

получить другую информацию просто - просто замените класс instancesof ('Win32_Processor')

Информация о классах WMI

ОТПРАВИТЬ КОМАНДУ

if ((($_GET['Reboot']==1) OR ($_GET['Shutdown']==1))) { 
 
  define("NAMECOMP", 'COMP1');
          
  $WMI= new COM('winmgmts:{impersonationLevel=impersonate,(Shutdown)}//'. NAMECOMP.'/root/cimv2'); 
  
  foreach($WMI->instancesof('Win32_OperatingSystem') as $mp)  {
      if ($_GET['Reboot']==1) {
          $mp->Reboot; 
      }
      if ($_GET['Shutdown']==1) {
          $mp->Shutdown; 
      }
}

Ссылки:

WMI не работает!

Component_Object_Model

Классы Win32

Для Yii Framework

person Evgeniy Tkachenko    schedule 19.02.2014

Я знаю, что эта тема не самая новая, но, возможно, эта информация кому-то поможет. Если вы пытаетесь прочитать или записать ключи реестра или установленный класс программного обеспечения на удаленном компьютере, вам необходимо передать архитектуру под запросом. Вы можете использовать что-то вроде этого.

function Connect($server = "RemotePC",$namespace = "root/CIMV2",$impersonate = 3,$Architecture = 64,$userid = null,$password = null){
        try {
            $wbemnvs = new COM("WbemScripting.SWbemNamedValueSet");
            $wbemnvs->add("__ProviderArchitecture", $Architecture);
            $wbemnvs->add("__RequiredArchitecture", true);
            $wmiLocator = new COM("WbemScripting.SWbemLocator");
            $this->wmiNameSpace = $wmiLocator->ConnectServer($server, $namespace, $userid, $password,null,null,128,$wbemnvs);
            if($this->wmiNameSpace){
                $this->ConnectedServer = $server;
            }else{ return false; }
            if($impersonate){
                // mehr infos: http://msdn.microsoft.com/en-us/library/aa393618%28v=vs.85%29.aspx
                $this->wmiNameSpace->Security_->ImpersonationLevel = $impersonate;
            }
            return true;
        }
        catch(Exception $e){
            $this->wmiNameSpace = NULL;
            return false;
        }
    }

проверьте мой wmi.class.php по адресу: http://scbbb.blogspot.de/2014/02/wmi-via-php.html

person Marc Schilz    schedule 10.02.2014