Windows-Rechner von der FritzBox aus in den Ruhezustand versetzen / herunterfahren

blacksun

Mitglied
Mitglied seit
10 Jul 2005
Beiträge
541
Punkte für Reaktionen
1
Punkte
18
Hallo zusammen,

ich habe auf meiner FritzBox Freetz 1.0 drauf und wollte euch nun fragen, ob und wie ich einen Windows-Rechner z.B. per Kommandozeile herunterfahren kann bzw. ihn in den Standby oder den Ruhezustand schicken kann.

Wie immer natürlich möglichst einfach und wenn's geht ohne zusätzliche Tools, sondern mit "Boardmitteln".

Auf Windows-Rechner gibt es für sowas ja die Shutdown.exe, mit der man u.a. Remote andere Rechner herunterfahren kann.

Wie mache ich das von der FritzBox aus?

Warum das ganze?
Das soll als Gegenstück zum Etherwake dienen. In Verbindung mit dem Callmonitor mache ich schon Wake-on-Call. Und ich hätte nun gerne noch Hibernate-on-Call umgesetzt.
 

LediesH2k

Aktives Mitglied
Mitglied seit
1 Apr 2008
Beiträge
1,636
Punkte für Reaktionen
6
Punkte
0
Moin.
Hast du es schon über eine VPN-Verbindung probiert? Würde ich testweise mal tun, nur um zu sehen ob dieser Weg gangbar ist müsste man natürlich wissen, von wo aus du das Ding immer runterfahren willst. Ein Internetvafe oder das Handy ist da wohl außen vor.

Gruß
Stefan
 

blacksun

Mitglied
Mitglied seit
10 Jul 2005
Beiträge
541
Punkte für Reaktionen
1
Punkte
18
Hast du es schon über eine VPN-Verbindung probiert?
...Ein Internetvafe oder das Handy ist da wohl außen vor.
VPN bringt mir nichts. Das ganze soll ja mit dem Handy passieren durch einen Anruf auf eine bestimmte Nummer, und der Callmonitor startet dann das entsprechende Kommando. Wenn ich einen Computer hätte, dann bräuchte ich ja wieder kein Hibernate-on-Call bzw. Wake-on-Call.

Das ganze ist so gedacht, dass wenn ich unterwegs merke, dass ich den PC vergessen habe herunterzufahren, dann rufe ich kurz daheim an und die FritzBox erledigt das.
Umgekehrt hab ich das schon. Ist der PC aus und ich brauche was auf diesem, rufe ich kurz daheim an und die FritzBox weckt ihn mit etherwake auf.

Du kannst aber ein vollständiges Samba erzeugen und dann mit dem net-Kommando einen Remote Shutdown auslösen.
Also Samba ist schon etwas überdimmensioniert allein für diesen Zweck.
Gibt's keine shutdown.exe für Linux, die mit Windows sprechen kann?

Wenn nicht, was ich schon entdeckt habe, wäre OpenSSH auf den Windowsrechner und dann per SSH-Kommandozeile von der FritzBox auf den Rechner und dort den Shutdown-Befehl absetzen.
Allerdings bekomm ich das mit den Key-Files nicht hin. Das braucht man aber, damit sich die FritzBox ohne Passworteingabe am Server anmelden kann.
 

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
1
Punkte
0
Also Samba ist schon etwas überdimmensioniert allein für diesen Zweck.
Gibt's keine shutdown.exe für Linux, die mit Windows sprechen kann?
Generell gibt es keine .exe Dateien für Windows, es sei denn, Du willst statt Samba lieber Wine verwenden.
Aber es gibt ein Programm, mit dem man unter Linux den Shutdown auslösen kann, aber es ist eben das net-Programm von Samba.

SSH ist natürlich auch eine Möglichkeit.
Eine weitere Möglichkeit könnte telnet sein.
 

Pikachu

Aktives Mitglied
Mitglied seit
18 Nov 2006
Beiträge
2,419
Punkte für Reaktionen
33
Punkte
48
Hallo,

