Versuche folgendes Skript ans laufen zu bringen.
Spoiler anzeigen
; #FUNCTION# ====================================================================================================================
; Name...........: RemoteShutdown
; Description ...: Fährt einen (Remote)Computer herunter
; Syntax.........: RemoteShutdown($sComputer, $iShutdownOption, $sUser, $sPassword[, $sDomain])
; Parameters ....: $sComputer - Computername
; $iShutdownOption - Art des Herunterfahrens, siehe Remarks
; $sUser - Benutzerkonto mit administrativen Rechten
; $sPassword - Passwort des Benutzers
; $sDomain - Optional: Domäne der der Benutzer angehört, falls nciht angegeben wird $sComputer benutzt
; Return values .: Success - 1
; Failure - 0, sets @error to:
; |1 - Fehler beim Erstellen eines SWbemLocator-Objektes
; |2 - Fehler beim Verbinden zum Computer
; |3 - Fehler beim Erstellen eines WMI-Objektes
; |4 - Die WMI-Abfrage lieferte ein leeres Ergebnis zurück
; |5 -
; Author ........: Bitboy
; Modified.......:
; Remarks .......: Mögliche Parameter für $iShutdownOption sind (identisch zur AutoIt-Funktion "Shutdown"):
; 0 - Abmelden
; 4 - Abmelden erzwingen (0 + 4)
; 1 - Herunterfahren
; 5 - Herunterfahren erzwingen (1 + 4)
; 2 - Neustart
; 6 - Neustart erzwingen (2 + 4)
; 8 - Ausschalten
; 12 - Ausschalten erzwingen (8 + 4)
;
; Port 135 TCP darf auf dem Zielsystem nicht durch eine Firewall blockiert werden
; Link ..........: http://msdn.microsoft.com/en-us/library/…v=VS.85%29.aspx
; ===============================================================================================================================
Func RemoteShutdown($sComputer, $iShutdownOption, $sUser, $sPassword, $sDomain="")
Local $objSWbemLocator, $objSWbemServices, $objWMIService, $colItems, $objItem
If $sDomain = "" Then $sDomain = $sComputer
;Verbindung zum lokalen Computer führt zu Fehler
If $sComputer <> @ComputerName Then
$objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
If @error Then Return SetError(1,0,0)
$objSWbemServices = $objSWbemLocator.ConnectServer($sComputer, "root\CIMV2", $sDomain & "\" & $sUser, $sPassword)
If @error Then Return SetError(2,0,0)
$objSWBemServices.Security_.ImpersonationLevel = 3
EndIf
$objWMIService = ObjGet("winmgmts:\\" & $sComputer & "\root\CIMV2")
If @error Then Return SetError(3,0,0)
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", 0x10 + 0x20)
If IsObj($colItems) Then
For $objItem In $colItems
Return $objItem.Win32Shutdown($iShutdownOption)
Next
Else
Return SetError(4,0,0)
EndIf
EndFunc
Leider "stürzt" es immer mit folgender Fehlermeldung ab:
Neu AutoIt v3 Script (2).au3 (40) : ==> The requested action with this object has failed.:
$objSWbemServices = $objSWbemLocator.ConnectServer($sComputer, "root\CIMV2", $sDomain & "\" & $sUser, $sPassword)
$objSWbemServices = $objSWbemLocator.ConnectServer($sComputer, "root\CIMV2", $sDomain & "\" & $sUser, $sPassword)^ ERROR
Dazu hab ich 2 Fragen
1) Wie fängt man den Fehler sauber ab?
2) Wieso funktioniert das nicht?