MaschinenStopp! - Die Idee

Strom sparen in Unternehmensnetzwerken

Obwohl seit Jahren verfügbar, fristet Wake-On-Lan immer noch ein Mauerblümchendasein. In vielen Unternehmensnetzen bleiben die Arbeitsplatzrechner für regelmäßige Wartungsnächte trotz reger Diskussion über GreenIT eingeschaltet. Ungestört kann der PC dann die komplette Festplatte auf Viren überprüfen, Hersteller-Patches installieren und mit Software betankt werden. Herunter gefahren wird er meist nicht mehr, so dass er bei Abwesenheit des Anwenders zum Dauerläufer wird. In einigen Firmen leisten die Maschinen aus Wartungsgründen sogar 7x24 Stunden Dienst - zu Lasten des Budgets und der Umwelt.

Die „low hanging fruits“ lassen sich auf Clientseite durch konsequentes Ausschalten nicht benötigter Rechner ernten. Die in der c't 25/2009 vorgestellte Skriptsammlung - bestehend aus MaschinenStopp, BedingterRuhezustand und WakeupService - ermöglicht hohe Stromeinsparungen durch zeitgesteuertes Ein- und Ausschalten der Firmen-PCs mit Windows-Betriebssystemen. Alle Tools zeichnen sich dadurch aus, dass sie kostenlos sind, sehr einfach zu installieren und keinen dedizierten Server benötigen. Die durch die Software erzeugten Implementierungs- und Wartungskosten werden extrem niedrig gehalten, wodurch sich die Stromersparnis finanziell noch stärker auszahlt. Lesen Sie im Artikel "Wake-On-Lan Grundlagen", wie sich Rechner über das Netzwerk aufwecken lassen - auch über Routergrenzen hinweg.

www.lugrain-software.com - USB Security für Windows


MaschinenStopp 1.2

Punktgenaues Ein- und Ausschalten der Firmen-PCs

Das VBSkript MaschinenStopp (genau genommen sind es vier Skripte) ermöglicht das zentrale, zeitgesteuerte Ein- und Ausschalten der Firmen-PCs mit Windows-Betriebssystemen. Es basiert auf geplanten Tasks und benötigt keinen dedizierten Server und keine Installation auf den Clients. Als Grundlage wird eine Liste aller Rechner und den dazugehörigen Mac-Adressen benötigt. In größeren Netzen lässt sich die Auflistung problemlos aus Asset-Managementsystemen oder DHCP-Servern exportieren.

Das Skript DhcpToPCListe.vbs übernimmt die Konvertierung des Microsoft-DHCP-Server-Exports in das Format der PCListe.txt, in der sich alle zu steuernden Rechner befinden müssen. Falls ein solches System nicht zur Verfügung steht, ist Handarbeit notwendig. Die Mac-Adresse eines Windows-Rechners erhält man mit dem Befehl ipconfig /all oder über das Netzwerk per Ping-Befehl mit anschließendem arp -a.

Während der Server-Installation mit Adminrechten - es kann sich hierbei auch um einen XP oder Vista/Windows 7-Client handeln - durch die Datei setup.vbs werden vier geplante Tasks erstellt. Da für das Herunterfahren der Rechner erweiterte Berechtigungen notwendig sind, muss im Laufe der Installation ein Benutzerkonto mit administrativen Rechten auf den Zielrechnern angegeben werden. Möchte man keine so umfassenden Rechte spendieren, genügt es, den Benutzeraccount in der lokalen Sicherheitsrichtlinie bei „Erzwingen des Herunterfahrens von einem Remotesystem aus“ einzutragen. Dann allerdings auf jedem Rechner, der vom Skript herunter gefahren werden soll. Dabei kann es sich um einen lokalen oder einen Domänenaccount handeln. Eine lokale Installation auf den zu weckenden Rechnern ist dadurch nicht notwendig.

Die Installation in 5 Schritten:

  1. Als Administrator auf dem neuen MaschinenStopp-Server die Datei setup.vbs aufrufen.
  2. Pfad angeben, in den die Software installiert werden soll.
  3. Benutzerkonto angeben, das das Recht besitzt, die Clients herunter zu fahren. Dabei kann es sich um ein Administrator-Konto handeln (der Administrator besitzt das Recht zum Herunterfahren auf jeden Fall) oder Sie geben einem nicht-administrativen Konto dieses Recht (s.o.).
  4. Jetzt werden 4 geplante Tasks erstellt. Sie werden bei jeder Taskerstellung in einer DOS-Box aufgefordert, das Kennwort für den in Punkt 3 angegebenen Benutzer einzugeben.
  5. Zum Abschluss erscheint die Nachricht "MaschinenStopp-Installation erfolgreich".

Es muss sicher gestellt sein, dass der IPv4-Ping (Befehl ping -4) zwischen Server und Clients in der Windows-Firewall freigeschaltet ist und die Clients sich per Shutdown-Befehl vom Server (shutdown -s -f -m \\rechner) herunter fahren lassen. Das lässt sich durch Aktivieren der Datei- und Druckerfreigabe in den Ausnahmen der Firewall erreichen. Nach der Installation des Servers unter XP oder Server 2003 sollte in den vier neu erstellten Tasks das Häkchen bei „Task löschen, wenn er nicht erneut geplant wird“ in der Registerkarte Einstellungen entfernt werden. Um die Funktionalität der Tasks zu testen, können sie nacheinander manuell gestartet werden. Das Erscheinungsbild der geplanten Tasks hat sich in den neueren Windows-Versionen stark verändert und sie heißen wieder „Aufgaben“, sind aber nach wie vor durch den Befehl control schedtasks zu erreichen. In der Datei PCListe.txt befinden sich im Urzustand nur drei fiktive Rechner, so dass es zu keinen unerwünschten Effekten kommen kann. Ist alles glatt gelaufen, sollten im Unterverzeichnis Log in den Protokolldateien aktuelle Einträge zu finden sein. Bei Problemen hilft ein Blick in die Datei installation.log. Hier wird die Installation protokolliert und evtl. auftretende Fehler festgehalten.

Das Skript MaschinenStart.vbs überprüft zunächst für jeden in der Datei PCListe.txt aufgelisteten Rechner, ob er vor dem Aufweckversuch ein- oder ausgeschaltet ist. Das Ergebnis wird in der Datei an.txt gesichert, so dass nach der Wartungszeit der alte Zustand wieder hergestellt werden kann. Das ist wichtig, da es durchaus Rechner gibt, die nicht heruntergefahren werden sollen. Jetzt kann der eigentliche Einschaltvorgang stattfinden. An alle aufgelisteten PCs wird das Wake-On-Lan-Paket gesendet. Das Wecksignal besteht aus einer Kennung und 16-mal der Mac-Adresse des Schläfers. Es lässt sich auch manuell durch das Tool wol.exe vom Download-Link erzeugen. Während der Einführungphase ist es von Interesse, welche Rechner sich problemlos wecken lassen und wo Nachbesserung nötig ist. Zu diesem Zweck kann man vor der Aufweckroutine MaschinenStart.vbs das Skript ZustandVorher.vbs laufen lassen und danach ZustandNachher.vbs. Dadurch erhält man eine gute Übersicht über das Weckverhalten aller Rechner.

Wichtig ist die korrekte Angabe der Subnetz-Maske. Dadurch lassen sich auch Rechner in fremden Subnetzen wecken. Bitte lesen Sie dazu auch den Artikel "Wake-On-Lan über Router".

Rechner, die vom MaschinenStopp-Skript unangetastet bleiben sollen, werden in die Datei Exclude.txt aufgenommen. Natürlich könnte man die zu verschonenden Rechner auch einfach aus der PCListe.txt eliminieren. Da diese aber von Zeit zu Zeit aktualisiert werden sollte, ist der Eintrag in Exclude.txt der bequemere Weg. Das Gegenstück dazu stellt die Datei Include.txt dar: um stromsparresistente Benutzer zu erziehen, werden hier die Rechner vermerkt, die unabhängig vom ursprünglichen Zustand nach Abschluss der nächtlichen Wartungsarbeiten immer heruntergefahren werden sollen. Sollen alle Rechner (außer den in der Exclude.txt aufgeführten) durch das Skript MaschinenStopp.vbs heruntergefahren werden, kann in der Konfigurationsdatei MaschinenStopp.cfg die Option AlwaysShutdown=yes gesetzt werden. Soll die bereits eingesetzte Softwareverteilung das Aufwecken übernehmen und unser Skript nur für’s Schlafenlegen zuständig sein, kann dies mit dem Eintrag Wakeup=no erledigt werden. Das Skript MaschinenStart.vbs sollte trotzdem laufen, um den Einschaltzustand vor dem Wecken zu ermitteln.

