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
;#RequireAdmin
Global $s_LogFile = @ScriptDir & '\' & @ScriptName & '.log'
Local $WMIService = ObjGet('winmgmts:\\.\root\cimv2')
;Local $WMIVolumes = $WMIService.ExecQuery('Select * from Win32_Volume WHERE DriveLetter = "E:\\"')
;Local $WMIVolumes = $WMIService.ExecQuery('Select * from Win32_Volume WHERE Label = "TEST"')
Local $WMIVolumes = $WMIService.ExecQuery('Select * from Win32_Volume WHERE Label = "CORSAIR1"')
;Local $WMIVolumes = $WMIService.ExecQuery('Select * from Win32_Volume')
_WriteLog ('---')
If IsObj($WMIVolumes) Then
For $Volume In $WMIVolumes
_WriteLog( '$Volume.Label ' & $Volume.Label)
_WriteLog( ' $Volume.DriveLetter ' & $Volume.DriveLetter)
_WriteLog( ' $Volume.DriveType ' & $Volume.DriveType)
_WriteLog( ' $Volume.DeviceID ' & $Volume.DeviceID)
;#cs
;If $Volume.Label = 'TEST' Then ; < SD Card
If $Volume.Label = 'CORSAIR1' Then ; < USB Stick
_WriteLog ('---')
;Local $Dismount = $Volume.Dismount ( FALSE , FALSE ) ; < Force , Persistent
;Local $Dismount = $Volume.Dismount ( TRUE , FALSE ) ; < Force , Persistent
;Local $Dismount = $Volume.Dismount ()
;Local $DefragAnalysis = $Volume.DefragAnalysis ()
;Local $Defrag = $Volume.Defrag ()
Local $Defrag = $Volume.Defrag ( TRUE ) ; < Force
;_WriteLog ( '$Dismount = ' & $Dismount)
;_WriteLog ( '$DefragAnalysis = ' & $DefragAnalysis)
_WriteLog ( '$Defrag = ' & $Defrag)
_WriteLog ('---')
EndIf
;#ce
Next
_WriteLog ('---')
EndIf
; SECTION: Supporting Functions
Func _DateTimeString()
Local $sDateTimeString = @YEAR & '-' & @MON & '-' & @MDAY & '_' & @HOUR & '-' & @MIN & '-' & @SEC & '_' & @MSEC
Return ($sDateTimeString)
EndFunc ;==>_DateTimeString
Func _WriteLog ($s_Entry)
Local $h_LogFile = FileOpen ( $s_LogFile , 1 )
if $s_Entry = '' Then
Local $i_Write = FileWriteLine ($h_LogFile , '' )
ElseIf $s_Entry = '---' Then
Local $i_Write = FileWriteLine ($h_LogFile , '------------------------------------------------------------------------' )
ElseIf $s_Entry = '===' Then
Local $i_Write = FileWriteLine ($h_LogFile , '========================================================================' )
Else
Local $i_Write = FileWriteLine ($h_LogFile , _DateTimeString() & ' ' & $s_Entry )
EndIf
FileClose($h_LogFile)
EndFunc ;==>_WriteLog
Alles anzeigen