System automatisch herunterfahren
Eigentlich könnten Sie schon den Feierabend einläuten, doch der PC ist noch mit Routineaufgaben beschäftigt. Die kann er aber genauso gut auch ohne Sie ausführen
Mit unserem Visual-Basic-Skript “shutdownWindows.vbs” können Sie Windows anweisen, zu einem festgelegten Zeitpunkt herunterzufahren, oder den aktuellen Benutzer abzumelden. Das Ausführen des Skripts muss mit Administrationsrechten erfolgen, da sonst der im Skript verwendete Befehl “shutdown.exe” keine Wirkung zeigt.
Einsatzzeitpunkt bestimmen
Für seine Arbeit benötigt das Skript vier Variablen, die Sie ganz am Anfang deklarieren. Seine Einsatzzeit erfährt es über den Befehl “InputBox()”. Der Anwender muss die Information nach dem Muster “HH:MM:SS” eingeben, also beispielsweise “22:00:00″ für 22 Uhr. Diesen Wert speichert es in “strEndTime”.
Option Explicit
Dim strEndTime
Dim strPause
Dim strAktion
Dim objWshShell
strEndTime = InputBox("Wann soll die
Aktion ausgeführt werden
(HH:MM:SS)?"""23:00:00")
If strEndTime = "" Then
MsgBox "Geben Sie bitte einen
Durchführungszeitpunkt an!"
Wscript.Quit
Else
If (Len(strEndTime)<>8) Or
(Mid(strEndTime,3,1) <> ":") Or
(Mid(strEndTime,6,1) <> ":") Then
MsgBox "Halten Sie sich bitte an das
beschriebene Muster zur Eingabe!"
Wscript.Quit
End If
End If
Gewünschte Aktion festlegen
Nach Eingabe des Zeitpunkts erkundigt sich das Skript, ob es das System später herunterfahren soll. Bejaht der Benutzer die Rückfrage, wird “shutdown.exe” um die Optionen “/s” und “/f” ergänzt. Dies führt dazu, dass der Befehl den Rechner herunterfährt und das Schließen laufender Anwendungen erzwingt. Anderenfalls ergänzt das Skript die Optionen “/l” und “/f”, um den aktuellen Benutzer abzumelden. Den endgültigen, vollständigen Befehlsaufruf samt Optionen speichert das Skript in “strAktion”.
strAktion = "shutdown.exe"
If MsgBox("Soll der Rechner zum
angegebenen Zeitpunkt ("& strEnd-
Time &") heruntergefahren werden?",
vbYesNo,"Frage")=vbYes Then
strAktion = strAktion & " /s /f"
MsgBox "Um " & strEnd-
Time & " fährt das System herunter!"
Else
strAktion = strAktion & " /l /f"
MsgBox "Um " & strEndTime & "
erfolgt die Abmeldung des Benutzers!"
End If
Wartezeit ändern
Mit dem Funktionsaufruf “DateDiff” errechnet das Skript die Differenz zwischen dem aktuellen und dem angegebenen Datum. Wenn Sie die Nachfrage des Skripts verneinen, meldet es den aktuellen Benutzer zum angegeben Zeitpunkt ab Zeitpunkt in Sekunden und übergibt das Ergebnis an “strPause”. Ist die Differenz kleiner oder gleich Null, ist der angegebene Zeitpunkt am aktuellen Tag bereits verstrichen. Dann wiederholt es die Berechnung für den Zeitpunkt am nächsten Tag. Mit der Methode “WScript.Sleep()” legt sich das Skript dann für die als Parameter übergebene Dauer schlafen. Da “WScript.Sleep()” die Angabe der Wartezeit in Millisekunden fordert, rechnet das Skript zuvor den in “strPause” abgelegten Wert um.
strEndTime = date & " " & strEndTime
strPause = DateDiff("s", now, strEndTime)
if (strPause <= 0) then
strEndTime = (date + 1) & " " & strTime
strPause = DateDiff("s", now, strEndTime)
end if
strPause = strPause * 1000
WScript.Sleep strPause
Definierte Aktion ausführen
Der zweite Teil von “ShutdownWindows. vbs” dient dem Ausführen der eigentlichen Aufgabe. Dazu verwendet das Skript das Systemprogramm “shutdown.exe”. Sobald das Skript nach dem Aufruf von “Sleep()” erwacht, erzeugt es mit “Create Object()” das Objekt “objWshShell” vom Typ “WScript.Shell” und nutzt dessen Methode “Run()”, um den in “strAktion” abgelegten Befehl auszuführen.
Set objWshShell = CreateObject
("WScript.Shell") objWshShell.Run strAktion
Wscript.Quit
Ähnliche Beiträge:




funktioniert leider unter Vista nicht. Es erscheint jeweils die Fehlermeldung “Nicht abgeschlossene Zeichenfolgekonstante”, Code 800A0409, Quelle Kompilierungsfehler in Microsoft VBScript.
Zeile: 6
Zeichen: 37
PS: wie hier empfohlen wurde, wurden alle Abschnitte nacheinander in den Texteditor eingefügt und mit der Erweiterung .vbs abgespeichert.
Danke im Voraus für eine Lösung
Hallo,
Dieser Fehlercode weist auf irgendeinen Syntax-Fehler hin. Meistens fehlt irgendwo ein ” oder ein &. An Vista liegt es definitiv nicht.
‘Mit diesem Visual-Basic-Skript “shutdownWindows.vbs” können Sie Windows anweisen, zu einem festgelegten Zeitpunkt herunterzufahren, oder den aktuellen Benutzer abzumelden. Das Ausführen des Skripts muss mit Administrationsrechten erfolgen, da sonst der im Skript verwendete Befehl “shutdown.exe” keine Wirkung zeigt.
‘Einsatzzeitpunkt bestimmen
Option Explicit
Dim strEndTime
Dim strPause
Dim strAktion
Dim objWshShell
strEndTime = InputBox(“Wann soll die Aktion ausgeführt werden (HH:MM:SS)?”" Eingabe im Format 23:00:00″)
If strEndTime = “” Then
MsgBox “Geben Sie bitte einen Durchführungszeitpunkt an!”
Wscript.Quit
Else
If (Len(strEndTime)8) Or (Mid(strEndTime,3,1) “:”) Or (Mid(strEndTime,6,1) “:”) Then
MsgBox “Halten Sie sich bitte an das beschriebene Muster zur Eingabe!”
Wscript.Quit
End If
End If
‘Gewünschte Aktion festlegen
strAktion = “shutdown.exe”
If MsgBox (“Soll der Rechner zum angegebenen Zeitpunkt (“& strEndTime &”) heruntergefahren werden?”, vbYesNo,”Frage”)=vbYes Then
strAktion = strAktion & ” /s /f”
MsgBox “Um ” & strEndTime & ” fährt das System herunter!”
Else
strAktion = strAktion & ” /l /f”
MsgBox “Um ” & strEndTime & ” erfolgt die Abmeldung des Benutzers!”
End If
‘Wartezeit ändern
strEndTime = date & ” ” & strEndTime
strPause = DateDiff(“s”, now, strEndTime)
if (strPause <= 0) then
strEndTime = (date + 1) & " " & strTime
strPause = DateDiff("s", now, strEndTime)
end if
strPause = strPause * 1000
'Definierte Aktion ausführen
WScript.Sleep strPause
Set objWshShell = CreateObject
("WScript.Shell") objWshShell.Run strAktion
Wscript.Quit
OK, danke sehr. Also der Code, so wie dieser hier veröffentlich ist ohne einer Reparatur, funktioniert definitiv nicht. Mit (Kopieren und) Einfügen in den Editor wird es einfach so leider nicht funktionieren. Es liegt nämlich an der verschobenen Formatierung. Der Autor hat beim Veröffentlichen den Code eingefügt ohne zu bemerken, dass viele Zeilen sich verschoben haben und hat dementsprechend keine Anpassung nachträglich vorgenommen.
Ich habe aber auch paar Unstimmigkeiten gefunden, wie überschüssige Zeilen, “-“ und “““ (also ein Aufführungszeichen in der Zeile „strEndTime = InputBox(“Wann soll die Aktion ausgeführt werden HH:MM:SS)?”"”23:00:00″), 2 x Striche und Leerzeile in den beiden „(“& strEnd- Time &”)“ löschen).
Und sobald das vierte Teil (Definierte Aktion ausführen) vorhanden ist, läuft der VB-Code nicht mehr. Es erscheint jeweils die folgende Fehlermeldung: Zeile: 42, Zeichen: 1, Fehler: Anweisung erwartet, Code: 800A0400.
Ich habe ein bisschen recherchiert und folgende Erklärung von einem Anwender gefunden: „…keine Deklaration von „WScript““
http://forum.fachinformatiker.de/basic/62151-anweisung-erwartet-800a0400.html
Ich poste mal den Code hier rein. Vielleicht kann jemand mir helfen diesen wieder ordentlich herzustellen.
Ah so, wie kann das Herunterfahren nach dem ausgeführten Code abgebrochen werden, wenn doch der Rechner an bleiben soll?
Danke schon mal euch im Voraus.
Schön, jetzt habe ich es selbst rausgefunden. So soll der Code des letzten Teils aussehen (also nur die Zeilen angepasst):
‘Definierte Aktion ausführen
WScript.Sleep strPause
Set objWshShell = CreateObject (“WScript.Shell”)
objWshShell.Run strAktion
Wscript.Quit
1. Dennoch würde ich mich freuen hier von euch zu erfahren, wie das Herunterfahren bzw. Abmelden nachträglich abgebrochen werden kann (falls dieser Code schon mal ausgeführt wurde und der Anwender sich später andersrum entschieden hat).
2. Es kommt leider keine Meldung mit Aufforderung zur einer Bestätigung ca. eine-zwei Minuten vor dem Aktionsstart, etwa wie MsgBox „Der Rechner wird um 12:00:00 heruntergefahren.“ mit „Ja“ oder „das Herunterfahren/Abmelden abbrechen“. Falls keine Reaktion von Anwender – innerhalb dem ein-zwei Minuten – erfolgt, wird der Rechner gnadenlos heruntergefahren.
Wäre es so umsetzbar? Danke euch natürlich für die fleißige Arbeit. Schöner Code.
kann keiner helfen?