Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst VBScript - Shutdowndialog mit Timer

Mitglied: DerRegistrar

DerRegistrar (Level 1) - Jetzt verbinden

26.01.2011, aktualisiert 06:47 Uhr, 8212 Aufrufe, 11 Kommentare

Shutdown Dialog anzeigen mit Timer bis automatisch heruntergefahren oder durch den Benutzer über den Dialog abgebrochen wird.

Liebes Forum,

schon häufig habe ich mich bei IT-Problemen an Google gewandt und bin auf Euch gestossen um von der unglaublich tollen Hilfe etwas abzuschöpfen... Ihr habt mir bei so einigen Problemen weitergeholfen - VIELEN DANK DAFÜR!! Im Übrigen eine unglaublich vorbildliche Programmierung des Forums, habe bisher noch NIE ein so benutzerfreundliches gesehen, nicht nur die Programmierung - Auch die ART DER HILFE! - Revolution! (OK genug geschleimt ^^)

Nun zu meinem Problem!

Hintergrund:
Ich bin schon seit nunmehr 6 Stunden damit beschäftigt, den Laptop meiner werten Mutti wieder etwas mehr zu automatisieren.
Da meine liebe Mutti oft den Laptop mitsamt Video vor dem Einschlafen neben sich stehen lässt und es nicht mehr schafft ihn auszumachen. (Ein bisschen Öko bin ich ja schon)
Für die Umsetzung meiner Idee benötige ich die Möglichkeit, den Computer: Windows Vista, x86 (32-Bit) - Automatisch herunterfahren zu lassen, sobald keine Aktivität mehr vorhanden ist.

Einfach Programm aus dem Internet nutzen? - Will ich nicht! - Warum:
Dies lässt sich mit zwar mit externen Programmen (Autoshutdown etc.) realisieren, jedoch fehlt mir darin einfach die Transparenz, da solche Programme nicht OpenSource sind und ich mich bzw. meine Mutti 1. Performancemässig im Nachteil sehe, außerdem 2. Die Sicherheit fehlt, dass das Programm keinen Quatsch anstellt (Ala unnötige Registry-/Dll-/Treiber-Einträge o. ä.). - Das System soll ABSOLUT SAUBER vor solchem Quatsch bleiben, deswegen kommen auch nur die nötigsten und sinnvollsten Programme auf diesen Rechner.
Ich bitte diesbezüglich keine Diskussion anzufangen, ich möchte schließlich einen Lösungsweg zu meinem Problem der Realisierung dieser Idee (Das selbstständige Programmieren/Scripten einer solchen Dienstleistung) und nicht des (nichtvorhandenen Problemes) der "Nicht-Einsicht" bzw. der Nichtakzeptierung fremder Software. - Sofern das jemand annehmen sollte. - Ich möchte nicht diskutieren wie sinnvoll es ist, denn das ist es für mich.
- Gebe ich nur deswegen an, da in vielen Foren diskutiert wird warum und wie sehr man etwas möchte -

Meine Realisierungsidee:
Ich wollte das ganze nun per VBS-Script realisieren, konnte es aber in keinster Weise in eine Funktionalität zustandebringen, die weiterbrachte - meine Lösungsidee war nun, das Script um eine bestimmte Uhrzeit (22:30 Uhr) starten zu lassen, damit es:
Einen Dialog anzeigt mit der Frage, ob der Computer heruntergefahren werden soll.
Falls Nein, sollte das Script dann 1 Stunde warten und diesen Dialog erneut anzeigen.
Falls Ja, sollte das Script den Computer bei Ablauf der 5 Minuten ab dem Anzeigen des Dialoges ohne Wenn und Aber herunterfahren.
Falls 5 Minuten keine Eingabe im Dialog geschieht, soll der Computer ohne Wenn und Aber herunterfahren.

Mein Script (bin nicht stolz auf "Mein" Script, sondern möchte hier nur hervorheben damit man beim Überfliegen schnell findet was man sucht :P)
hatte viele verschiedene Aussehen, jedes mal in VBS, konnte jedoch keine Lösung erarbeiten.
Aktuell sieht es so aus:
01.
set wshell = CreateObject("Wscript.shell")
02.

03.
Dim Dialog, Waiting, a
04.

05.
Dialog=0
06.
Waiting=0
07.
a="leer"
08.
Do While (Running=1)
09.

10.
	Do While (Dialog=0) AND (Waiting=0)
11.
		Dialog=1
