Server über SMB-Client runterfahren

GeilerGelber31

Komplett-PC-Käufer(in)
Server über SMB-Client runterfahren

Hallo,

ich habe folgendesn Problem:

Ich habe einen Homeserver zu Hause der mit Windows Server 2016 betrieben wird. Einem Freund von mir habe ich auf einige Ordner eine Freigabe über SMB zugewiesen. Der Server läuft nicht die ganze Zeit sondern kann über eine Webseite, die auf einem Raspberry Pi läuft, hochgefahren werden. Das Hochfahren wird über einen Wake-On-Lan-Befehl über den Raspberry Pi angestoßen. Leider kann als Admin nur ich den Server wieder runterfahren und das auch nur über RDP. Allerdings möchte ich, dass mein Kumpel dies auch machen kann. Um zu überprüfen ob irgendwelche SMB-Sessions offen sind und der Server nicht heruntergefahren werden soll habe ich folgendes PowerShell-Skript geschrieben:

$UserCount = Get-SmbSession | measure-object
if($UserCount.Count -eq 0)
{
Write-Host -ForegroundColor Green "Shutting down!" | shutdown.exe -t 30 -s
}
else
{
Write-Host -ForegroundColor Red "Multiple users logged in. Shutdown not possible!"
}

Nun möchte ich gerne wissen, ob es eine Möglichkeit gibt über die SMB-Verbindung dieses Skript auf dem Server zu starten. Allerdings möchte ich dafür kein Programm wie PsExec dafür benutzen. Habt ihr vlt. eine Idee was ich noch versuchen kann?

Gruß,

GeilerGelber31
 
AW: Server über SMB-Client runterfahren

Nun möchte ich gerne wissen, ob es eine Möglichkeit gibt über die SMB-Verbindung dieses Skript auf dem Server zu starten.
Leider zu spät (genau) gelesen, trotzdem lasse ich die Antwort unten mal drin:

das wird hoffentlich niemals funktionieren, wie auch? An der Auslegung von Samba dürfte sich seit Jahrzehnten nichts geändert haben: Der Samba-Server stellt Dienste zum Datenaustausch und für Druckerfreigaben bereit, aber nicht von Methoden zur Ausführung von Programmen auf dem Samba-Server.

Eine weitere Methode (neben PsExec) wäre, das Script lokal auf dem Server abzulegen (macht psexec ja auch) und es dann per WMI und Taskplaner mit ein paar Sekunden Verzögerung starten zu lassen.

Was auch immer Dir in den Fall (oder in jedem anderen Fall, in dem remote ein Script ausgeführt werden soll) der Write-Host bringen soll, wüsste ichn zwar nicht, aber stören sollte es auch nicht.

Ich habe auch keine Ahnung, wie man WMI-Aufrufe/Abfragen per Linux und/oder per Webserver absetzt. In dem Fall (privater Windows-Server) würde ich mit ein paar Zeilen ASP.NET einen kleinen Self-Hosting Webservice schreiben, den ich mit Linux (oder jedem anderen Client, der sich auf den Server verbinden darf) abfragen kann. Dann könnte man dem User auf dem RaspPI auch anzeigen, was gerade los ist.

Oder halt den IIS auf dem Server aktivieren und ein paar Zeilen PHP analog dem hier:
How to remotly execute files with Samba? - MandrivaUsers.org
Dann kann man ja problemlos entweder per Firewall nur den RaspPI zugreifen lassen oder eine Benutzerverwaltung realisieren.

Oder Du suchst, ob man das ganze per telnet starten kann (ich habe wieder mal keine Ahnung, was man mit dem Telnet-Server von Windows alles anstellen kann).

Nachrag:

Ach so, wenn das ganze unsicher und doch zwingend per SMB-Dateifreigabe sein muss:
- das Scrtipt um die Überwachung eines freigegebenen Ordners erweitern
- wird dort eine Datei mit dem korrekten Dateinamen/Inhalt/WasDirAuchImmerEinfällt abgelegt, wird der Rest des Scriptes ausgeführt
- vor dem Shutdown wird dann die Datei zum Triggern des Shutdowns geläscht
- Das Scritp dann entweder per Taskplaner alle X Sekunden/Minuten laufen lassen oder in einer Dauerschleife mit ein paar Sekunden Sleep nach jeder Prüfung auf die Trigger-Datei. U.U. kann man als Trigger auch die Erzeugung einer Datei im überwachten Verzeichnis eintragen.

Das ganze ist natürlich absolut Gefährlich, aber im LAN macht man ja so einiges, wenn es unbedingt ein Windows-Server sein muss, der mittels Linux gesteuert werden soll ohne dafür eine etablierte Schnittstelle zu wählen/implementieren.
 
Zuletzt bearbeitet:
AW: Server über SMB-Client runterfahren

Hallo! Danke erstmal für deine schnelle und ausführliche Antwort. Deine Antwort hat mich zum Nachdenken gebracht und die Sache mit der Unsicherheit ist natürlich ein Problem. Ich habe das Problem nun sozusagen automatisiert und so gelöst. Ich habe über den Task Scheduler einen neuen Task erstellt welcher 15 Minuten nach start des Servers gestartet wird. Dieser ruft alle 3 Stunden das oben erwähnte Skript auf. Somit muss ich mich nicht immer darum kümmern den Server runterzufahren.
 
Zurück