Wake On Lan Script WOL mit PowerShell
Um eure Computer per Wake On LAN / WOL in euren Netzwerk starten zu können, ist ein einfaches PowerShell Script notwendig. Dieses Script sendet ein Magic Paket an die Netzwerkkarten der gelisteten MAC – Adressen. Diese Funktion ist sehr hilfreich, wenn man Beispielsweise mehrere Computer am Wochenende updaten will. Noch ein Anwendungsgebiet ist, wenn man einen Computer starten will, den man von der Entfernung her sehr schwer erreichen kann. (Anderer Standort / Büro). Praktisch wäre das natürlich als Aufgabenplanung auszuführen, um den Computern am Wochenende Updates installieren zu lassen. 😉
Als erstes brauchen wir eine Liste von MAC – Adressen der Clients in einem Textfile:
(WakeOnLanMAC.txt – SAMPLE)
90FBA678C858 90FBA678C7DB 90FBA678C7C8 90FBA678C517 90FBA678C80B 90FBA678C87F 90FBA678C52F 90FBA678C7DE 90FBA678C80D 8C89A5ED4770 0019999A9012 4437E6C9E468
Die MAC – Adressen für WOL müssen untereinander gelistet werden, ohne ein Komma oder einem anderen Trennzeichen.
Danach brauchen wir noch ein Wake On Lan / WOL PowerShell Script:
JuralMin / Pixabay
(wakeonlan.ps1)
#Eingabedatei $InputFile = "C:\JOBS\WakeOnLanMAC.txt" function Send-Packet([string]$MacAddress) { try { $Broadcast = ([System.Net.IPAddress]::Broadcast) ## Create UDP client instance $UdpClient = New-Object Net.Sockets.UdpClient ## Create IP endpoints for each port $IPEndPoint = New-Object Net.IPEndPoint $Broadcast, 9 ## Construct physical address instance for the MAC address of the machine (string to byte array) $MAC = [Net.NetworkInformation.PhysicalAddress]::Parse($MacAddress.ToUpper()) ## Construct the Magic Packet frame $Packet = [Byte[]](,0xFF*6)+($MAC.GetAddressBytes()*16) ## Broadcast UDP packets to the IP endpoint of the machine $UdpClient.Send($Packet, $Packet.Length, $IPEndPoint) | Out-Null $UdpClient.Close() } catch { $UdpClient.Dispose() $Error | Write-Error; } } #Fuer jede MAC in Zeile: Function 'Send-Paket + MAC' ForEach ($MacAddress in get-content $InputFile) { Send-Packet $MacAddress }
Zuletzt müssen wir nur noch die Zeile 2 anpassen (Pfad zur Datei mit den Adressen), das Powershell Script ausführen und die Computer fahren hoch 🙂
Hinweis
Bitte denkt daran, dass im BIOS des Computers natürlich Wake On LAN aktiviert sein muss.
Hallo,
muss außer dem Inputfile-Pfad noch etwas angepasst werden?
Danke und Gruß
Robert
Hallo Robert,
nein – außer dem input-File in Zeile 2 muss nichts mehr angepasst werden.
Bitte achte darauf, dass jede MAC-Adresse in einer Zeile stehen muss.
MACADRESSE1
MACADRESSE2
MACADRESSE3
...
Gruß Johannes
Hallo,
kann man das Skript auf einem Server ablegen und es dort über eine Freigabe und einen selbst erstellten Nutzer dafür ausführen lassen?
Gruß Joe
Hallo Joe,
im Endeffekt ist es dem Script egal wo es liegt.
Es muss nur auf folgende Dinge geachtet werden:
– Der Pfad zu der MAC – Adressen – Liste muss verfügbar sein
– Die Clients müssen evtl. im selben IP – Subnetz sein
– Je nach dem wie eure Struktur ist, benötigt man erhöhte Rechte
Aber zurück zu deiner Frage, JA ansich sollte das kein Problem darstellen.
Gruß Johannes
man kann den (dynamischen) pfad des laufenden scrips ermitteln,
damit kann man zusätzliche dateien, relativ vom ort des scrips, ermitteln. dadurch braucht man keinen festen pfad mehr für die “WakeOnLanMAC.txt” verwenden, wenn diese z.B. im selben verzeichnis ist wie das script.
Hallo Brain,
da hast du recht.
Das könnte man mit
$PSScriptRoot
realisieren.Gruß Johannes
Danke für den Beitrag.
Das funktioniert aber nicht, wenn der Haken in der Netzkarte
“gerät kann den computer aus dem ruhezustand aktivieren” nicht gesetzt ist, was Windwos bei jedem Upgrade wieder ausschaltet.
Hast Du dazu auch einen Beitrag? Danke
Hallo BeMe,
danke für deine Nachricht.
Ja da hast du Recht, der Haken muss gesetzt sein.
Dass dieser bei jedem Update wieder ausgeschalten ist, ist mir tatsächlich neu.
Spontan habe ich keine Antwort dafür 🙁
Das lässt sich aber bestimmt über die Registry lösen.
Ich habe aber irgendwo im Hinterkopf, dass es etwas mit den Energie-Einstellungen von Windows zu tun hat. Vielleicht ist das ein Ansatzpunkt?!
Gruß Johannes
Hallo und Danke für den Beitrag, kann man in dem Script auch festlegen, auf welcher Netzwerkkarte die Pakete rausgesendet werden?
Hallo Lukas,
Leider nein. Ich weis auch gerade nicht warum das relevant sein sollte?
Gruß Johannes
Hallo, auf einem Client fiel mir auf, dass das Magic Packet über die gewollte Netzwerkkarte rausgeschickt wurde, erst als ich die anderen deaktiviert hatte. Aber du hast recht, in einer Serverumgebung dürfte das nicht unbedingt relevant sein.
krasser Typ, es hat funktioniert.
Spende folgt!
Hört man gerne – danke! 🙂
Hallo Johannes,
angenommen ich möchte nur ein PC starten und dafür keine Text-Datei nutzen… Wie müsste man die “InputFile” – Zeile anpassen?
MfG Valentin
Hallo Valentin,
dann brauchst du folgende Zeilen nicht:
– Zeile 1-2
– Zeile 33-37
Das einzige was du benötigst ist dann die Zeile 36:
Send-Packet "DEINEMACADRESSE"
Vielen herzlichen Dank.
MfG Valentin
Hallo, leider funktioniert das Skript bei mir nicht (Windows 10, Powershell 7). Andere WakeOnLan-Tools funktionieren dagegen aber, wie z.B. die WOL-Funktion der Fritzbox. Irgendwie muss es noch etwas geben, was diese Tools anders machen. Evtl. wird das Paket ins falsche Netzwerksegment geschickt. Das Tool von Gammadyne funktioniert z.B. nur, wenn man das Netzwerksegment angibt (mit /d)
Hallo Gerit,
du kannst zwischen Zeile 35 & 36 ein
write-host "test"
einfügen um zu sehen, ob der Befehl pro MAC-Adresse ausgeführt wird.Außerdem ist im Textfile natürlich wichtig, dass die MAC-Adressen folgendermaßen eingefügt werden:
– untereinander
– keine Leerzeichen
– keine Bindestriche oder sonstige Zeichen
Gruß Johannes