12.
		Waiting=0
13.
		runterfahren = MsgBox("Soll der Computer in 5 Minuten heruntergefahren werden?", vbYesNo + vbQuestion, "Herunterfahren")
14.
		If runterfahren = vbNo Then
15.
			ab = MsgBox("Der Computer wird nicht heruntergefahren. Erneuter Versuch in 1 Stunde.", vbOK, "Herunterfahren")
16.
			Waiting=-3599700
17.
		Else If runterfahren = vbYes Then
18.
		Dialog=0
19.
		Waiting=301
20.
		End If
21.
	Do While (Waiting<=300)
22.
		wscript.sleep (1000)
23.
		Waiting=Waiting+1
24.
	Loop
25.
	Do While (Dialog=0) AND (Waiting>=300)
26.
		WScript.Quit
27.
	Loop
28.
Loop
Wie Ihr sicher schon herausgelesen habt - besonders viel Erfahrung in VBS oder BATCH habe ich nicht, dennoch gebe ich mir alle Mühe.
Das einzige was ich relativ gut kenne ist LSL (Linden Scripting Language) und HTML.

Wie also könnte ich es noch realisieren?
Kann ich bei VBS etwas besser machen (Fehler)?
Sollte ich eine andere Programmiersprache benutzen?
Gibt es vielleicht sogar eine noch bessere Lösung (Mit Aktivitätsüberwachung und Shutdown-Timer) mithilfe von VBS und/oder Batch?
Oder gibt es für mich nur Hoffnung, ein Programm aus dem Netz zu benutzen (was ich nicht möchte).
Aber schließlich möchte ich auch nicht mein halbes Leben nur wegen einem "Shutdown Timer" verplempern... So viel ist es meiner Mutti dann sicher auch nicht wert...

Mit lieben Gruß
Der Registrar
Mitglied: TsukiSan
26.01.2011 um 06:58 Uhr
Hallo Der Registrar,

ich würde es etwas anders machen. Warum?
1) wenn du eine Messagbox startest, dann wartet das Programm, bis jemand etwas tut
(ok oder cancel drücken, Stecker ziehen etc.)
Das heißt, dein "Timer" läuft da nicht und der Rechner bleibt schon wieder die ganze Nacht an.

Wie wäre da ein Popup-fenster an dieser Stelle, dass aussieht, wie eine Messagebox?
Beispiel:
01.
Set ws = CreateObject("WScript.Shell") 
02.
a = ws.popup( "Nach 3 Sekunden bin ich wieder weg.",3,"Messageboxmeldung",vbyesno)
03.
msgbox a
Jetzt könntest du "a" abfragen, ob was passiert ist und wenn JA, welcher Button wurde gedrückt.
JA = 6
Nein = 7
Keiner von beiden = -1

Du kannst auch die Stunde Wartezeit wie folgt ablaufen lassen
01.
Dim Wartezeit
02.
Wartezeit = 3600000 ' eine Stunde in Millisekunden
03.
for i = 0 to 3
04.
       'Aufruf einer Sub-Routine zum Beispiel
05.
       ' in der du deine Abfragen reinbastelst
06.
      Wscript.Sleep Wartezeit
07.
next
08.

09.
Wscript.Quit
jetzt würde die FOR-Schleife maximal 4 Mal aufgerufen. Heißt in dem Beispiel bis zu 4 Stunden maximal.

Vielleicht sind das ein paar Anregungen, dich in deinem Vorhaben weiterzubringen.

Gruss
Tsuki
Bitte warten ..
Mitglied: DerRegistrar
26.01.2011 um 07:25 Uhr
Hi TsukiSan!!!

Vielen Dank für deine schnelle und aufschlussreiche Antwort, dies scheint mich doch etwas weiterzubringen.
Leider funktioniert mein darauf basierendes Script nicht, was mache ich bloss falsch?
Meine Fehlermeldung: ... Zeile 13 Zeichen 13 - End erwartet ...

Mein Script sieht jetzt wie folgt aus:
01.
Dim Wartezeit
02.
Wartezeit = 3600000 ' eine Stunde in Millisekunden
03.
for i = 0 to 3
04.
		Set ws = CreateObject("WScript.Shell") 
05.
		a = ws.popup( "Der Computer soll in 1 Minute runterfahren. Abbrechen?",60,"Messageboxmeldung",vbyesno)
06.
		msgbox a
07.
	If (a=6) Then
