Мой текущий код выглядит следующим образом:
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" ); }
Где я могу поместить учетные данные для входа в remote_server? Я вижу, что это займет имя пользователя и пароль, но я не уверен, как это реализовать.
Любая помощь будет оценена по достоинству.
Ссылка: http://us3.php.net/manual/en/class.com.php
<?php $obj = new COM ( 'winmgmts://localhost/root/CIMV2' ); $fso = new COM ( "Scripting.FileSystemObject" ); $wmi_computersystem = $obj->ExecQuery("Select * from Win32_ComputerSystem"); $wmi_bios = $obj->ExecQuery("Select * from Win32_BIOS"); $processor = $obj->ExecQuery("Select * from Win32_Processor"); $PhysicalMemory = $obj->ExecQuery("Select * from Win32_PhysicalMemory"); $BaseBoard = $obj->ExecQuery("Select * from Win32_BaseBoard"); $LogicalDisk = $obj->ExecQuery("Select * from Win32_LogicalDisk"); foreach ( $wmi_computersystem as $wmi_call ) { $model = $wmi_call->Model; } foreach ( $wmi_bios as $wmi_call ) { $serial = $wmi_call->SerialNumber; $bios_version = $wmi_call->SMBIOSBIOSVersion; } foreach ( $processor as $wmi_processor ) { $idprocessor = $wmi_processor->ProcessorId; $Architecture = $wmi_processor->Architecture; $Name = $wmi_processor->Name; $Version = $wmi_processor->Version; } foreach ( $PhysicalMemory as $wmi_PhysicalMemory ) { $Capacity = $wmi_PhysicalMemory->Capacity; $PartNumber = $wmi_PhysicalMemory->PartNumber; $Name = $wmi_PhysicalMemory->Name; } foreach ( $BaseBoard as $wmi_BaseBoard ) { $SerialNumber = $wmi_BaseBoard->SerialNumber; } foreach ( $LogicalDisk as $wmi_LogicalDisk ) { $SerialNumberDisk = $wmi_LogicalDisk->VolumeSerialNumber; $FileSystem = $wmi_LogicalDisk->FileSystem; } echo "Bios version : ".$bios_version."<br/> Serial number of bios : ".$serial."<br/> Hardware Model : ".$model."<br/> ID-Processor : ".$idprocessor."<br/> Architecture-Processor : ".$Architecture."<br/> Name-Processor : ".$Name."<br/> Version-Processor : ".$Version."<br/> <hr> <hr> PhysicalMemory <hr> <hr> Capacity : ".$Capacity."<br/> Name : ".$Name."<br/> <hr> <hr> carte mere <hr> <hr> SerialNumber : ".$SerialNumber."<br/> <hr> <hr> disk <hr> <hr> SerialNumber : ".$SerialNumberDisk."<br/> FileSystem : ".$FileSystem."<br> "; ?>
Для глобальных админов
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;
получить другую информацию просто – просто замените класс на экземпляры ('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
<?php $strComputer = "YOURREMOTEHOST"; $objSWbemLocator = new COM ("WbemScripting.SWbemLocator"); $objSWbemServices = $objSWbemLocator->ConnectServer($strComputer, "root\cimv2", "DOMAIN\USER", "Password"); $objSWbemServices->Security_->ImpersonationLevel = 3; $obj = $objSWbemServices; $fso = new COM ( "Scripting.FileSystemObject" ); //... insert your code here //... insert your code here ?>
Я знаю, что эта тема не самая новая, но эта информация помогает кому-то. Если вы попытаетесь прочитать или записать ключи Registy или установленный класс Software на удаленном компьютере, вам необходимо передать Архитектуру под запрос, который должен выполняться. Вы можете использовать что-то вроде этого.
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.