Interroger WMI à distance avec PHP

Mon code actuel ressemble à ceci:

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

Où placerais-je les identifiants de connexion pour le serveur distant? Je vois que cela prendrait un nom d’utilisateur et un mot de passe, mais je ne sais pas comment le mettre en œuvre.

Toute aide serait appréciée.

Référence: http://us3.php.net/manual/en/class.com.php

 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."
Serial number of bios : ".$serial."
Hardware Model : ".$model."
ID-Processor : ".$idprocessor."
Architecture-Processor : ".$Architecture."
Name-Processor : ".$Name."
Version-Processor : ".$Version."


PhysicalMemory

Capacity : ".$Capacity."
Name : ".$Name."


carte mere

SerialNumber : ".$SerialNumber."


disk

SerialNumber : ".$SerialNumberDisk."
FileSystem : ".$FileSystem."
"; ?>

DE LIAISON

Pour les administrateurs mondiaux

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

Pour avec login et mot de passe

 $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 ); 

OBTENIR DES INFORMATIONS

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

append des informations sur le processeur de vitesse et de socket

 $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; 

obtenir d’autres informations simples – remplacez simplement la classe pour les instances de (‘Win32_Processor’)

Information des classes WMI

ENVOYER COMMAND

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

Liens:

WMI ne fonctionne pas!

Component_Object_Model

Classes Win32

Pour le cadre Yii

 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 ?> 

Je sais que ce sujet n’est pas le plus récent, mais cette information aide quelqu’un. Si vous essayez de lire ou d’écrire des clés Registy ou une classe Software installée sur un ordinateur distant, vous devez exécuter l’architecture sous la requête. Vous pouvez utiliser quelque chose comme ça.

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

consultez mon wmi.class.php à: http://scbbb.blogspot.de/2014/02/wmi-via-php.html