Verstehe ich Bahnhof oder soll der Rechner über einen Port von der
FritzBox heruntergefahren werden, dazu könnte man doch auch den
Callmonitor(Freetz) nutzen, mit dem du über einen TCP Port eben an einem
Client auf dem PC den Rechner Runterfährst, oder meinst Du was anderes.

:lamer: ;)

Gruß Erwin
 

hermann72pb

IPPF-Promi
Mitglied seit
6 Nov 2005
Beiträge
3,664
Punkte für Reaktionen
8
Punkte
38
Zu dem Thema hatten wir vor ein Paar Monaten mindestens zwei Mal Diskussionen gehabt. Alles ist daran gescheitert, dass keiner es vollständig ausprobiert hatte, bzw. daran, dass wir uns nicht geeinigt hatten, wie es am besten zu lösen wäre.
Wenn du die Suche benutzen würdest, findest du mit Sicherheit diese 2-3 Threads zu dem Thema. Ich gebe dennoch eine kurze Zusammenfassung, obwohl Ralf es eigentlich schon vereinzeln angesprochen hatte:

1. Mit SAMBA. Die sauberste Lösung fü Windows. Allerdings ist eine reine Windows-Lösung und daher unschön. Der weitere nachteil: Man muss SAMBA anders kompilieren. Angeblich kann die aktuelle zu Recht abgespeckte Version dies nicht. Es gab hier Versuche SAMBA auf eigene Faust zu bauen. Versuche vollendeten in relativ großen Binaries (mehrere MBs), die erstmal nicht ohne Weiteres zu entschlaken wären. Also, eine große Baustelle für Cross-Compiler-Freaks unter uns.
2. Mit Dropbear oder Telnet. Ist zwar schön und universell, weil auch für Linux einzusetzen wäre. Hat aber daran gescheitert, dass kaum schlanke OpenSource-Server für Windows zu finden waren, die EINE VERNÜNFTIGE BENUTZERVERWALTUNG beherrschen. Dein OpenSSH kann bei Windows z.B. nur als root fungieren. Und das fand ich persönlich nicht spaßig. Meine Idee mit telnet/dropbear war einen Extra-Benutzer auf dem Rechner einzurichten, der NUR Herunterfahren dürfte und sonst nichts. Dies vom Administrator auf einem Windows-Rechner zu separieren erschien uns für momentan nicht realisierbar. Wir hatten auch keine Möglichkeit gefunden, die bestehenden Server dementsprechend zu entschlanken / zu patchen, dass sie nur das erlaubten.
3. Ein extra-Klient für den Rechner schreiben, der auf einem Port lauschen würde und bei einer bestimmten Kombination (womöglich halbwegs mit Passwort geschützt) shutdown.exe aufrufen würde. Ginge auch für Linux. Bei Windows gab es Probleme im Multiuser-Betrieb. Du musst so ein Programm als DIENST schreiben. Eine nachträgliche Erklärung einer exe-Datei zum Dienst mit diesen krummen M$-Tools führt zu keinem Erfolg, weil alle nicht-als-Dienst-kompilierte-exes nach der Benutzerambeldung von Windows gekillt werden. Wir hatten unter uns keine freiwilligen gefunden, die uns so ein dienst-fähiges Programm z.B. in C schreiben würden.

Jetzt kennst du unsere Sackgassen und kannst dich entscheiden, wo du mitwerkeln könntest.

MfG
 

blacksun

Mitglied
Mitglied seit
10 Jul 2005
Beiträge
541
Punkte für Reaktionen
1
Punkte
18
Verstehe ich Bahnhof oder soll der Rechner über einen Port von der
FritzBox heruntergefahren werden, dazu könnte man doch auch den
Callmonitor(Freetz) nutzen, mit dem du über einen TCP Port eben an einem
Client auf dem PC den Rechner Runterfährst, oder meinst Du was anderes.
Mit FritzBox meine ich natürlich Freetz auf der FritzBox. Und wie ich bereits geschrieben habe nutze ich den Callmonitor auf diese Art bereits, um über das etherwake-Tool PCs per Anruf aufzuwecken. Und nun würde ich gerne auf die gleich Art auch gerne wieder die PCs einschlafen lassen.
 

