Vorab: Ich bin KEIN Programmierer, was man wahrscheinlich schnell sehen wird
Ich bin Systemintegrator und soll ein Skript in Powershell schreiben.
Meine konkrete Aufgabe: wir haben an der Arbeit 4 Poolräume (alle im selben Netz). Aktuell sind dort ziemlich alle Rechner an, damit die Leute über VMware Horizon sich einloggen und von Zuhause aus am Poolrechner arbeiten können.
Ich soll ein WOL Skript schreiben, welches alle 5min. on selbst sich durchführt und schaut, ob 2 Rechner an und nicht in Benutzung sind. Wir möchten as "Puffer" 2 Rechner an lassen. Sobald sich dann einer anmeldet und einen PC belegt, soll ein weiterer hochfahren, damit der Puffer wieder auf 2 ist.
Aufwecken sollen die Rechner über ihre MAC-Adressen. Dafür habe ich eine txt. Datei erstellt, in der die MACs untereinander ohne Sonderzeichen aufgelistet sind.
Ich hab im Internet ein Testskript gefunden, welches auch mit der MAC.txt Datei funktioniert. Um erstmal zu schauen, ob es funktioniert wie es soll -> damit hat es geklappt.
Ich soll nun aber ein eigenes und angepasstes Skript schreiben, welches erstmal einen Poolraum nimmt und es dann ausgeweitet wird auf alle Poolräume.
Hier einmal mein aktuelles Skript -> wie gesagt, bin kein Programmierer und hab es auch nie wirklich vorher mal gemacht.. Daher hoffe ich sehr, dass ihr mir netterweise helfen könntet 🙏
#Eingabe der Char MAC Datei
$InputFile ="C:\CharWakeOnLanMAC.txt"
function Send-Packet([string]$MacAddress){#Sende Magic-Packet an diese MAC-Adressen#definierte Variablen#$Poolname = "physpool-fb06-01";#$Rechner = (Get-HVMachine -Poolname $Poolname).Base;
$available #Freie Computer (nicht in Benutzung)
$Poolbuffer =2;#2 PCs sollen IMMER als Puffer an sein
$Pools #Poolräume (4)while(true){#Dauerschleife von $available#foreach($Pool in $Pools) { #Geht alle Pools durchwhile($available -lt $Poolbuffer){#Solange nicht genug PCs (2) frei sind, wird while ausgeführtSend-Packet $MacAddress #Führe WOL für einen ausgeschalteten PC aus}#ForEach ($MacAddress in get-content $InputFile) {#Send-Packet $MacAddress#}#}#sleep(300); #alle 300 Sekunden/5 Minuten wird Skript wieder durchgeführt}}
Das ist das Skript, welches ich im Netz gefunden habe zum testen:
#Eingabedatei
$InputFile ="C:\WakeOnLanMAC.txt"
function Send-Packet([string]$MacAddress){try{
$Broadcast =([System.Net.IPAddress]::Broadcast)## Create UDP client instance
$UdpClient =New-ObjectNet.Sockets.UdpClient## Create IP endpoints for each port
$IPEndPoint =New-ObjectNet.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
}
Frage
FoxOff
Hallo an alle hier,
Vorab: Ich bin KEIN Programmierer, was man wahrscheinlich schnell sehen wird
Ich bin Systemintegrator und soll ein Skript in Powershell schreiben.
Meine konkrete Aufgabe: wir haben an der Arbeit 4 Poolräume (alle im selben Netz). Aktuell sind dort ziemlich alle Rechner an, damit die Leute über VMware Horizon sich einloggen und von Zuhause aus am Poolrechner arbeiten können.
Ich soll ein WOL Skript schreiben, welches alle 5min. on selbst sich durchführt und schaut, ob 2 Rechner an und nicht in Benutzung sind. Wir möchten as "Puffer" 2 Rechner an lassen. Sobald sich dann einer anmeldet und einen PC belegt, soll ein weiterer hochfahren, damit der Puffer wieder auf 2 ist.
Aufwecken sollen die Rechner über ihre MAC-Adressen. Dafür habe ich eine txt. Datei erstellt, in der die MACs untereinander ohne Sonderzeichen aufgelistet sind.
Ich hab im Internet ein Testskript gefunden, welches auch mit der MAC.txt Datei funktioniert. Um erstmal zu schauen, ob es funktioniert wie es soll -> damit hat es geklappt.
Ich soll nun aber ein eigenes und angepasstes Skript schreiben, welches erstmal einen Poolraum nimmt und es dann ausgeweitet wird auf alle Poolräume.
Hier einmal mein aktuelles Skript -> wie gesagt, bin kein Programmierer und hab es auch nie wirklich vorher mal gemacht.. Daher hoffe ich sehr, dass ihr mir netterweise helfen könntet 🙏
Das ist das Skript, welches ich im Netz gefunden habe zum testen:
Link zu diesem Kommentar
Auf anderen Seiten teilen
5 Antworten auf diese Frage
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.