- wach halten durch USB-Stick: viewtopic.php?f=38&t=2527,
- wach halten solange IP aktiv: viewtopic.php?f=37&t=2236).
LightsOut bietet von sich aus keine Schnittstelle an, mit der man es mit Informationen versorgen kann (z.B. "bitte wach bleiben"). Also muß ich LightsOut einfach solange deaktivieren und somit daran hindern, herunterzufahren. Sobald das "bitte wach bleiben" nicht mehr nötig ist, reaktiviere ich LightsOut einfach wieder, und es kann wieder sein energiesparendes Werk verrichten.
Dazu habe ich mir ein Skript gebastelt, welches selbstständig eine Liste von IPs überwacht. In diese Liste trage ich die IPs der Geräte ein, die den Server benötigen (das ist bei mir vor allem mein MP3-Streaming-Client).
- Falls eine der IPs aus der Liste auf Ping antwortet, so deaktiviert mein Skript den LightsoutClientService auf dem Server. Damit kann LightsOut den Server nicht mehr schlafenlegen.
- Falls keine IP aus der Liste auf den Ping antwortet, so aktiviert das Skript den Service wieder, und beim nächsten normalen Polling (bei mir in den LightsOut-Einstellungen auf 10 Min. eingestellt) geht der Server brav in Hibernation.
Funktioniert bei mir jetzt schon seit einigen Wochen problemlos in Verbindung mit einem Netgear Streaming-Client mit einer festen IP-Adresse. Was hier mit Hilfe von IP-Adressen implementiert ist, könnte sehr leicht auf das Vorhandensein bestimmter Dateien auf einem USB-Stick umgebaut werden. Aber vielleicht ist das ja auch gar nicht mehr notwendig, wenn ihr eurem Musik-Player o.ä. eine feste IP zuweist und diese in die untenstehende ips.txt hineinschreibt.
Folgendes braucht ihr dazu:
- Die Windows PowerShell 1.0 - bei Microsoft herunterladen und auf dem Server installieren. (EDIT: Nach der Installation von Powershell muss noch die Scriptausführungsrichtlinie auf RemoteSigned gesetzt werden: Eingabe von "Set-ExecutionPolicy RemoteSigned" in der Shell-Eingabeaufforderung.)
- Ein Skript namens c:\scripts\ipwatchdog\ipwatchdog.ps1 mit folgendem Inhalt:
Code: Alles auswählen
# LightsOut-IP-Watchdog # # Überwacht weitere IP-Adressen mittels Ping, ob sie noch online sind. # Falls ja, wird der LightsOutService gestoppt, damit er den WHS nicht # herunterfährt. # Falls keine der IPs mehr online ist, wird der LightsOutService wieder gestartet. # # Dies ist ein Script für Windows PowerShell 1.0 # geschrieben 2008 von erikzwo für http://forum.home-server-blog.de/ # inspiriert von <http://powershellcommunity.org/Forums/tabid/54/forumid/1/tpage/1/view/Topic/postid/182/Default.aspx> # Param($list = $(Throw "List is required"),[switch]$Verbose) function Ping-Server { Param([string]$server) $pingresult = Get-WmiObject win32_pingstatus -f "address='$Server'" if($pingresult.statuscode -eq 0) {$true} else {$false} } if($Verbose){$VerbosePreference = "Continue"} Write-Verbose "############" Get-Date Get-Service "LoService" $status = "undefined" foreach($server in (get-Content $list)) { $x = 1 Write-Verbose "Processing IP: $server `r" for($i=0;$i -lt 4;$i++) { Write-Verbose " Ping Count $i `r" $result = Ping-Server $Server if(!$result) { Write-Verbose " Ping failed for $x times `r" $x++ sleep 2 if($x -gt 4) { # der Gesamtstatus darf nur auf down gesetzt werden, wenn bisher noch keine "ups" zu vermelden waren. if($status -eq "undefined") { Write-Verbose " Ergebnis: IP $Server ist down `r" $Status = "down" } } } else { if($status.$Server -ne "up") { Write-Verbose " Ergebnis: IP $Server ist up `r" $Status = "up" } } } } if($status -eq "down") { Write-Verbose "Alle zu ueberwachenden IPs sind down. Schalte LightsOutService (wieder) ein. `r" Start-Service displayname "Lights Out Service" } elseif($status -eq "up") { Write-Verbose "Eine oder mehrere IPs sind up. Schalte LightsOutService aus. `r" Stop-Service displayname "Lights Out Service" } else { Write-Verbose "Fehler - Status wurde nicht umgesetzt! `r" } sleep 3
- Ein Skript mit Namen c:\scripts\ipwatchdog\startwatchdog.bat
Code: Alles auswählen
@echo off start /min c:\scripts\ipwatchdog\startwatchdog2.bat
- Ein Skript mit Namen c:\scripts\ipwatchdog\startwatchdog2.bat (Achtung! das Skript besteht insgesamt aus zwei Zeilen! Die Zeile mit dem powershell.exe ist wirklich so lang)
Code: Alles auswählen
powershell.exe -noprofile -noninteractive -command "c:\scripts\ipwatchdog\ipwatchdog.ps1 -list c:\scripts\ipwatchdog\ips.txt -verbose" 1>> c:\scripts\ipwatchdog\ipwatchdog.log exit
- Eine Datei c:\scripts\ipwatchdog\ips.txt, welche die zu überwachenden IP-Adressen enthält, jede in einer neuen Zeile:
Code: Alles auswählen
192.168.x.y 192.168.x.z
- Einen Eintrag im Windows Task Scheduler, welcher das Skript c:\scripts\ipwatchdog\startwatchdog.bat alle 8 Minuten startet. (In der Systemsteuerung: Geplante Tasks, Task hinzufügen - oder so ähnlich, ich habe hier nur ein englisches Windows)
Viel Erfolg, und lasst mich wissen, wie es läuft.
gruß,
erik.
PS. mein verschachtelter Aufruf von zwei .bat-Dateien über den Task Scheduler ist nicht sonderlich elegant. Ich wollte aber vermeiden, daß ständig im Vordergrund ein Fenster aufpoppt und so lange stehen bleibt, bis das Skript durchgelaufen ist (das hat mich insgesamt die meiste Zeit an der ganzen Sache gekostet!). Wenn ihr wisst, wie man mit dem Task Scheduler direkt minimierte Fenster aufrufen kann, so würde mich das brennend interessieren!