WMI Objekt Methode ausführen (hier: Volume.Dismount)

  • Hallo an Alle,

    momentan versuche ich mich am Ansprechen der WMI via AutoIt.

    Das Auslesen von Informationen klappt schon, nur beim Aufruf von Methoden scheitert es...

    Mein eigentl. Ziel (TriggerSchedule aus \\root\.\ccm PATH sms_client) kann ich gerade mangels Rechner mit SMS Client nicht testen.

    Da hab ich mir einfach eine andere Methode zum Lernen herausgesucht: "Dismount" aus \\.\root\cimv2 Win32_Volume

    Meine Annahme: Wenn ich erst mal das richtige Objekt herausgefischt habe, kann ich mit <Objekt>.<Methode> ( Parameter ) den eigentlichen Call ausführen.

    Mit Dismount klappt das schon mal nicht: Im Log landet der Returnwert "0" was laut Microsoft für diese Methode "success" bedeutet. Nur wird der Datenträger nicht dismounted.

    Das Ganze mit DefragAnalysis durchexerziert ==> hier bekomme ich "3" zurück - also kann der Code nicht total falsch sein, weil er zumindest eine Rückgabe <>0 ins Log schreibt. :) Nur sehe ich keine Aktivität am USB-Stick.

    Also Defrag versucht - spätestens das müsste dann ja zu sehen sein (Blinken am Stick) ==> wieder "3" zurückerhalten ("Volume Dirty Bit Is Set") aber keine Aktivität.

    Auch das Setzen von #RequireAdmin brachte keine Änderung.

    Ich vermute, dass ich etwas grundsätzlich falsch mache/nicht verstanden hab und habe auch nach vielen Stunden keine Erleuchtung beim Studium des Forums oder anderer Netzseiten erlebt.

    Wäret Ihr so nett, mir den nötigen Klapps auf den Hinterkopf zu geben?

    (Ich habe mal ein paar Kommentar-Zeilen drin gelassen, die zeigen, mit was ich so der Reihe nach experimentiert hab...)

    Gruß

    Jens


  • Mit Dismount klappt das schon mal nicht: Im Log landet der Returnwert "0" was laut Microsoft für diese Methode "success" bedeutet. Nur wird der Datenträger nicht dismounted.

    Lies hier: https://docs.microsoft.com/en-us/previous…ss-win32-volume

    Zitat

    The Dismount method dismounts a file system from a volume.

    Damit wird also das Volume selbst nicht dismounted... ich denke, du hast alles richtig gemacht, wie es dir auch der Returncode 0 sagt, sondern nur die Methode nicht richtig verstanden.

    Ich habe dir im Anhang mal die Tools (WMICodeCreator, WMIExplorer, WMIDiag) reingelegt, die ich für WMI benutze.

    Hier die Quellen, von denen ich die Tools gedownloadet habe:

    WMICodeCreator 1.0: https://www.microsoft.com/en-us/download…ls.aspx?id=8572

    WmiExplorer 2.0.0.2: http://m.majorgeeks.com/mg/getmirror/wmi_explorer,1.html

    WMIDiag: https://www.microsoft.com/en-us/download…ls.aspx?id=7684

    Und der Vollständigkeit halber hier noch die _WMIC UDF, weiß aber nicht mehr, wo ich das her habe...

  • Ah super!

    Vielen Dank!

    Bin eben hierher zurückgekehrt, um den Thread abzuschließen: Hab nämlich ausgiebig direkt in der CMD getestet und die gleichen Ergebnisse erhalten. :)

    Nun weiß ich wenigstens, wo ich das Defizit hab. :)

  • Hi,

    WENN man schon AutoIt in Verbindung mit WMI anspricht,sollte man ScriptOMatic nicht vergessen.

    Scriptomatic erstellt selbstständig (!) in AutoIt ausführbare WMI-Scripte aller verfügbaren abfragbaren Methoden

    Das ursprüngliche Script findet man hier: https://www.autoitscript.com/forum/files/fi…ents#comment-95

    Mir selbst war die dort bereitgestellte Auswahl der Funktionen zu umfassend, daher habe ich einen zusätzlichen Filter eingebaut.

    Das Script erschlägt zumindest meine Arbeit mit WMI. Ich habe auch noch nie eine einzige Zeile/Abfrage "von Hand" programmiert. Was damit nicht geht, lohnt nicht die Mühe woanders danach zu suchen. Zumindest ist das meine Erfahrung.....

    Scriptomatic.zip

  • ScriptOMatic ist zumindest für mich aus mehreren Gründen keine Option!

    • ScriptOMatic braucht es vieeel zu lange, um die WMI Namespaces und Classes zu laden - das geht mit dem WMICodeCreator bzw. WMIExplorer entschieden schneller.
    • ScriptOMatic zeigt nur einen kleinen Teil der vorhanden WMI Namespaces an.
    • ScriptOMatic bietet nicht die Möglichkeit, WMI Namespaces von anderen Computern im lokalen Netzwerk zu verwenden, um daraus ein Script zu erstellen.
    • ScriptOMatic hat witzigerweise nicht mal einen COM ERROR Handler installiert, weshalb das Script bei einem COM ERROR abschmiert *1.

    Bevor ScriptOMatic mit der Suche nach WMI Namespaces fertig ist, habe ich das mit dem WMICodeCreator (inkl. man. Codeanpassung + Kaffee trinken) schon längst erledigt.

    Deine Version findet bei mir übrigens gar keine WMI Namespaces... in der ComboBox ist nur "1" als Auswahlmöglichkeit vorhanden - eine WMI Class kann ich aber trotzdem auswählen und auch das Scipt wird generiert.

    Scriptomatic erstellt selbstständig (!) in AutoIt ausführbare WMI-Scripte aller verfügbaren abfragbaren Methoden

    Methoden kannst du lediglich anwenden, abfragen und/oder setzten kannst du nur Properties.

    Bei mir (AutoIt 3.3.14.5) befindet sich das Script ScriptOMatic.au3 zudem auch hier:

    C:\Program Files (x86)\AutoIt3\Examples\COM\Scriptomatic.au3

    C:\Program Files (x86)\AutoIt3\Beta\Examples\COM\Scriptomatic.au3

    *1

    Win32_DisplayControllerConfiguration

    ConsoleWrite("VideoMode: " & $objItem.VideoModeNext & @CRLF) ; ==> The requested action with this object has failed. AutoIt3.exe ended.rc:1

    Und das geht übrigens auch nicht mit ScriptOMatic...

    Einmal editiert, zuletzt von Bitnugger (16. Februar 2019 um 20:28)