WMI Methoden über PHP ausführen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • WMI Methoden über PHP ausführen

    Hallo zusammen,

    ich bin gerade dabei ein kleines Projekt zu basteln jedoch klemmt es noch hier und da und deswegen bin ich hier
    Ziel des Projekts:
    Einen Windows Spoolserver soll (über einen pda) via Webinterface verwalten werden.
    Stufe 1: Alle Drucker mit jeweiligen Status auflisten. geht
    Stufe 2: Drucker anhalten/fortsetzen. geht noch nicht
    Zu Stufe 1:
    Über WMI werden folgende Daten abgefragt:
    -Name
    -Status (Ok/Fehler/Angehalten/usw...)
    -Anzahl aktueller Jobs
    -Anzahl gesamter Jobs
    Zu Stufe 2:
    Es gibt unter WMI die Methoden um den Drucker zu stoppen und zu starten.
    Unter VBS klappt das auch ohne Probleme, jedoch ist genau hier das Problem unter PHP.

    CKD

  • #2
    Unter VBS klappt das auch ohne Probleme, jedoch ist genau hier das Problem unter PHP.
    Meine Glaskugel ist verschwommen. Ich kann weder Code noch Ansätze finden.
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Comment


    • #3
      Kein Problem...
      Set objWMIService = GetObject("winmgmtsimpersonationLevel=impersonate}!\\spoolserver\root\cimv2")

      Set colInstalledPrinters = objWMIService.ExecQuery ("Select * from Win32_Printer Where Name like 'Druckername'")

      For Each objPrinter in colInstalledPrinters
      ObjPrinter.Pause()
      Next

      Das ist aber auch nur der Standartcode von der Microsoft-Seite
      Den anderen Code zum WMI-Abfragen musste ich mir auch zusammenbasteln.
      Da gab es den Code von Microsoft und über google einen andere WMI-Abfrage in php...

      Comment


      • #4
        hatten wir das nicht heute schonmal ... wenn es per VBS geht dann nimm doch dein fertiges VBS skript und greife darauf per exec oder ähnlichen funktionen per PHP darauf zu.

        mfg
        bugbuster
        tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
        documentation: php.net mysql.com framework.zend.com

        Die Nachtwache!

        Comment


        • #5
          Die Idee hatte ich auch schon
          Aber die Datei wird nicht ausgeführt.
          Ich denke es liegt dadran, das der Webserver mit einem eingeschränkten Benutzeraccount läuft.
          Das soll auch so bleiben.
          Und wenn ich richtig informiert bin, kann ich bei exec keine Benutzerangaben übergeben oder?

          Comment


          • #6
            http://de.php.net/com

            Comment


            • #7
              Gegoogelt hast du, die Boardsuche hast du auch schon benutzt.
              Und nun weißt du, wie man allgemein VBS-Code in PHP-COM-Code übersetzt, oder?

              Bleibt die Frage, wo hier eigentlich dein Problem ist. Funktioniert eine bestimmter Aufruf mit COM nicht mehr oder was? Details?

              Comment


              • #8
                WMI-Abfragen: kein Problem
                WMI-Methoden aufrufen: das ist der Problem

                Comment


                • #9
                  Lesen ist das Problem. Pseudocode:
                  PHP Code:
                  $spooler = new COM 'x.x.Spoolerserver' );
                  $spooler -> pause ( ); 
                  Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                  Comment


                  • #10
                    Eventuell bringts auch wmic - Siehe hier:
                    http://www.php-resource.de/forum/sho...hlight=drucker
                    4. Post.

                    Comment


                    • #11
                      Danke für die Antwort.
                      Aber ich glaube ich bin da etwas weiter und will noch etwas anderes.
                      Wie gesagt ich habe wmi direkt in php eingebaut.
                      Also für das Anzeigen der Drucker brauch ich nur php und kein extra vbs oder sowas.
                      Was mir noch fehlt ist das ausführen von WMI Methoden ala
                      ObjPrinter.Pause()
                      ObjPrinter.Resume()


                      CKD

                      Comment


                      • #12
                        auf das manual wurdest du bereits verwiesen. lies es doch endlich!
                        http://de.php.net/manual/en/ref.com.php#43416

                        Comment


                        • #13
                          Fehler gefunden und gelöst...
                          Wer Interresse hat hier der Code:
                          Teil 1: Übersicht über alle Drucker eines Server
                          PHP Code:
                          <?php
                          echo "<table border=1><tr><td>Name</td><td>ext Status</td><td>Jobs</td><td>Total Jobs</td></tr>";

                          $loc=new COM("WbemScripting.SWbemLocator");
                          $wmi=$loc->ConnectServer("druckserver","root/cimv2","benutzer","kennwort");

                          $colPrints $wmi->ExecQuery("Select * from Win32_Printer Where Name <> 'xyz'");

                          foreach (
                          $colPrints as $print)
                              {
                              
                          $colPrintQs $wmi->ExecQuery("Select * from Win32_PerfFormattedData_Spooler_PrintQueue Where Name = '" . ($print->Name) . "'");
                              foreach (
                          $colPrintQs as $PrintQ)
                                  {
                                  
                          $status "";
                                  switch(
                          $print->ExtendedPrinterStatus){
                                  case 
                          1:
                                      
                          $status "andere";
                                      break;
                                  case 
                          2
                                      
                          $status "ok";
                                      break;
                                  case 
                          3
                                      
                          $status "Leerlauf";
                                      break;
                                  case 
                          4
                                      
                          $status "Drucken";
                                      break;
                                  case 
                          5
                                      
                          $status "Aufwaermphase";
                                      break;
                                  case 
                          6
                                      
                          $status "Druckvorgang angehalten";
                                      break;
                                  case 
                          7
                                      
                          $status "Offline";
                                      break;
                                  case 
                          8
                                      
                          $status "Angehalten";
                                      break;
                                  case 
                          9
                                      
                          $status "Fehler";
                                      break;
                                  case 
                          10:
                                      
                          $status "Ausgelastet";
                                      break;
                                  case 
                          11:
                                      
                          $status "Nicht verfuegbar";
                                      break;
                                  case 
                          12:
                                      
                          $status "Warten";
                                      break;
                                  case 
                          13:
                                      
                          $status "Wird verarbeitet";
                                      break;
                                  case 
                          14:
                                      
                          $status "Initalisierung";
                                      break;
                                  case 
                          15:
                                      
                          $status "Energiesparmodus";
                                      break;
                                  case 
                          16:
                                      
                          $status "Loeschen ausstehend";
                                      break;
                                  case 
                          17:
                                      
                          $status "E/A aktiv";
                                      break;
                                  case 
                          18:
                                      
                          $status "Manueller Einzug";
                                      break;
                                  Default:
                                      
                          $status "unbekannt";
                                      break;
                                  }
                                  echo 
                          "<tr><td>" . ($print->Name) . "</td><td>" $status "</td><td>" . ($PrintQ->Jobs) . "</td><td>" . ($PrintQ->TotalJobsPrinted) . "</td></tr>"
                                  }
                              }

                          echo 
                          "</table>";
                          ?>
                          Teil 2: Details zu einem Drucker inkl. Aktionen wie anhalten und fortsetzen
                          PHP Code:
                          <?php
                          $drucker 
                          $_GET['drucker'];
                          $aktion $_GET['aktion'];

                          $loc=new COM("WbemScripting.SWbemLocator");
                          $wmi=$loc->ConnectServer("druckserver","root/cimv2","benutzer","kennwort");

                          echo 
                          "search for:" $drucker "<br>";
                          echo 
                          "action:" $aktion;
                          echo 
                          "<table border=1><tr><td>Name</td><td>ext Status</td><td>Jobs</td><td>Total Jobs</td></tr>";

                          $colPrints $wmi->ExecQuery("Select * from Win32_Printer Where Name like '" $drucker "%'");
                          foreach (
                          $colPrints as $print)
                              {
                              if (
                          $aktion=="stop"){
                                  
                          $print->Pause();
                                  echo 
                          "stoppen...<br>";
                                  }
                              if (
                          $aktion=="start"){
                                  
                          $print->Resume();
                                  echo 
                          "starten...<br>";
                                  }
                              
                          $colPrintQs $wmi->ExecQuery("Select * from Win32_PerfFormattedData_Spooler_PrintQueue Where Name = '" . ($print->Name) . "'");
                              foreach (
                          $colPrintQs as $PrintQ)
                                  {
                                  
                          $status "";
                                  switch(
                          $print->ExtendedPrinterStatus){
                                  case 
                          1:
                                      
                          $status "andere";
                                      break;
                                  case 
                          2
                                      
                          $status "ok";
                                      break;
                                  case 
                          3
                                      
                          $status "Leerlauf";
                                      break;
                                  case 
                          4
                                      
                          $status "Drucken";
                                      break;
                                  case 
                          5
                                      
                          $status "Aufwaermphase";
                                      break;
                                  case 
                          6
                                      
                          $status "Druckvorgang angehalten";
                                      break;
                                  case 
                          7
                                      
                          $status "Offline";
                                      break;
                                  case 
                          8
                                      
                          $status "Angehalten";
                                      break;
                                  case 
                          9
                                      
                          $status "Fehler";
                                      break;
                                  case 
                          10:
                                      
                          $status "Ausgelastet";
                                      break;
                                  case 
                          11:
                                      
                          $status "Nicht verfuegbar";
                                      break;
                                  case 
                          12:
                                      
                          $status "Warten";
                                      break;
                                  case 
                          13:
                                      
                          $status "Wird verarbeitet";
                                      break;
                                  case 
                          14:
                                      
                          $status "Initalisierung";
                                      break;
                                  case 
                          15:
                                      
                          $status "Energiesparmodus";
                                      break;
                                  case 
                          16:
                                      
                          $status "Loeschen ausstehend";
                                      break;
                                  case 
                          17:
                                      
                          $status "E/A aktiv";
                                      break;
                                  case 
                          18:
                                      
                          $status "Manueller Einzug";
                                      break;
                                  Default:
                                      
                          $status "unbekannt";
                                      break;
                                  }
                                  echo 
                          "<tr><td>" . ($print->Name) . "</td><td>" $status "</td><td>" . ($PrintQ->Jobs) . "</td><td>" . ($PrintQ->TotalJobsPrinted) . "</td></tr>"
                                  }
                              }

                          echo 
                          "</table>";
                          ?>
                          Ist natürlich nicht perfekt, aber läuft soweit, erfüllt meine Anforderungen und kann beliebig erweitert werden.

                          Comment


                          • #14
                            Schön! Das wäre vielleicht was für die Code-Schnipsel?

                            Comment


                            • #15
                              done
                              http://www.php-resource.de/forum/sho...threadid=85464

                              Comment

                              Working...
                              X