raffi83
Goto Top

PC per VBA code Herunterfahren und mit einem Benachrichtigungs-Feld

Hallo Zusammen

habe folgendes Problem und breuchte mal eure Hilfe !

Habe eine Batch-Datei (shutdown -s -t 10) erstellt die mir die Pc's in der Firma automatisch bei einer bestimmten Tageszeit herunterfährt.
Das Funktioniert auch ohne Problem. Leider hat das ganze einen kleinen Schönheitsfehler, wenn die Datei aktiviert wurde kann sie durch den Benutzer, der noch an diesem PC arbeitet nicht mehr gestoppt werden.

Nun meine Idee: ich habe mit einem VBA Code versucht eine Inputbox zu erstellen auf der der Benutzer den Vorgang des Herunterfahrens stoppen kann in dem die Frage erscheint " Möchten Sie den PC jetzt Herunterfahren ? " Der Benutzer soll nun nur die Möglichkeit besitzen den Vorgang mit der "Inputbox" Nein oder Abbrechen das ganze zu stoppen. Bei keiner Reaktion des Benutzers soll der PC nach 1min. heruntergefahren werden.

Da ich mich nicht sehr gut mit der Erstellung solcher Cod's auskenne und auch nicht zu einem brauchbaren Resultat, bei meinen unzähligen Versuchen gekommen bin, erhoffe ich mir Ihr könntet mir einwenig weiterhelfen.

Danke allen schon für eure Lösungsvorschläge

have a nice weekend

Grüsse Raffi

Content-ID: 148971

Url: https://administrator.de/contentid/148971

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

sebastianpuetz
sebastianpuetz 13.08.2010 um 18:22:20 Uhr
Goto Top
Hi,

ein anderer Ansatz:

http://wiki.winboard.org/index.php/Kleine_Pause_in_einer_Batch-Datei_ei ...

Man könnte nen Text als Einleitung schreiben:

z.B. Drücken Sie bitte "STRG+C" um das Herunterfahren zu stoppen!

Hilft das?

Grüße
Sebastian
bastla
bastla 13.08.2010 um 18:28:03 Uhr
Goto Top
Hallo raffi83!

PsShutdown bietet die Schalter "-c" und "-v" ...

Grüße
bastla
mathe172
mathe172 13.08.2010 um 18:44:25 Uhr
Goto Top
Hallo raffi83!

Versuchs damit:
...
::Code davor
shutdown -s -t 30
::Vielleicht etwas mehr Zeit da oben...
:Abfrage
set /p shutdown="Wenn sie abbrechen wollen "Abb" eingeben!: "  
if /i "%shutdown%"=="Abb" shutdown -a  
if /i "%shutdown%"==""Abb"" shutdown -a  
goto Abfrage
Das Fragt einen solange ob man abbrechen will bis der Pc heruntergefahren wird.

Mathe172
bastla
bastla 13.08.2010 um 19:15:46 Uhr
Goto Top
@mathe172
Könntest Du vielleicht noch ein "/i" für das "if" spendieren (soll ja nicht in Stress ausarten face-wink)?

Grüße
bastla
mathe172
mathe172 13.08.2010 um 20:33:55 Uhr
Goto Top
@bastla:
Danke für den Hinweis face-smile (Habs oben geändert)

Mathe172
bastla
bastla 13.08.2010 um 21:04:38 Uhr
Goto Top
Hallo raffi83!

Um auch die ursprüngliche Frage zu beantworten: Ein Batch mit etwas VBS garniert könnte so aussehen:
@echo off & setlocal
set G=%temp%\GetAnswer.vbs
>%G% echo WScript.Echo WScript.CreateObject("WScript.Shell").PopUp("Möchten Sie den PC jetzt herunterfahren ?",60,"Herunterfahren?",vbYesNo+vbQuestion)  
for /f %%i in ('cscript //nologo %G%') do set "Antwort=%%i"  
if %Antwort% neq 7 echo shutdown -s -t 10
Die möglichen Rückgabecodes des VBScripts sind
-1: Zeitablauf
6: Ja
7: Nein
Da in den ersten beiden Fällen "shutdown" ausgeführt werden soll, muss nur auf die Antwort "7" geprüft werden.

Zum Testen wird (durch das "echo" davor) der "shutdown"-Befehl nur angezeigt - wenn dieses "echo" entfernt wird, fährt der Rechner tatsächlich herunter ...

Grüße
bastla
rubberman
rubberman 14.08.2010 um 19:15:05 Uhr
Goto Top
@bastla

hybsch face-wink

Vielleicht auch so:
@echo off & setlocal
set G=%temp%\GetAnswer.vbs
>%G% echo WScript.Quit WScript.CreateObject("WScript.Shell").PopUp("Möchten Sie den PC jetzt herunterfahren ?",60,"Herunterfahren?",vbYesNo+vbQuestion)  
%G%
if %errorlevel% neq 7 echo shutdown -s -t 10

Viele Wege führen in die italienische Hauptstadt.

Grüße
rubberman
bastla
bastla 14.08.2010 um 20:43:50 Uhr
Goto Top
@rubberman

Gefällt mir besser (und das -1 als Errorlevel sollte eigentlich auch keine Probleme machen) ... face-smile

Grüße
bastla
rubberman
rubberman 14.08.2010 um 21:20:47 Uhr
Goto Top
Zitat von @bastla:
[...](und das -1 als Errorlevel sollte eigentlich auch keine Probleme machen) [...]

Nach allem, was ich bisher getestet habe, kannst du die vollen 32 Bit auch für den Errorlevelwert ausschöpfen.
Das heißt 2^31 - 1 für positive Werte, alles was größer ist wird eh als negative Zahl interpretiert.
Mit -1 (also 2^32 - 1) sind wir durchaus im Range und es gibt keine Probleme.