08.
      		Wscript.Sleep Wartezeit
09.
	Else If (a=7) OR (a=-1) Then
10.
		Set oShell = WScript.CreateObject("WScript.Shell") 
11.
		oShell.Run "C:\Users\User\Systemdateien\Shutdown\shutdown.bat", 0
12.

13.
Wscript.Quit

[EDIT]

Ich habe den Fehler gefunden, jedoch habe ich jetzt ein anderes Problem.
Sobald ich auf "Nein" klicke, bekomme ich ein Popup mit "7" und dem Button "OK".
Warum?


01.
Dim Wartezeit
02.
Wartezeit = 3600000 ' eine Stunde in Millisekunden
03.
for i = 0 to 3
04.
		Set ws = CreateObject("WScript.Shell") 
05.
		a = ws.popup( "Der Computer soll in 1 Minute runterfahren. Abbrechen?",60,"Messageboxmeldung",vbyesno)
06.
		msgbox a
07.
	If (a=6) Then
08.
      		Wscript.Sleep Wartezeit
09.
	Else If (a=7) OR (a=-1) Then
10.
		Set oShell = WScript.CreateObject("WScript.Shell") 
11.
		oShell.Run "C:\Users\User\Systemdateien\Shutdown\shutdown.bat", 0
12.

13.
End If
14.
End If 
15.
Next
16.
Wscript.Quit
Bitte warten ..
Mitglied: TsukiSan
26.01.2011 um 07:33 Uhr
Hi Der Registrar,

da fehlen am Ende das "END IF" und danach das "Next". Das mal vorneweg.

ansonsten könntest du ab Zeile 09 es etwas umschreiben:
01.
Else
02.
                Set oShell = WScript.CreateObject("WScript.Shell") 
03.
		oShell.Run "C:\Users\User\Systemdateien\Shutdown\shutdown.bat", 0
04.
End If
05.

06.
Next
Gruss
Tsuki
Bitte warten ..
Mitglied: DerRegistrar
26.01.2011 um 07:40 Uhr
Ok, ich sehe - Ein vollnoob am Werk *schäm*.

Also ich habe den Code jetzt ergänzt, bekomme wieder einen Fehler:
Zeile: 11
Zeichen: 2
Fehler: Syntaxfehler

01.
Dim Wartezeit
02.
Wartezeit = 3600000 ' eine Stunde in Millisekunden
03.
for i = 0 to 3
04.
		Set ws = CreateObject("WScript.Shell") 
05.
		a = ws.popup( "Der Computer soll in 1 Minute runterfahren. Abbrechen?",60,"Messageboxmeldung",vbyesno)
06.
		msgbox a
07.
	If (a=6) Then
08.
      		Wscript.Sleep Wartezeit
09.
	End If
10.
	Next
11.
	Else
12.
                Set oShell = WScript.CreateObject("WScript.Shell") 
13.
		oShell.Run "C:\Users\User\Systemdateien\Shutdown\shutdown.bat", 0
14.
	End If
15.
	Next
16.
Wscript.Quit 
Bitte warten ..
Mitglied: TsukiSan
26.01.2011 um 07:46 Uhr
Ok, ich sehe - Ein vollnoob am Werk *schäm*.

Macht ja nix. Wir üben alle noch

vergleiche mal bitte:
01.
Dim Wartezeit
02.
Wartezeit = 3600000 ' eine Stunde in Millisekunden
03.
for i = 0 to 3
04.
		Set ws = CreateObject("WScript.Shell") 
05.
		a = ws.popup( "Der Computer soll in 1 Minute runterfahren. Abbrechen?",60,"Messageboxmeldung",vbyesno)
06.
	If a=6 Then
07.
      		Wscript.Sleep Wartezeit
08.
	Else
09.
                Set oShell = WScript.CreateObject("WScript.Shell") 
10.
		oShell.Run "C:\Users\User\Systemdateien\Shutdown\shutdown.bat", 0
11.
	End If
12.
Next
Gruss
Tsuki
Bitte warten ..
Mitglied: DerRegistrar
26.01.2011 um 07:55 Uhr
*facepalm*

Wieso klappt es nur bei mir nie ^^!!!
Ach bin ich glücklich, dass es nun endlich klappt!!!!!!!!!!!!!!

Mutti wird sich freunnnnnnnnnnnnn!!!!
Und die Umwelt auch! ( Dafür der Energiekonzern umso weniger )