Pikachu

Aktives Mitglied
Mitglied seit
18 Nov 2006
Beiträge
2,419
Punkte für Reaktionen
33
Punkte
48
Hallo,

Es war nur ein Gedanke, ich weiß dass das nicht einfach ist in Windows,
hatte nur Gedacht wenn ein Client vom CM mit dem die Anrufe auf dem Win PC
Angezeigt werden, in vielleicht auch dazu zu missbrauchen.

Mit Irgendeiner Meldung vielleicht zum Schlafen bringen. :confused:

Gruß Erwin
 

hermann72pb

IPPF-Promi
Mitglied seit
6 Nov 2005
Beiträge
3,664
Punkte für Reaktionen
8
Punkte
38
Es gibt ein Callmonitor-Client für windows hier im Forum, ABER
1. Das Ding ist in einer für mich unbekannter Sprache geschrieben und der Autor rückt weder Sources dafür aus, noch meldet sich, noch sonst was. Also, das Ding ist quasi gestorben, obwohl es als exe-Datei noch tut und sogar mit Win7x64.
2. Dieser Klient ist leider nicht diensttauglich. Sobald sich ein Benutzer abmeldet ist die Überwachung weg. Manche haben natürlich nur einen Benutzer und selbst der meldet sich automatisch an. Dafür würde es vielleicht noch gehen. Ich nutze aber schon gerne die Multiuser-Funktion von Windows, auch in ihrer Home-Variante. Und dafür sind solche Tools nicht geeignet.

Es gab bereits Ideen netcat dafür zu missbrauchen. Es sollte angeblich auch eine Windows-Variante dafür geben. Leider wird jedoch NetCat angeblich von den meisten Antivirus-Programmen als Virus deklariert. Warum auch immer. Zwar nicht selbst ausgetestet und nur irgendwo gelesen, aber das wäre schon ein Grund es nicht zu nehmen, wenn man eine idiotensichere Lösung bauen will.

MfG
 

robinio_1337

Neuer User
Mitglied seit
25 Mai 2008
Beiträge
61
Punkte für Reaktionen
0
Punkte
0
Hallo,

auf meiner Dreambox hatte ich mal sowas ähnliches.
Hatte ein sh script mit dem ich remote Befehle an meinen Windows-Rechner geschickt habe.
Gegenstelle dazu am Win-PC war Power-off.
hier mal ein link dazu.
http://users.telenet.be/jbosman/poweroff/poweroff.htm

schöne Grüße

ROBiNIO
 

hermann72pb

IPPF-Promi
Mitglied seit
6 Nov 2005
Beiträge
3,664
Punkte für Reaktionen
8
Punkte
38
Danke, Robinio! Du hast tatsächlich die letzte Brücke gefunden, die wir lange gesucht haben! Jetzt steht eigentlich nichts im Wege es auf diese Basis zu realisieren. Was mich an der Geschichte etwas stört ist, dass das Ding anscheinend seit 2003 nicht weiter entwickelt wird. Funktioniert es denn noch mit aktuellen Windows-Versionen? Lässt es sich überhaupt als Dienst registrieren? Ich werde mir das Tool unbedingt ansehen, wenn ich Zeit dazu habe!
Auf der Linux-Welt-Seite stelle ich mir es so vor, dass man einen speziellen Benutzer anlegt, der runterfahren darf. Diesem Benutzer definiert man als shell ein speziell präpariertes Shell-Skript. In diesem Shell-Skript könnte man die Kommandos in Syntax-Manier von diesem Powershell-Programm abfragen und sie dann an die Shell entsprechend parsen. Damit hätte man eine einheitliche Schnittstelle geschaffen mit der die Box alle Rechner unabhängig vom Betriebsystem ansprechen könnte.

Wer macht mit? Bzw. wer testet/unterstützt es auf der Linux/Windows-Client-Front? Denn eigentlich gehört es nicht hierher, sollte aber vorher vorbereitet und gecheckt werden, bevor man sich an eine Web-CGI für FREETZ ran macht.