Grüße
rubberman

Edit:
Der Test in Kurzform:
@echo off &setlocal

cmd /c exit 1
echo 2^^0                 %errorlevel%
echo.

cmd /c exit 2
echo 2^^1                 %errorlevel%
echo.
echo.

cmd /c exit 2147483646
echo 2^^31 -2    %errorlevel%
echo.

cmd /c exit 2147483647
echo 2^^31 -1    %errorlevel%
echo.

cmd /c exit 2147483648
echo 2^^31      %errorlevel%
echo.

cmd /c exit 2147483649
echo 2^^31 +1   %errorlevel%
echo.
echo.

cmd /c exit 4294967294
echo 2^^32 -2            %errorlevel%
echo.

cmd /c exit 4294967295
echo 2^^32 -1            %errorlevel%
pause>nul
Danach geht's wieder bei 0 aufwärts weiter.
Friemler
Friemler 14.08.2010 um 22:55:40 Uhr
Goto Top
Hallo rubberman,

oder so:
@echo off & setlocal

shutdown -s -t 10

set G=%temp%\GetAnswer.vbs
>%G% echo WScript.Quit WScript.CreateObject("WScript.Shell").PopUp("Möchten Sie den PC jetzt herunterfahren ?",60,"Herunterfahren?",vbYesNo+vbQuestion)  
%G%
if %errorlevel% equ 7 shutdown -a
del %G%

endlocal

shutdown -a bricht einen laufenden Shutdown ab.

Gruß
Friemler
bastla
bastla 14.08.2010 um 23:04:41 Uhr
Goto Top
... wobei ein 60s-PopUp für einen bereits laufenden 10s-Countdown etwas überdimensioniert scheint ... face-wink

Grüße
bastla

P.S.:
Es fehlt auch noch die Unterscheidung zwischen "Ja, ich will!" mit Konsequenz "Es geht sofort abwärts!" und "Jetzt konnte ich mich 1 ganze Minute lang nicht entscheiden ..." mit dem Ergebnis "Na gut, dann kannst Du ja noch 2 Minuten auf den Niedergang warten ...", oder so ... face-wink
Friemler
Friemler 14.08.2010 um 23:41:57 Uhr
Goto Top
Hallo bastla,

dann eben so:
@echo off & setlocal

shutdown -s -t 10

set G=%temp%\GetAnswer.vbs
>%G% echo WScript.Quit WScript.CreateObject("WScript.Shell").PopUp("Moechten Sie das Herunterfahren des PCs abbrechen?",9,"Herunterfahren abbrechen?",vbYesNo+vbQuestion+vbSystemModal)  
%G%
if %errorlevel% equ 6 shutdown -a
del %G%

endlocal

Durch vbSystemModal erscheint der PopUp im Vordergrund.

Gruß
Friemler
raffi83
raffi83 16.08.2010 um 17:25:15 Uhr
Goto Top
Hallo bastla

Erstmals vielen Dank für eure Arbeit !

Habe mal Deine Idee ausprobiert . Gefällt mir gut dein Script leider fährt mein Pc nach abwarten der Zeit oder durch bestätigen mit "JA" nicht herunter (habe das "echo" in der Zeile 05. zwischen "neg 7" und "schutdown" entfernt leider ohne Erfolg. Hast Du eine Idee an was das liegen könnte?

Gruss Raffi
bastla
bastla 16.08.2010 um 18:27:54 Uhr
Goto Top
Hallo raffi83!

Mit welchem User wird der Batch ausgeführt?
Darf ich übrigens nochmals auf "psshutdown" hinweisen? Zusammen mit einer Liste von Clients (als Parameter "@Liste.txt") lässt sich damit das Herunterfahren vom Server aus starten und, bei Verwendung des Schalters "-c", am Client abbrechen ...

Grüße
bastla
raffi83
raffi83 17.08.2010 um 17:45:14 Uhr
Goto Top
Hallo bastla

habe nochmals einwenig "herumgetüfftelt" und das Problem gefunden. Ich musste den gesammten Pfad von shutdown.exe richtig angeben und jetzt ist alles wie es sein sollte.
@echo off & setlocal 
set G=%temp%\GetAnswer.vbs 
>%G% echo WScript.Quit WScript.CreateObject("WScript.Shell").PopUp("Möchten Sie den PC jetzt herunterfahren ?",60,"PC Shutdown",vbYesNo+vbQuestion)   
%G%
if %errorlevel% neq 7 c:\windows\system32\shutdown.exe -s -f -t 30
Ich Danke allen, die an der Lösung meines Problems gearbeitet haben. Besonders bedanken möchte ich mich bei dir bastla ! Dank deiner Idee habe ich nun die Lösung die ich mir erhoft habe face-smile

schönen Abend
Grüsse raffi

[Edit Biber] Codetags spendiert. [/Edit]
rubberman
rubberman 17.08.2010 um 19:05:01 Uhr
Goto Top
@raffi83

Das verwundert mich jetzt schon etwas.
Wenn
shutdown -s -t 10
nicht funktioniert, könnte es daranliegen, dass dein Batch "shutdown.bat" heißt (sollte man natürlich vermeiden). Somit ruft sich der Batch selbst auf. Egal. Dann sollte aber wenigstens
shutdown.exe -s -t 10
funktionieren.
Wenn du wirklich den gesamten Pfad angeben musst, klingt das irgendwie nach einer fehlerhaften PATH Umgebungsvariablen.

Grüße
rubberman