DAUMEN HOCH (wobei, lieber führen wir diesen bescheuerten Trend hier nicht ein) für ADMINISTRATOR.de und TsukiSan!
Vielen Dank für die zur Problemlösung sehr beitragende Unterstützung!!!

Wie kann ich mich adäquat revangieren?
Bitte warten ..
Mitglied: TsukiSan
26.01.2011 um 07:58 Uhr
Freud mich, dass es funktioniert!

Wie kann ich mich adäquat revangieren?
immer mal vorbeischauen und oben grünes Häkchen setzen

Gruss
Tsuki
Bitte warten ..
Mitglied: 76109
26.01.2011 um 09:07 Uhr
Hallo zusammen!

Das Problem hat Tsuki mit den richtigen Ansätzen ja eigentlich schon gelöst, aber es könnte auch etwas einfacher gehen.

Auf jeden Fall, würde ich bei älteren Leuten eine einfachere Fragestellung in der PopUp-Meldung ausgeben, die unmissverständlich eine Ja/Nein-Beantwortung zuläßt

Das mit der For-Schleife verstehe ich auch nicht ganz, weil wenn Deine Omi 4 Stunden durchhält, dann würde der Laptop danach ohne weitere Abfragen die ganze Nacht über durchlaufen?

Also mein Lösungsvorschlag würde etwas vereinfacht so aussehen:
01.
Const Msg = "Soll der Laptop jetzt herunterfahren?"
02.
 
03.
Set oShell = CreateObject("WScript.Shell")
04.
    
05.
Do While oShell.PopUp(Msg, 60, "Meldung...", vbYesNo) = vbNo
06.
   Wscript.Sleep 3600000
07.
Loop
08.

09.
oShell.Run "C:\Users\User\Systemdateien\Shutdown\shutdown.bat", 0 
Gruß Dieter
Bitte warten ..
Mitglied: DerRegistrar
26.01.2011 um 17:27 Uhr
Hi Dieter!

Danke für deinen Vorschlag, OMI ist sie zwar zum glück nicht, aber noch einfacher, noch besser ;).
Ich habe jedoch so lange an dem Code rumgebastelt... "never touch a running system...".
Vielleicht später

Hier mein aktueller, funktionsfähiger Code inklusive der BATCH Datei:

VBS:
01.
Dim Wartezeit
02.
Wartezeit = 3600000 ' eine Stunde in Millisekunden
03.
for i = 0 to 3
04.
		Set ws = CreateObject("WScript.Shell") 
05.
		a = ws.popup( "Der Computer soll heruntergefahren werden." & vbLf & "Ja - Jetzt herunterfahren" & vbLf & "Nein - In 1 Stunde nochmal fragen",30,"Herunterfahren",vbyesno)
06.
		If (a=-1) Then
07.
		a = ws.popup( "Der Computer soll heruntergefahren werden." & vbLf & "Ja - Jetzt herunterfahren" & vbLf & "Nein - In 1 Stunde nochmal fragen",30,"Herunterfahren",vbyesno)
08.
		End If
09.
		If (a=-1) Then
10.
		a = ws.popup( "Der Computer soll heruntergefahren werden." & vbLf & "Ja - Jetzt herunterfahren" & vbLf & "Nein - In 1 Stunde nochmal fragen",30,"Herunterfahren",vbyesno)
11.
		End If
12.
	If a=7 and i<=3 Then
13.
		a = ws.popup( "Es wird in 1 Stunde erneut gefragt, ob der Computer heruntergefahren werden soll.",15,"Herunterfahren")
14.
      		Wscript.Sleep Wartezeit
15.
	Else
16.
		a = ws.popup( "Der Computer wird in 1 Minute heruntergefahren.",10,"Runterfahrn")
17.
                Set oShell = WScript.CreateObject("WScript.Shell")
18.
		oShell.Run "C:\Users\User\Systemdateien\Shutdown\shutdown.bat", 0
19.
		Wscript.Quit
20.
	End If
21.
Next
BATCH:
01.
@echo off
02.
cd\
03.
cls
04.
echo Shutdown.....
05.
shutdown -s -t 60 -f -c "Herunterfahren in 1 Minute."
Bitte warten ..
Mitglied: 76109
27.01.2011 um 09:42 Uhr
Hallo DerRegistrar!

Sorry, weiß auch nicht, wie ich auf die Omi gekommen bin. War jedenfalls mit "i" am Ende

Naja und zu Deinem Code, den Du so mühsam erarbeitet hast, sage ich mal besser nix