MfG
 

robinio_1337

Neuer User
Mitglied seit
25 Mai 2008
Beiträge
61
Punkte für Reaktionen
0
Punkte
0
Hi,

anderer ansatz wäre vielleicht ein SSH-Server für Windows.
http://www.freesshd.com/

dann müsste man nur die Befehle variieren.

Gruß
ROBiNIO
 

hermann72pb

IPPF-Promi
Mitglied seit
6 Nov 2005
Beiträge
3,664
Punkte für Reaktionen
8
Punkte
38
@Ralf: Deswegen sag ich ja auch, man sollte es bevorzugen.
@Robinio: So ganz free ist dieser freesshd doch wohl nicht. Ich habe keine Quellcodes gesehen und ich weiß nicht, ob es überhaupt Benutzerverwaltung von Windows unterstützt und ob es denn nicht etwas übertrieben ist. Im Heimnetz brauchst du meistens keine ssh und schon gar nicht zum Runterfahren auslösen. Benutzer/Passwort würden vollkommend ausreichen. Und das unterstützt auch poweroff. Zwar kann man mit poweroff auch diverse Dinge anstellen, aber vielleicht kann man das poweroff auspatchen oder per bestimmte Windows-Rechte verbieten, dass etwas Anderes als Herunterfahren ausgeführt wird.

MfG
 

Pikachu

Aktives Mitglied
Mitglied seit
18 Nov 2006
Beiträge
2,419
Punkte für Reaktionen
33
Punkte
48
Hallo,

Ja, man könnte den Code zerlegen, nur habe ich von C null Ahnung,
hatte selbst schon mal ein kleines Traytool mit dem ich den WinNT Rechner
runtergefahren habe erstellt, aber leider fehlt mir da die Standby Funktion,
da ich noch kein Code Beispiel gefunden habe dass ich verwenden und
anpassen kann, aber das Teil läuft nicht als Dienst und wird wohl auch nicht
nach dem Aufwecken gehen, ausser ich Teste es mal hier mit:

WM_QUERYENDSESSION
WM_POWERBROADCAST

die Datei: lilhtv22src.zip kann man sich im Netz runterladen, finde jetzt nur den Link nicht.
Lil' HTTP Server Source
Nachtrag hab ihn gefunden.

Ich habe das in einem kleinen Tool(nur W2k/Xp) verwendet um den Rechnerstart
und das Rechnerende in ein LogFile zu Schreiben.

Gruß Erwin
 
Zuletzt bearbeitet:

hermann72pb

IPPF-Promi
Mitglied seit
6 Nov 2005
Beiträge
3,664
Punkte für Reaktionen
8
Punkte
38
@Pikachu: Zerlegen muss man das nur, wenn man auf Nummer sicher gehen will und dem Benutzer-Runterfahrer sonstige Aktionen auf abzuschaltenden Rechner verbieten. Zum Anfangen würde aber die bereits vorhandene Version von poweroff ausreichen. Ich bin zur Zeit etwas im Stress, sonst würde ich es schon längst testen. Für den callmonitor fehlte dann nur ein Shell-Skript und dafür braucht man keine C-Kenntnisse.

Zu deiner Idee mit StandBy: Lass es lieber! Im StandBy verhalten sich die Rechner, deren Netzwerkkarten und die ganze WOL-Geschichte unsauber. Sprich, du kriegst den Rechner meistens nicht aus dem StandBy per WOL geweckt. Eventuell mit pings oder etwas anderem, aber nicht mit magic Paketen von WOL. Ähnliche Probleme erwarten auch suspend-to-disc. Wenn du WOL machen willst, dann nimm dir Zeit zum Aufwecken und benutze das normale Herunterfahren (power off).

MfG
 

Pikachu

Aktives Mitglied
Mitglied seit
18 Nov 2006
Beiträge
2,419
Punkte für Reaktionen
33
Punkte
48
Hallo,

War nur eine Idee mit Standby, somit kann man es Vergessen,
wenn es so nicht geht und für das Power Off würde ja der Code
bei mir mit W2K/XP reichen.

