Aufgabe aus Aufgabenplanung während der PC gesperrt ist
Hallo Zusammen
Ich habe ein Powershell Skript geschrieben, welches zuerst eine Abfrage macht, ob ein gewisses Programm läuft. Läuft es noch, dann gibt es einfach eine Meldung aus, welche nichts weiter bewirkt. Wenn es aber nicht mehr läuft startet der Shutdownbefehl und eine Meldung wird angezeigt, dass der PC heruntergefahren wird. Wenn man auf dieser Meldung auf "OK" drückt, wird der Shutdown abgebrochen, wenn nicht, wird der PC halt heruntergefahren.
Jetzt habe ich das mal getestet, was passiert, wenn der PC gesperrt ist (Benutzer ist noch angemeldet --> nur gesperrt!). Das Skript wird ausgeführt, der Shutdown auch aber ich sehe keine Messagebox. Kann man das irgendwie schreiben, dass sie auch im gesperrten Zustand angezeigt wird?
Ich habe dann eine Aufgabe im Aufgabenplaner gemacht, welche dieses Powershell Skript startet.
Danke für eure Antworten.
Gruss Paedi12
Hier noch das Skript.
Ich habe ein Powershell Skript geschrieben, welches zuerst eine Abfrage macht, ob ein gewisses Programm läuft. Läuft es noch, dann gibt es einfach eine Meldung aus, welche nichts weiter bewirkt. Wenn es aber nicht mehr läuft startet der Shutdownbefehl und eine Meldung wird angezeigt, dass der PC heruntergefahren wird. Wenn man auf dieser Meldung auf "OK" drückt, wird der Shutdown abgebrochen, wenn nicht, wird der PC halt heruntergefahren.
Jetzt habe ich das mal getestet, was passiert, wenn der PC gesperrt ist (Benutzer ist noch angemeldet --> nur gesperrt!). Das Skript wird ausgeführt, der Shutdown auch aber ich sehe keine Messagebox. Kann man das irgendwie schreiben, dass sie auch im gesperrten Zustand angezeigt wird?
Ich habe dann eine Aufgabe im Aufgabenplaner gemacht, welche dieses Powershell Skript startet.
Danke für eure Antworten.
Gruss Paedi12
Hier noch das Skript.
Add-Type -AssemblyName PresentationFramework
Add-Type -AssemblyName System.Windows.Forms
# Prozess Name festlegen
$ProcessName = "Client"
$ProcessON = ""
# Auslesen, ob das Programm bereits ausgeführt wird
$ProcessON = Get-Process | Where-Object {$_.ProcessName -eq $ProcessName}
If($ProcessON -eq $null){
#Programm geschlossen
# Wird festgelegt, wie viel Zeit bis zum Herunterfahren bleibt in Sekunden.
$varSecondsToShutdown = "60"
# Sekunden werden in Minuten umgewandelt.
$varMinutesToShutdown = $varSecondsToShutdown / 60
# Die jetztige Zeit + die anzahl Sekunden von der Variable $varSecondsToShutdown werden zusammengerechnet.
$varTimeToShutdown = (get-date).AddSeconds($varSecondsToShutdown).ToString("HH:mm:ss")
# Die Parameter für den Shutdown Befehl werden definiert.
$varStartShutdownArgs = "-s -f -d p:0:0 -t $varSecondsToShutdown"
# Die Parameter für den Abbruch vom Shutdown Befehl werden definiert.
$varCancelShutdownArgs = "-a"
# Der Shutdownbefehl wird gestartet
Start-Process "shutdown.exe" -ArgumentList $varStartShutdownArgs -NoNewWindow
$msgBoxInput = [System.Windows.MessageBox]::Show("Hallo, dies ist eine automatisch generierte Nachricht. Bitte auf [Ok] klicken, falls Sie noch am Arbeiten sind. Ansonsten wird Ihr PC in $varMinutesToShutdown Minute(n), bzw. um $varTimeToShutdown heruntergefahren.",'Shutdown','Ok','Warning') # Eine Messagebox wird generiert mit dem Text. Wenn man auf OK drück, bricht es den Shutdown ab. Wenn man nichts macht fährt der PC herunter.
switch ($msgBoxInput) {
'Ok' {
# Shutdown wird abgebrochen, weil auf OK gedrückt wurde.
Start-Process "shutdown.exe" -ArgumentList $varCancelShutdownArgs -NoNewWindow
}
}
}
else {
# Programm offen - Meldung wird angezeigt, dass Benutzer Programm jeden Abend schliessen und den PC herunterfahren sollen.
$msgBoxInput = [System.Windows.MessageBox]::Show("Bitte Programm JEDEN Abend bei Feierabend schliessen und PC Herunterfahren!",'Shutdown','Ok','Warning') # Eine Messagebox wird generiert mit dem Text. Wenn man auf OK drück, bricht es den Shutdown ab. Wenn man nichts macht fährt der PC herunter.
switch ($msgBoxInput) {
'Ok' {
# Nichts wird gemacht.
}
}
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3099361968
Url: https://administrator.de/contentid/3099361968
Ausgedruckt am: 19.11.2024 um 17:11 Uhr
14 Kommentare
Neuester Kommentar
Ich hatte schon gesucht, aber nichts ergooglen können.
Ich wette, dass @colinardo eine Syntax aus dem Ärmel schütteln könnte, sonst bliebe nur folgender Umweg:
Detektiere, ob gesperrt ist, indem du abfragst, ob ein Prozess LogonUI.exe läuft. Wenn ja, bitte den Nutzer, zu entsperren (und gib ihm 60 Sekunden Zeit dafür):
Ich wette, dass @colinardo eine Syntax aus dem Ärmel schütteln könnte, sonst bliebe nur folgender Umweg:
Detektiere, ob gesperrt ist, indem du abfragst, ob ein Prozess LogonUI.exe läuft. Wenn ja, bitte den Nutzer, zu entsperren (und gib ihm 60 Sekunden Zeit dafür):
$gesperrt = tasklist | findstr LogonUI.exe
if ($gesperrt -ne $null)
{
msg /time:0 * Bitte Bildschirm entsperren, falls Sie noch arbeiten und er gesperrt ist
timeout 60
}
Start des eigentlichen Skriptes