mrheisenberg
Goto Top

PS Skript Client reboot mit Useroption

Moin,

ich denke ich stelle bei google die falschen Fragen....

Um was geht´s?

Ich möchte ein PS Skript schreiben bzw. erstellen welche einen Client neustartet, soweit kein Problem:

restart-computer

so jetzt kommt der Haken an der Sache, ich würde gerne wollen dass der User eine Option bekommt dass er den PC entweder nach 30min oder 60min automatisiert neu starten lässt.

Sozusagen:

User bekommt nach auslösen der Vorgabe (14 tage kein Neustart) ein Fenster welches Ihm zwingend Vorschlägt: willste nach 30 oder 60 min deinen PC/Laptop neustarten oder gleich?

<Neustart 30min> <Neustart 60min> <Neustart SOFORT!>

Und da steigt nun meine PS Fähigkeit aus...

Grundsätzlich, ist sowas mit der PS möglich? Die ist mächtig, nehme die gerne her, aber sowas übersteigt meinen Admin-Horizont.


Bin für Vorschläge offen


LG

Content-Key: 4560883536

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

Printed on: April 23, 2024 at 12:04 o'clock

Mitglied: 3063370895
3063370895 Nov 09, 2022 updated at 12:39:19 (UTC)
Goto Top
Ja - vermutlich am besten per PS-erstellter geplanter Aufgabe die den PC in 30/60/wasauchimmer Minuten neu startet.

In etwa so:
$action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-Command "Restart-Computer -Force"'  
$principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest  
$trigger = New-ScheduledTaskTrigger -At (Get-Date).AddMinutes(30) -Once

Register-ScheduledTask -Action $action -TaskName 'Restart' -TaskPath '\' -Principal $principal -Trigger $trigger  
Member: MrHeisenberg
MrHeisenberg Nov 09, 2022 at 12:38:51 (UTC)
Goto Top
Zitat von @chaot1coz:

Ja - vermutlich am besten per PS-erstellter geplanter Aufgabe die den PC in 30/60/wasauchimmer Minuten neu startet.

Ich würd gerne ein Skript haben/erstellen was ich dann über unser RMM Tool auf dem Client ausführe, da ich dort die Übersicht habe welche Client´s seit 14 Tagen durchlaufen
Mitglied: 3063370895
Solution 3063370895 Nov 09, 2022 updated at 13:02:11 (UTC)
Goto Top
In etwa so? Achtung hässlicher Code face-smile

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
Add-Type -Assembly System.Drawing 
$Form = New-Object system.Windows.Forms.Form

[int32]$height = 100
[int32]$width = 300
$Form.ClientSize = "$width,$height"  
$Form.text = "Neustart"  
$Form.TopMost = $true
$CenterScreen = [System.Windows.Forms.FormStartPosition]::CenterScreen;
$Form.StartPosition = $CenterScreen
$global:timeToAdd = 0

$label = New-Object system.Windows.Forms.Label
$label.width = 1000
$label.height = 40
$label.text = "Der PC muss neu gestartet werden.`nWann soll der Neustart durchgeführt werden?"  
$label.location = New-Object System.Drawing.Point(0, 10)

$button = New-Object system.Windows.Forms.Button
$button.width = 100   
$button.height = 30
$button.text = "In 30 Minuten"  
$button.location = New-Object System.Drawing.Point(0, 50)
$button.Font = 'Microsoft Sans Serif,10'  
$button.Add_Click({
        $global:timeToAdd = 30
        $form.Close()
    })

$button2 = New-Object system.Windows.Forms.Button
$button2.width = 100   
$button2.height = 30
$button2.text = "In 60 Minuten"  
$button2.location = New-Object System.Drawing.Point(100, 50)
$button2.Font = 'Microsoft Sans Serif,10'  
$button2.Add_Click({
        $global:timeToAdd = 60
        $form.Close()
    })

$button3 = New-Object system.Windows.Forms.Button
$button3.width = 100   
$button3.height = 30
$button3.text = "Sofort"  
$button3.location = New-Object System.Drawing.Point(200, 50)
$button3.Font = 'Microsoft Sans Serif,10'  
$button3.Add_Click({
        Restart-Computer -Force
        $form.Close()
    })

$Form.controls.Add($button)
$Form.controls.Add($button2)
$Form.controls.Add($button3)
$Form.Controls.Add($label)

[void]$Form.ShowDialog()

$action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-Command "Restart-Computer -Force"'  
$principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest  
$trigger = New-ScheduledTaskTrigger -At (Get-Date).AddMinutes($global:timeToAdd) -Once

