Hallo,
ich bin in Sachen PHP relativer Anfänger. Mein Problem ist aber glaube ich doch relativ knifflig...
Ich bin bei uns im Büro Nebenbei-Hobby-Admin und möchte eine EDV-Inventarliste basteln.
Dafür frage ich mit WMI einige PC-Daten ab.
usw.
Auch die installierten Programme kann man so ja abfragen
Allerdings sind hier nur die Programme aufgelistet, die mit dem Windows Installer installiert wurden...
Da wir einige "exotische" Programme nutzen, und ich hier wissen will, ob und in welcher Version sie installiert sind, reicht mir das so nicht.
Also wollte ich an die Registry ran...
funktioniert lokal (auf dem Webserver) wunderbar und liefert mir alles, was ich brauche.
Auf anderen PCs klappt das aber nicht.
Das Problem ist, so wie ich das sehe, dass PHP unter dem Benutzer "SYSTEM" läuft und dieser bei Remote-PCs natürlich keine Rechte hat.
Obwohl ich die Zugangsdaten des Domänen-Admins beim Aufruf der COM-Klasse in der Variable $server_name mitgebe, läuft der CMD-Prozess unter SYSTEM (im Taskmanager überprüft).
Wie kann man sowas unter einem anderen Benutzerkonto (Admin) ausführen?
wäre ein anderer Weg, den ich versucht habe, hänge hier aber ebenso am Benutzerkonto.
Kennt jemand einen Weg, die Registry anderer PCs auszulesen?
Gruß und Danke,
Stefan
ich bin in Sachen PHP relativer Anfänger. Mein Problem ist aber glaube ich doch relativ knifflig...
Ich bin bei uns im Büro Nebenbei-Hobby-Admin und möchte eine EDV-Inventarliste basteln.
Dafür frage ich mit WMI einige PC-Daten ab.
PHP-Code:
<?PHP
$VERBINDUNG=$_GET['PC'];
$cmd=shell_exec("ping -n 1 $VERBINDUNG");
if (!strpos($cmd, "Zielhost nicht erreichbar"))
{
$loc=new COM("WbemScripting.SWbemLocator");
$wmi=$loc->ConnectServer($VERBINDUNG,"root/cimv2",$DomAdmin,$DomAdminPW)
?>
<H1>Konfiguration</H1><br />
<b>System:</b><br />
<?PHP
$SYSs = $wmi->ExecQuery("Select * from Win32_ComputerSystem");
foreach ($SYSs as $SYS)
{
echo "Name: ".$SYS->Name."<br />";
echo "Domäne: ".$SYS->Domain."<br />";
}
}
?>
Auch die installierten Programme kann man so ja abfragen
PHP-Code:
<br /><b>Installierte Programme:</b><br />
<?PHP
set_time_limit(120);
$PROs = $wmi->ExecQuery("Select * from Win32_Product");
foreach ($PROs as $PRO)
{
echo $PRO->Name." - ".$PRO->Version." - ".substr($PRO->InstallDate2,6,2).".".substr($PRO->InstallDate2,4,2).".".substr($PRO->InstallDate2,0,4)."<br />";
}
Da wir einige "exotische" Programme nutzen, und ich hier wissen will, ob und in welcher Version sie installiert sind, reicht mir das so nicht.
Also wollte ich an die Registry ran...
PHP-Code:
<?php
set_time_limit(600);
define('HKLM', 0x80000002);
$server_name = array(Username=>$DomAdmin, Password=>$DomAdminPW);
$reg = new COM("winmgmts:{impersonationLevel=impersonate}!\\\\".$VERBINDUNG."\\root\\default:StdRegProv", $server_name);
$key_path = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall';
$sub_paths = new VARIANT();
$Names = new VARIANT();
$Types = new VARIANT();
$DName = new VARIANT();
$DVersion = new VARIANT();
$reg->EnumKey(HKLM, $key_path, $sub_paths);
print $server_name['Username']." - ".$server_name['Password'];
foreach($sub_paths as $sub_path){
$key_path2=$key_path.'\\'.$sub_path;
$ergebnis=$reg->EnumValues(HKLM, $key_path2, $Names, $Types);
if($ergebnis==0 && count($Names)>1){
for($i = 0; $i < count($Names); $i++){
if($Names[$i]=="DisplayName" && $Types[$i]==1){
$reg->GetStringValue(HKLM, $key_path2, "DisplayName", $DName);
}
if($Names[$i]=="DisplayVersion" && $Types[$i]==1){
$reg->GetStringValue(HKLM, $key_path2, "DisplayVersion", $DVersion);
}
}
if($DName){
print $DName;
}
if($DVersion){
print " -- ".$DVersion."<br />";
}
else{
print "<br />";
}
}
}
print "Ende Test";
?>
Auf anderen PCs klappt das aber nicht.
Das Problem ist, so wie ich das sehe, dass PHP unter dem Benutzer "SYSTEM" läuft und dieser bei Remote-PCs natürlich keine Rechte hat.
Obwohl ich die Zugangsdaten des Domänen-Admins beim Aufruf der COM-Klasse in der Variable $server_name mitgebe, läuft der CMD-Prozess unter SYSTEM (im Taskmanager überprüft).
Wie kann man sowas unter einem anderen Benutzerkonto (Admin) ausführen?
PHP-Code:
<?php
$PSOFT = shell_exec("cmd.exe /c reg query \\\\".$VERBINDUNG."\\HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall /s /v DisplayName 2>&1");
?>
Kennt jemand einen Weg, die Registry anderer PCs auszulesen?
Gruß und Danke,
Stefan
Kommentar