uridium69
Goto Top

20 Computer zeitgleich mittels GPO Script herunterfahren

Salute allerseits

Folgendes Szenario: 20 Labor PC's (AllinOne PC), diese sollen mittes GPO um 20:30 MO-SA heruntergefahren werden, da diese öfters vergessen werden herunterzufahren.

Wie kann ich das auf einfache Art und Weise machen? Ich möchte das AD GPO nutzen, und es sollen auch nur diese Geräte heruntergefahren werden und keine anderen.

Content-Key: 430333

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

Printed on: April 26, 2024 at 17:04 o'clock

Member: chgorges
chgorges Mar 20, 2019 at 14:06:54 (UTC)
Goto Top
Geplanten Task verteilen.
Als User "SYSTEM" verwenden (SID 1-5-18).
Member: emeriks
emeriks Mar 20, 2019 at 14:31:14 (UTC)
Goto Top
Zitat von @chgorges:
Geplanten Task verteilen.
Als User "SYSTEM" verwenden (SID 1-5-18).
Ausführen:
shutdown.exe /s /f
Member: erikro
erikro Mar 20, 2019 at 15:50:45 (UTC)
Goto Top
Moin,

Zitat von @emeriks:

Zitat von @chgorges:
Geplanten Task verteilen.
Als User "SYSTEM" verwenden (SID 1-5-18).
Ausführen:
shutdown.exe /s /f

Was aber dazu führt, dass die nicht gespeicherten Daten der Labormäuse verloren gehen. Das sollte bedacht werden.

Liebe Grüße

Erik
Member: DerWoWusste
DerWoWusste Mar 20, 2019 at 16:00:09 (UTC)
Goto Top
Dann nehme man shutdown /h für hibernation (ist aktiviert by default) und es geht nichts verloren.
Member: wisebeer
wisebeer Mar 20, 2019 at 18:49:21 (UTC)
Goto Top
Hallo,

Ich mache das nicht per GPO, sondern mit einem PS und der Aufgabenplanung, so kann man auch eine Warnmeldung angeben, sollte jemand noch angemeldet sein. Die Labor PCs sollten der Einfachheit halber natürlich in einer OU sein.

<#

Skript testet, ob Domain-Clients online sind, sendet Warnmeldung für Shutdown an angemeldetet Benutzer*Innen und fährt den jeweiligen Rechner herunter. Eventuell angemeldete Benutzer werden gegebenenfalls abgemeldet. Sollte dieses Vorgehen nicht gewünscht sein, den Parameter "Force" entfernen.  

#>

### ErrorAction für Skript festelegen

$ErrorActionPreference = 'SilentlyContinue'  

### Abfrage, ob Clients online sind

Write-Host "Abfrage nach Clients, die gegenwärtig online sind." -ForegroundColor Green  

$Clients = (Get-ADComputer -SearchBase "OU=XY,DC=XY,DC=XY" -Filter *).Name # + (Get-ADComputer -SearchBase "OU=XY,DC=XY,DC=XY" -Filter *).Name für weitere OUs  
$Client_Online = @()
$Clients | ForEach {if ((Test-Connection -ComputerName $_ -Quiet -Count 1) -eq 'True') {$Client_Online += $_}}  

### Warnmeldung Clients online

Write-Host "Gebe Warnmeldung für Shutdown auf Clients aus." -ForegroundColor Green  

$Client_Online | Foreach-Object {Invoke-Command -ComputerName "$_" {msg * "Der Computer wird in 10 Minuten automatisch heruntergefahren. Bitte geöffnete Dokumente speichern!"}}  

### Zehn Minuten pausieren vor Shutdown

Start-Sleep -Seconds 600

### Online Clients herunterfahren

Write-Host "Fahre alle Clients, die gegenwärtig online sind, herunter." -ForegroundColor Green  

$Client_Online | ForEach-Object {Stop-Computer -ComputerName $_ -Force}

Exit

LG Martin
Member: Kraemer
Kraemer Mar 20, 2019 at 19:29:18 (UTC)
Goto Top
Moin,

Zitat von @wisebeer:
Ich mache das nicht per GPO, sondern mit einem PS und der Aufgabenplanung, so kann man auch eine Warnmeldung angeben, sollte jemand noch angemeldet sein.
und warum machst du das nicht einfach per shutdown? Hat noch den smarten Vorteil, dass das Ganze sauber in den Eventlogs auftaucht...


Gruß
Member: wisebeer
wisebeer Mar 20, 2019 at 19:38:06 (UTC)
Goto Top
Hallo Kraemer,

Ist Teil einer Wartungsroutine, deshalb wollte ich das einfach vom Server starten und die Logs zentral haben. Im Eventlog auf dem Client ist der Shutdown Befehl ja trotzdem, auch wenn er remote kommt.

LG
Member: Kraemer
Kraemer Mar 20, 2019 at 19:45:45 (UTC)
Goto Top
Zitat von @wisebeer:

Hallo Kraemer,

Ist Teil einer Wartungsroutine,
ja gut - shutdown ist immer noch besser.

deshalb wollte ich das einfach vom Server starten
das kannst du mit shutdown

und die Logs zentral haben.
da ändert sich nichts

Im Eventlog auf dem Client ist der Shutdown Befehl ja trotzdem, auch wenn er remote kommt.
jepp - nur in deinem Fall ohne Grund

1. Scripte die einfach nur warten sind Fehleranfällig
2. Machst du in deinem Script viel unnötiges

imho richtig:
Computer aus dem AD ziehen - for-each durchlaufen - prüfen ob online - shutdown abfeuern.
Vorteile:
Die Clients warten - nicht der Server
Das Script läuft nicht vor die Wand, wenn in der LANGEN Zwischenzeit ein Rechner herunter gefahren wurde
Ein Rechner ist nicht in einem undefinierten Zustand (Neustart während deiner Wartezeit)

Gruß
Member: wisebeer
wisebeer Mar 20, 2019, updated at Mar 21, 2019 at 11:21:23 (UTC)
Goto Top
Danke für das Feedback, ich bin für jede Optimierungsmöglichkeit dankbar. Gute Idee, den Client und nicht den Server warten zu lassen! Ich muss gestehen, ich habe gar nicht daran gedacht, dass den Rechner dazwischen jemand herunterfahren könnte, ich weiß auch nicht, ob das das Skript abschießt?!

LG