Code:
'
SUB ShutDownNT(BYVAL DoWhat AS LONG)
'
 LOCAL OSVersion        AS OSVERSIONINFO
 LOCAL ProcessHandle    AS LONG
 LOCAL TokenHandle      AS LONG
 LOCAL TempLUID         AS LUID
 LOCAL TokenPrivilleges AS TOKEN_PRIVILEGES
 LOCAL TKPDummy         AS TOKEN_PRIVILEGES
 LOCAL lReturnLength    AS LONG
'
 OSVersion.dwOSVersionInfoSize = SIZEOF(OSVersion)
'
 IF GetVersionEx(OSVersion) <> 0 THEN
'
  IF OSVersion.dwPlatformId = %VER_PLATFORM_WIN32_NT THEN
'
   ProcessHandle = GetCurrentProcess()
   CALL OpenProcessToken(ProcessHandle, %TOKEN_ADJUST_PRIVILEGES OR %TOKEN_QUERY, TokenHandle)
   CALL LookupPrivilegeValue("", "SeShutdownPrivilege", TempLUID)
'
   TokenPrivilleges.PrivilegeCount = 1
   TokenPrivilleges.Privileges(0).pLuid = TempLUID
   TokenPrivilleges.Privileges(0).Attributes = %SE_PRIVILEGE_ENABLED
'
   IF AdjustTokenPrivileges(TokenHandle, %FALSE, TokenPrivilleges, LEN(TKPDummy), TKPDummy, lReturnLength) THEN
'
    ' Flags: %EWX_LOGOFF, %EWX_SHUTDOWN, %EWX_REBOOT, %EWX_FORCE, %EWX_POWEROFF
    SELECT CASE DoWhat
'
     CASE 1
'
      ' Force Shut Down and ReBoot
      CALL ExitWindowsEx(%EWX_FORCE OR %EWX_SHUTDOWN OR %EWX_REBOOT, 0)
'
     CASE 2
'
      ' Force Logoff user' Force Logoff user
      CALL ExitWindowsEx(%EWX_FORCE OR %EWX_LOGOFF, 0)
'
     CASE ELSE
'
      ' Force Shut Down and Power Off
      CALL ExitWindowsEx(%EWX_FORCE OR %EWX_SHUTDOWN OR %EWX_POWEROFF, 0)
'
    END SELECT
'
   END IF
'
  END IF
'
 END IF
'
END SUB
'
Gruß Erwin
 

hermann72pb

IPPF-Promi
Mitglied seit
6 Nov 2005
Beiträge
3,664
Punkte für Reaktionen
8
Punkte
38
Sorry für eine blöde Frage eines nicht-windows-Programmierers: Was ist das für eine Sprache und wie sollte dein Code-Beispiel ausgeführt werden? Und wie sollen wir dein Skript aus dem Netzwerk heraus ansprechen? Sitzt es als Dienst im Hintergrund und wartet über TCP/IP angesprochen zu werden?

MfG
 

Pikachu

Aktives Mitglied
Mitglied seit
18 Nov 2006
Beiträge
2,419
Punkte für Reaktionen
33
Punkte
48
Hallo,

Nein das ist kein Script du könntest es aber als VBA übersetzen für geübte,
bin kein Freund von VBA in Word/Excel usw.

Das ist einfach nur ein kleines Programm ohne Netzwerk Eigenschaft und
läuft auch nicht als Dienst.

Die Commandozeilen Version ShutdownNT.exe muss man nur Ausführen und
der Rechner ist aus, wenn es einer Testen will dann könnte ich es per Anhang
hier reinstellen, nur müsste ich es erst neu Compilieren erstellen.

Die Funktion nutzt auch das Power Off wenn du den C Code durchschaust,
nur habe ich bei mir nur das nötigste verwendet.

Gruß Erwin

PS: ShutdownNT.exe per Anhang, Vorsicht beim Ausführen wird Heruntergefahren.
 

Anhänge

Zuletzt bearbeitet: