Schmutziger Trick: Programm auf einem entfernten Rechner ausführen / Remote-Hibernate

Hallo,

vielleicht gibt es ja außer mir noch andere, die sich ärgern dass es unter Windows keinerlei eingebaute Möglichkeit gibt, Befehle auf anderen Rechnern im Netzwerk auszuführen. Mich hat das immer gestört und ich wollte mir auch keine Zusatzsoftware auf den Clients installieren müssen, die ständig im Hintergrund laufen sollte.

In meinem Fall ging es darum, dass ich beim Drücken des „Abwesend“-Schalters wirklich alles ausschalten wollte, was noch im Haus eingeschaltet ist. Auch mein Notebook sollte, sofern es im WLAN ist und läuft, ausgeschaltet werden.

Nun wird sich ein Windowserfahrener Mensch wundern, warum ich nicht einfach den Befehl

shutdown -s \\192.168.0.196 -f

benutzt habe, der ja genau das tun würde: Den Rechner „notebook“ im Netzwerk herunterfahren, sofern die entsprechenden Rechte vorhanden sind.

Leider is das aber nicht die Art wie ich mein Notebook normalerweise herunterfahre. Stattdessen bevorzuge ich den Ruhezustand, weil man aus diesem wesentlich schneller wieder hochfahren kann (keine „Bill-Gates-Gedenkminute“) und zudem offene Anwendungen erhalten bleiben und man einfach da weiterarbeiten kann, wo man aufgehört hat.

Also brauchte ich zunächst eine Möglichkeit, den Rechner per Kommandozeile bzw. Programmaufruf in den Ruhezustand zu versetzen und dann noch einen Weg, dies von einem anderen Rechner aus auszulösen.

Im Internet wurde ich, was den Ruhezustand betrifft, schnell fündig. Der Befehl

c:\windows\system32\rundll32.exe powrprof.dll,SetSuspendState Hibernate

tut, beispielsweise in einer Datei shutdown.cmd auf dem herunterzufahrenden Rechner verpackt, genau dies. Doch wie führe ich sie von einem entfernten Rechner aus?

Das einzige Mittel, mit dem man den Start eines Programms auf einem anderen Rechner im Netzwerk auslösen kann und das bei Windows XP von Haus aus an Bord ist, ist der Taskplaner. Folgendes Skript hilft weiter (.vbs - Visual Basic Script):