Sind alle Einstellungen erledigt und die Startzeiten der geplanten Tasks festgelegt, können die Skripte MaschinenStart.vbs und MaschinenStopp.vbs vom zentralen Rechner ihren Dienst verrichten. Die Logdatei MaschinenStopp.log führt genau Buch über alle Aktionen der Skripte MaschinenStart und MaschinenStopp. Hier wird protokolliert, welcher Rechner wann geweckt und wieder schlafen gelegt, welche Mac-Adresse und welche Broadcastadresse verwendet wurde.


BedingterRuhezustand

Nach Inaktivität in den Ruhezustand fahren - Ausnahmen erwünscht

Die amerikanische Environmental Protection Agency hat im Jahr 2008 festgestellt, dass höchstens zehn Prozent aller Firmen-PCs die Energiesparfunktionen aktiviert haben. Der Grund: Das globale Schlafenlegen der Firmen-PC nach ein bis zwei Stunden Leerlaufdauer kann für Zündstoff sorgen. Netzwerkverbindungen bestimmter Anwendungen werden nach dem Ruhezustand möglicherweise nicht mehr sauber aufgebaut, oder der - wenn auch geringe - Zeitverlust wird vom Anwender nicht akzeptiert.

Zusätzliche Probleme entstehen, wenn die Rechner in einer vierstündigen Wartungsnacht nach zwei Stunden herunter gefahren werden. Eine Lösung dafür bietet das Tool BedingterRuhezustand, das auf einem geplanten Task basiert. Der geplante Task fährt den Rechner nach einer definierten Leerlaufdauer in den Ruhezustand. Dabei lassen sich Ausnahmen definieren, so dass Regeln wie „Fahre den Rechner nach 60 Minuten Inaktivität in den Ruhezustand, aber nicht Montags - Donnerstags von 8:00 bis 17:00 Uhr und Freitags von 8:00 bis 15:00 Uhr“ möglich sind.

Durch die Installation unter Windows XP mit lokalen Adminrechten durch setup.bat werden zwei VBS-Dateien sowie drei Konfigurationsdateien nach C:\Programme\BedingterRuhezustand kopiert und der geplante Task BedingterRuhezustand erzeugt, der als Zähler dient. Einmal pro Minute schreibt er in das BedingterRuhezustand\temp-Verzeichnis eine 0 KiloByte große Datei. Durch diesen Zähler wird vermieden, dass der Rechner nach dem Hochfahren aus dem Ruhezustand gleich wieder schlafen gelegt wird, da unter Windows während des Ruhezustands der Idle-Counter nicht zurück gesetzt wird. Ist die festgelegte Anzahl Minuten erreicht, wird der Task BedingterRuhezustand-Aktivieren erzeugt, der nach der definierten Leerlaufdauer den Rechner in den Ruhezustand fährt. Das tut er allerdings nur, wenn in Exclude.txt keine Ausnahme definiert wurde. Über die grafische Benutzeroberfläche lassen sich alle Werte konfigurieren. Soll der Rechner beispielsweise Montags - Freitags von 7:00 - 16.00 Uhr und während der Wartungsnacht von Mittwoch 22:00 Uhr bis Donnerstag 3:00 Uhr unabhängig von der Leerlaufdauer immer eingeschaltet bleiben, ansonsten jedoch nach 60 Minuten Inaktivität in den Ruhezustand fahren, kommt die in der Abbildung gezeigte Konfiguration zum Einsatz:

Die von BedingterRuhezustand durchgeführten Aktivitäten werden in der Datei BedingterRuhezustand.log protokolliert. Die geplanten Tasks laufen im Benutzerkontext des System-Accounts und lassen sich problemlos per Softwareverteilung ausrollen. Das .NET-Framework sollte auf dem PC installiert sein, wenn das grafische User-Interface verwendet werden soll. Die Quelldateien für die GUI in Form eines VB2008-Projektes befinden sich im Download-Link. Da keine zentrale Konfiguration erfolgt, eignet sich dieses Stromsparwerkzeug auch für Standalone-PCs oder den Heimrechner.


WakeupService

Der PC-Weckdienst für Anwender und Administratoren

Mit WakeupService können ungeduldige Anwender ihre Rechner morgens zeitgesteuert aufwecken lassen, um unnötige Wartezeiten zu vermeiden. Natürlich lassen sich damit auch die Rechnerflotte der Administratoren oder Server, die nachts nicht gebraucht werden, komfortabel wecken. Die Bedienung ist einfach, liegt vollständig in der Hand des Anwenders und erfordert damit keine Support-Unterstützung. Auf den Clients ist keine lokale Installation notwendig.

Feiertage werden vom Admin in die Datei Exclude.txt eingetragen und genauso berücksichtigt wie Urlaubstage oder andere Abwesenheitszeiten. Eine vorkonfigurierte Feiertagsdatei bis 2011 ist bereits enthalten und muss nur noch länderspezifisch angepasst werden. Benötigt wird lediglich ein Windows-Server (oder eine Workstation), der immer läuft.

Per setup.vbs wird ein geplanter Task eingerichtet, der minütlich nachschaut, ob ein PC geweckt werden möchte. Ist dies der Fall, so schickt er per wol.exe das Magic Packet zum schlafenden PC. Über die Netzwerkfreigabe WakeupService$ hat der Anwender Zugriff auf eine graphische Oberfläche, um die persönlichen Weckzeiten festzulegen. Per NTFS-Berechtigungen sollte man nach der Installation Lesezugriff auf das WakeupService-Verzeichnis und Lese-/Schreibzugriff auf die Unterverzeichnisse „PCs“ und „conf“ sowie auf die Freigabe WakeupService$ gewähren. Wie beim MaschinenStopp-Skript lassen sich in der Konfigurationsdatei WakeupService.cfg Subnetzmasken eintragen, um das Aufwecken in fremden Subnetzen zu ermöglichen. In der Datei WakeupService.log werden alle Aktivitäten protokolliert.


Wake-On-Lan Grundlagen

Die PCs für Wake-On-Lan fit machen

Das Magic Packet besteht aus einer Kennung und 16-mal der Mac-Adresse des Schläfers. Es lässt sich manuell durch das Tool wol.exe erzeugen. Vorraussetzung ist, dass das Mainboard und die Netzwerkkarte APM (Advanced Power Management) oder ACPI (Advanced Configuration and Power Management Interface) unterstützen. Das ist bei allen halbwegs aktuellen PCs der Fall.

3 Schritte zum Herstellen der Wake-On-Lan Fähigkeit

1. BIOS-Einstellungen: Bei den verschiedenen BIOS-Herstellern gibt es unterschiedliche Einstellmöglichkeiten. Auf jeden Fall muss im BIOS Wake-On-Lan aktiviert werden. Evtl. muss noch „Magic Packet“ eingestellt werden. Beim Phoenix BIOS beispielsweise erfolgt die Einstellung über Advanced / Wake On LAN / enabled. Bei älteren Rechnern kann es sein, dass ein BIOS-Upgrade durchgeführt werden muss.

2. Gerätemanager / Netzwerkadapter / Eigenschaften / Erweitert: Wake-On-Lan Capabilities auf „Magic Paket“ stellen.

3. Gerätemanager / Netzwerkkarte / Energieverwaltung: „Das Gerät kann den Computer aus dem Ruhezustand aktivieren.“ einschalten. Unter Windows XP steht an dieser Stelle noch „...aus dem Standbymodus aktivieren.“ Funktioniert aber auch aus dem Ruhezustand.

Sie können die Wake-On-Lan-Funktion mit dem mitgelieferten Kommandozeilen-Tool folgendermaßen ausprobieren: aus dem selben Subnetz - es sollte also kein Router zwischen weckendem und zu weckenden PC sein - das Kommando

wol <MAC-Adresse>

ausführen. Zum Beispiel

wol 00-02-56-da-e4-55

Der PC sollte sich daraufhin unmittelbar einschalten. Die Mac-Adresse lässt sich mit „ipconfig /all“ herausfinden oder remote mit „ping “ und danach „arp -a“.


Wake-On-Lan über Router

Das Magic Packet über Routergrenzen transportieren

Mac-Adressen, die sich hinter Routern verstecken, sind nicht direkt erreichbar. Beim Aufruf des Weckbefehls muss deshalb die Broadcastadresse des entfernten Netzes mitgegeben werden. Soll ein Rechner aus dem Netz 10.5.0.0 mit der Subnetzmaske 255.255.0.0 geweckt werden, lautet der Befehl wol.exe A4-BE-57-23-7B-C3 10.5.255.255. Die Subnetzmaske kann man in der Konfigurationsdatei MaschinenStopp.cfg mit der Option SubnetMask angeben, z.B. SubnetMask=255.255.0.0. Auch mehrere Masken werden hier akzeptiert.

Um das Magic Packet auch über Routergrenzen hinweg zu transportieren, müssen die Router dafür freigeschaltet werden. Für Cisco-Router beispielsweise lässt sich das mit dem Befehl ip-directed broadcast auf dem LAN-Interface im Ziellan erreichen. Um aus Sicherheitsgründen nicht alle Broadcasts passieren zu lassen, lässt sich eine Access-Liste konfigurieren, in der die sendeberechtigten Maschinen eingegrenzt werden. Soll beispielsweise nur ein bestimmer Server – hier der Wake-On-Lan-Server mit der IP-Adresse 10.1.1.1 – die Berechtigung für netzwerkweite Broadcasts erhalten, kommt folgende Konfiguration zum Einsatz:

Router(config-if)#ip directed-broadcast 101
Router(config)#access-list 101 permit udp host 10.1.1.1 any

Durch die Anzeige der „Matches“ innerhalb der Access-Liste mit „show access-lists“ lässt sich gut erkennen, ob ein Wake-On-Lan-Paket die Grenze überwunden hat:

Router#show access-lists
Extended IP access list 101
10 permit udp host 10.1.1.1 any (15 matches)

Wenn sich die Anzahl der Matches beim Absenden des Weckbefehls erhöht, ist sicher gestellt, dass das Magic Packet den Router passiert hat. Alternativ hilft eine Sniffer-Messung am PC. Wenn das Paket hier aufgezeichnet werden kann, der PC aber keine Regung zeigt, weiß man, dass für die Ursachenforschung bei den lokalen BIOS- und Netzwerkkarteneinstellungen anzusetzen ist.


FAQ

Allgemein

Wo erhalte ich das Kommandozeilen-Tool wol.exe?

Das Tool ist im c’t-Download mit enthalten.

Wieviel Strom verbraucht ein PC überhaupt?

Das ist natürlich abhängig vom PC. Im Schnitt verbraucht ein Business-PC ca. 80 Watt, ein Standard-Notebook um die 30 Watt.

Und wieviel verbraucht er im Ruhezustand oder ausgeschaltet?

Ein ausgeschalteter PC, dessen Netzwerkkarte auf das Wecksignal lauscht, verbraucht etwa 1-3 Watt. Für den Ruhezustand gilt das Gleiche. Im Standby ist der Verbrauch etwas höher (ca. 5 Watt)

Meine PCs im gleichen Subnetz lassen sich per Wake-On-Lan aufwecken, in fremden Subnetzen aber nicht?

Für das Wecken in fremden Subnetzen muss die Broadcast-Adresse mitgegeben werden. Bei der Netzmaske 255.255.255.0, der IP-Adresse 192.168.50.12 und der MAC-Adresse 00-02-84-f5-e3-12 lautet der Befehl wol 00-02-84-f5-e3-12 192.168.50.255. Außerdem muss der Router, der die Netze verbindet, für „directed broadcast“ konfiguriert sein. Lesen Sie dazu den Artikel "Wake-On-Lan über Router".

MaschinenStopp

Warum können die MaschinenStopp-Tasks nicht unter dem lokalen Systemaccount laufen?

Zum Aufwecken würde das ausreichen. Allerdings benötigt man zum Herunterfahren der PCs einen Benutzer, der die entsprechenden Rechte besitzt. Mit einem Administrator-Account funktioniert es auf jeden Fall. Genau genommen reicht aber ein Account, der auf allen Maschinen das Recht „Erzwingen des Herunterfahrens von einem Remotesystem aus“ besitzt (s. Lokale Sicherheitsrichtlinie à Zuweisen von Benutzerrrechten)

WakeupService

Mein Rechner hat 2 Netzwerkkarten. Wie weiß WakeupService, welche MAC-Adresse zum Wecken verwendet werden soll?

Sie können die gewünschte MAC-Adresse über Bearbeiten / Andere Mac-Adresse einstellen.

BedingterRuhezustand

Obwohl ich in BedingerRuhezustand eingestellt habe, das der Rechner nach 60 Minuten Inaktivität in den Ruhezustand fahren soll, schläft er 5 Minuten nach dem Hochfahren wieder ein?

Richtig. Gilt allerdings nur bis Windows XP. Windows Vista / 7 / 8 / 10 haben damit keine Probleme mehr (s. Microsoft KB-Artikel http://support.microsoft.com/kb/282208).


Downloads

Die Tools

MaschinenStopp
Punktgenaues Ein- und Ausschalten der Firmen-PCs
Artikel Lesen    Download über c't

Bedingter Ruhezustand
Nach Lerrlauf in den Ruhezustand fahren - Ausnahmen erwünscht
Artikel Lesen     Download über c't

WakeupService
Der PC-Weckdienst für Anwender und Adminstratoren
Artikel Lesen    Download über c't