Register-ScheduledTask -Action $action -TaskName 'Restart' -TaskPath '\' -Principal $principal -Trigger $trigger  
Member: MrHeisenberg
MrHeisenberg Nov 09, 2022 at 13:06:31 (UTC)
Goto Top
Zitat von @chaot1coz:

In etwa so? Achtung hässlicher Code face-smile

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
Add-Type -Assembly System.Drawing 
$Form = New-Object system.Windows.Forms.Form

[int32]$height = 100
[int32]$width = 300
$Form.ClientSize = "$width,$height"  
$Form.text = "Neustart"  
$Form.TopMost = $true
$CenterScreen = [System.Windows.Forms.FormStartPosition]::CenterScreen;
$Form.StartPosition = $CenterScreen
$global:timeToAdd = 0

$label = New-Object system.Windows.Forms.Label
$label.width = 1000
$label.height = 40
$label.text = "Der PC muss neu gestartet werden.`nWann soll der Neustart durchgeführt werden?"  
$label.location = New-Object System.Drawing.Point(0, 10)

$button = New-Object system.Windows.Forms.Button
$button.width = 100   
$button.height = 30
$button.text = "In 30 Minuten"  
$button.location = New-Object System.Drawing.Point(0, 50)
$button.Font = 'Microsoft Sans Serif,10'  
$button.Add_Click({
        $global:timeToAdd = 30
        $form.Close()
    })

$button2 = New-Object system.Windows.Forms.Button
$button2.width = 100   
$button2.height = 30
$button2.text = "In 60 Minuten"  
$button2.location = New-Object System.Drawing.Point(100, 50)
$button2.Font = 'Microsoft Sans Serif,10'  
$button2.Add_Click({
        $global:timeToAdd = 60
        $form.Close()
    })

$button3 = New-Object system.Windows.Forms.Button
$button3.width = 100   
$button3.height = 30
$button3.text = "Sofort"  
$button3.location = New-Object System.Drawing.Point(200, 50)
$button3.Font = 'Microsoft Sans Serif,10'  
$button3.Add_Click({
        Restart-Computer -Force
        $form.Close()
    })

$Form.controls.Add($button)
$Form.controls.Add($button2)
$Form.controls.Add($button3)
$Form.Controls.Add($label)

[void]$Form.ShowDialog()

$action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-Command "Restart-Computer -Force"'  
$principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest  
$trigger = New-ScheduledTaskTrigger -At (Get-Date).AddMinutes($global:timeToAdd) -Once

Register-ScheduledTask -Action $action -TaskName 'Restart' -TaskPath '\' -Principal $principal -Trigger $trigger  

wohooow, genau sowas richtig Geil, Herzlichen Dank :D
Mein Grinsen kann ich mir grad nicht verkneifen
Mitglied: 3063370895
3063370895 Nov 09, 2022 at 13:06:31 (UTC)
Goto Top
Man kann das auch weiter spinnen und z.B. eine stündliche geplante Aufgabe erstellen, die das Skript ausführt und am Anfang des Skriptes die Uptime prüfen und falls > 14 Tage den Rest ausführen..

Und wenn der Knopf zum Beenden weg soll, nach Zeile 4 noch ein
$Form.FormBorderStyle = 0
einfügen.
Member: TK1987
TK1987 Nov 10, 2022 at 11:57:58 (UTC)
Goto Top
Moin,

Register-ScheduledTask -Action $action -TaskName 'Restart' -TaskPath '\' -Principal $principal -Trigger $trigger  
hier sollte noch der -Force-Parameter ergänzt werden, sonst scheitert das Skript bei wiederholter Anwendung, weil bereits ein gleichnamiger Task vorhanden ist.

Gruß Thomas
Mitglied: 3063370895
3063370895 Nov 10, 2022 at 12:00:07 (UTC)
Goto Top
Hallo Thomas,

vollkommen richtig und wichtig!

Gruß Thomas face-smile
Member: MrHeisenberg
MrHeisenberg Nov 10, 2022 at 12:04:50 (UTC)
Goto Top
Zitat von @TK1987:

Moin,

Register-ScheduledTask -Action $action -TaskName 'Restart' -TaskPath '\' -Principal $principal -Trigger $trigger  
hier sollte noch der -Force-Parameter ergänzt werden, sonst scheitert das Skript bei wiederholter Anwendung, weil bereits ein gleichnamiger Task vorhanden ist.

Gruß Thomas

Super Danke für den Tipp
Member: MrHeisenberg
MrHeisenberg Nov 10, 2022 at 12:05:22 (UTC)
Goto Top
Zitat von @kthomas:

Hallo Thomas,

vollkommen richtig und wichtig!

Gruß Thomas face-smile

Dein Skript läuft Optimal, danke nochmals dafür