Jedenfalls, brauchst mit dieser Codezeile keine extra Batch-Datei:
01.
oShell.Run "cmd \c shutdown -s -t 60 -f", 0
Gruß Dieter
Bitte warten ..
Mitglied: TsukiSan
27.01.2011 um 13:48 Uhr
Hallo didi1954,

eigentlich ist der Beitrag ja gelöst, aber NUR für diejenigen, die eine XP-Maschine haben
und die es interessiert dieser Zusatz
zum Runterfahren des Rechners aus VBS heraus:
01.
oShell.Run "shutdown.exe /s /T 20 /C """ & "PC wird runtergefahren!""" 
Viele Grüße

Tsuki
Bitte warten ..
Ähnliche Inhalte
Internet

Tim Berners-Lee will das Internet verändern

Information von FrankInternet4 Kommentare

Einer der Erfinder des Internets, Tim Berners-Lee, hat heute auf der Webseite Inrupt seine Pläne für ein neues und ...

Microsoft Office

Outlook VBScript

gelöst Frage von NebellichtMicrosoft Office5 Kommentare

Hallo, seit ein paar Wochen werden keine VBScripte hinter den (Benutzerspezifschen) Outlook Formularen ausgeführt. Hat jemand eine Lösung parat ...

VB for Applications

VBScript und OR

gelöst Frage von InvisanVB for Applications5 Kommentare

Hi zusammen, derzeit bastel ich ein bisschen in VBScript rum. Leider habe ich mit dem OR Operator einige Probleme. ...

VB for Applications

VBScript mit Administratorrechten startet kein weiteres VBScript

gelöst Frage von KrautundRuebenVB for Applications9 Kommentare

Hallo, ich möchte ein VBScript innerhalb eines VBScripts aufrufen. Dies gelingt auch ohne Administratorrechte problemlos. Starte ich hingegen das ...

Neue Wissensbeiträge
Microsoft
PowerShell script für LAPS
Information von kgborn vor 18 StundenMicrosoft2 Kommentare

Kurzer Hinweis für Admins im AD-Umfeld. Ich bin die Tage auf das PowerShell Script der Woche “Local Administrator Password ...

Windows 10
Windows 10 bis Version 1803 und das Zwangs-Upgrade
Information von kgborn vor 18 StundenWindows 10

Ich denke, die meisten Admins hier werden Systeme mit Windows 10 Enterprise einsetzen und Updates per WSUS/SCCM oder ähnlichem ...

Microsoft Office
BSI-Empfehlungen für die Office-Konfiguration
Information von kgborn vor 18 StundenMicrosoft Office

Kurze Information für Admins, die Office verwalten. Das BSI hat einige Regeln für die Absicherung von Office-Konfigurationen veröffentlicht. Ich ...

Windows 10

Sandy-Bridge plus Nvidia plus Win10 1903 braucht Hotfix

Information von DerWoWusste vor 5 TagenWindows 101 Kommentar

Es gibt ein Problem in der seltenen Konstellation Nvidia-Grafikkarte/Sandy-Bridge-CPU/Win10v1903: die von Nvidia vorgeschlagenen Treiber lassen sich nicht installieren. verlinkt ...

Heiß diskutierte Inhalte
Windows 10
WLAN-Verbindung wird getrennt, wenn per RDP auf das System zugegriffen wird
gelöst Frage von LordGurkeWindows 1017 Kommentare

Hallo, ich habe hier eine eigentlich sehr einfache Konstellation, die aber nun plötzlich Probleme verursacht: Es gibt ein Notebook ...

Batch & Shell
Powershell Skript für Reg Datei ändern
gelöst Frage von SoccerdeluxBatch & Shell16 Kommentare

Hallo zusammen, ich muss auf einem Windows 10 Pc ein Skript ausführen lassen was sich alle 5 Minuten wiederholt. ...

LAN, WAN, Wireless
WLAN in Veranstaltungshalle
Frage von coltseaversLAN, WAN, Wireless14 Kommentare

Hallo zusammen, für eine Halle mit 1300 m² suche ich derzeit nach einer WLAN-Hotspot-Lösung für bis zu 500 User ...

Windows 10
Windows 10 Logonskript greift nicht
Frage von xbast1xWindows 1013 Kommentare

Hallo zusammen, da sich die per GPO gemappten Laufwerke bei allen Usern schließen und das Problem sich nicht lösen ...