Set objShell = WScript.CreateObject("WScript.Shell")
objShell.exec "at \\192.168.0.196 " + FormatDateTime(time + #00:02:30#, 4) + " /interactive " + chr(34) + "c:\windows\hibernate.cmd" + chr(34)

Das Skript ist natürlich ein Notbehelf, da es das Programm nicht sofort ausführt, sondern erst nach zweieinhalb Minuten. Der Grund hierfür ist, dass mögliche Synchronisationsfehler der beiden Systemuhren berücksichtigt werden müssen und der Task genau in dem Moment ausgeführt wird, in dem die Systemuhr auf die angegebene Zeit wechselt - allerdings ist die Auflösung nur minutengenau. Also muss man den Anfang der gewünschten Minute „erwischen“… Das Skript veranlasst den angesprochenen Rechner, um die aktuelle lokale Systemzeit plus zweieinhalb Minuten das entsprechende Skript auszuführen. Würde man einen zu geringen zeitlichen „Sicherheitsabstand“ wählen könnte es passieren, dass die Uhr des Zielrechners schon „weiter“ ist und das Skript nicht wie gewünscht, sondern erst am nächsten Tag ausgeführt wird.

Was ist zu beachten? Zunächst einmal müssen natürlich die entsprechenden Zugriffsrechte bestehen. Der IPS-Rechner muss also auf den Zielrechner zugreifen dürfen. Ich habe aus diesem Grunde den IPS-Dienst unter einem entsprechenden Account ausgeführt. Dann muss man selbstredend Pfad- und IP-Adressen anpassen. Ich verwende die IP anstelle des Hostnamens weil letzteres bei mir zwischen WLAN und LAN aus unerfindlichen Gründen nicht funktioniert. Wichtig ist dann natürlich, dass man dem entsprechenden Rechner per DHCP eine feste IP zugeordnet hat.

Wenn man will kann man das Skript noch verfeinern indem man z.B. die Übergabe eines Parameters erlaubt und die Datei auf dem Zielrechner im Skript selbst erzeugt. So könnte man ein Skript erzeugen, das auf dem Remotesystem einen „beliebigen“ als Parameter zu übergebenden Befehl ausführt. In meinem Fall reichte jedoch das hier gezeigte Beispiel aus.

Ach Mist, falsches Forum… sollte unter Tipps & Tricks stehen…

@Mods: Wenn es jemand verschieben könnte, wäre das toll! Danke.

Und…
…Verschoben.

Naja… mein Favorit wäre da aber doch das draufkopieren der ToniTools. Dann kann man am Notebook noch einiges mehr von IPS steuern lassen. :rolleyes:

Toni

Ja, wenn man das möchte. Aber wenn man eben nur das Herunterfahren braucht, reicht ja vielleicht auch o.g. Skript. Es spart wie gesagt ein weiteres Programm das ständig im Hintergrund laufen muss.

Ehrlich gesagt fiele mir auch kaum ein, was ich noch alles per IPS auf meinem Notebook steuern wollte? Aber vielleicht fehlt mir im Moment nur ein bisschen Phantasie… :wink:

Hi,

habe ich da etwas falsch verstanden? IPS läuft doh auch auf Deinem Notebook oder? Dann könntest Du doch direkt von IPS den Rechner schlafen legen lassen (auch per WSH). Dann sparst Du Dir den Stress mit den Uhrzeiten.

Ich wünsche einen schönen Abend.

Christoph.

Das sieht so aus :D. Er wollte wohl alle laufenden Rechner beim Verlassen des Hauses runterfahren (Hibernate), nicht den IPS-Server.

@sokkederheld

Wenn du uns jetzt noch ein Script lieferst, mit dem man die Rechner bei Heinkehr wieder aus dem Hibernate zurück holt bist du der Held. :wink:

Grüße,
Doc

Das wird (per WLAN) schwierig. Obwohl… probier mal dieses hier:


hocus($pocus);
$fidibus = "abrakadabra";
IPS_Execute("zappzerapp");

:smiley:

Auf dem Notebook läuft IPS übrigens nicht, warum auch?

Wo ist das Problem mit WOL? Könnte unter Umständen sogar mit WLAN funktionieren (nicht getestet) ansonsten würd ich es einmal mit „Pattern Match“ anstelle vom „Magic Packet“ versuchen.

WOL über WLAN? Das hab ich noch nie gehört und kann mir auch nicht vorstellen, dass es funktioniert. Wenn die WLAN-Karte im ausgeschalteten Zustand ständig auf das Signal zum Einschalten hören müsste, wäre das auch eine ganz erhebliche Stromverschwendung für 99% der Benutzer, da wirklich nur die wenigsten WOL einsetzen. Ich habe es übrigens schon mit mehreren Rechnern probiert (kabelgebunden) und so richtig funktioniert hat es noch nie…

Schließe aber nicht aus, dass es irgendwo auch Rechner gibt, bei denen WOL funktioniert… :wink:

Ähm… auch bei Wired-LAN muss die Netzwerkkarte mit strom versorgt werden damit das geht…

Toni

Na klar… habe ich auch nie bezweifelt. Aber geht sowas denn mit einem Notebook? Wo so ein System doch so sehr auf Stromsparen ausgelegt ist? Ich erinnere mich, dass es bei Desktop-PCs so einen Eintrag im BIOS gibt. Bei meinem Notebook allerdings z.B. nicht.

Ist ein Bios feature. Entweder es gibts oder es gibts eben nicht. Hat nix damit zu tun, dass das Display mit im Gehäuse ist oder nicht…

Toni

Hmm ok, ich hätte jetzt gedacht, dass dieses Feature unnötig Strom verbraucht und daher in Stromsparsystemen eher nicht unterstützt wird… aber wissen tu ich es nicht. Vielleicht gibt es also tatsächlich Notebooks die sowas können, ich habe mich aber nicht damit beschäftigt. Meines kann es offenbar nicht.