joh316
Goto Top

Skript ausführen mit Power Chute Serial Shutdown scheitert

Hallo,

ich sitze seit einiger Zeit an dem folgenden Problem und bitte um einen Rat:

Eine USV "APC Smart UPS C 1500" ist mit USB an einen Windows 10 PC angesteckt.
Kommunikation funktioniert.

Installiert hatte ich zunächst Power Chute Business Edition - als es dort nicht funktionieren wollte, bin ich auf Power Chute Serial Shutdown (Nachfolger der ersten Software) umgestiegen.

Ich möchte folgendes Batch File ausführen, wenn die USV auf Akku läuft (Also ein Stromausfall auftritt) - Inhalt der Batch-Datei:
@START "" "c:\Program Files\PuTTY\plink.exe" -batch root@11.11.11.11 -pw Password "/sbin/shutdown.sh && poweroff"  
Das Batch File ist am korrekten Speicherpfad angelegt und über die o.g. Software auch auswählbar. Die Software bietet die Option, das File einmal zu testen.

Dass die Software wirklich diese Batch Datei ausführt, konnte ich nachstellen, indem ich lediglich eine Datei mit der aktuellen Uhrzeit erzeugen lies, so wie es hier auch empfohlen wird:
https://www.apc.com/uk/en/faqs/FA159586/
Das hat tadellos funktioniert.

Ich nehme an, dass es ein Problem in den Zugriffsberechtigungen des Dienstes auf die Ausführung von plink.exe gibt.
Starte ich die .bat Datei manuell per Doppelklick, wird der ESXi-Host (11.11.11.11) korrekt heruntergefahren. Lasse ich die Software die Datei testen, passiert rein gar nichts. Auch wenn ich es nicht über die Testfunktion erledige, sondern den Stromausfall per Steckerziehen an der USV simuliere, wird das Skript nicht ausgeführt.

Im zugehörigen Windows-Dienst habe ich bereits versucht, den Haken zu setzen bei "Allow service to interact with desktop" - ohne Erfolg.
Habe auch als ausführendes Konto das Administrator-Konto hinterlegt - ohne Erfolg.

Ich habe keine Idee mehr, wo ich ansetzen muss.
Gefühlt gibt es 100 mal das Problem im Netz - aber eine Lösung war leider bis jetzt nicht dabei...

Danke für jede Hilfe.

Content-Key: 53716656035

Url: https://administrator.de/contentid/53716656035

Printed on: April 27, 2024 at 07:04 o'clock

Member: Fighter456
Fighter456 Oct 26, 2023 at 18:09:33 (UTC)
Goto Top
Hallo,

welches Ausgabe bekommst Du denn, wenn die Ausgabe vom Befehl in beispielsweise eine Text-Datei umgeleitet wird? Eventuell lässt sich der Fehler auf diese Art und Weise finden.
Member: its-gab
its-gab Oct 26, 2023 at 20:39:51 (UTC)
Goto Top
Hallo,

Zitat von @joh316:
Eine USV "APC Smart UPS C 1500" ist mit USB an einen Windows 10 PC angesteckt.

Ah das ist das Modell wo man keine Netzwerkmanagementkarte einbauen kann oder? Sonst hätte ich PowerChute Network Shutdown benutzt https://www.apc.com/de/de/product/SFPCNS44-V/powerchute-network-shutdown ...

Du könntest mal die Ausgabe umleiten >C:\Log\shutdown.log. Vielleicht hilft dir das weiter
Member: joh316
joh316 Oct 27, 2023 at 11:55:52 (UTC)
Goto Top
Danke zunächst für eure Antworten.

Das ist die aktuelle Batch Datei.
echo Gestartet >> C:\APCShutdown\log4.txt
time /T >> C:\APCShutdown\log4.txt
@START "" "C:\Program Files (x86)\PuTTY\plink.exe" -batch root@11.11.11.11 -pw Password "/sbin/shutdown.sh && poweroff"  
echo Erledigt >> C:\APCShutdown\log4.txt
time /T >> C:\APCShutdown\log4.txt

Wird die ausgeführt über die Software, dann steht im Log:
Gestartet 
13:24
Erledigt 
13:24

Passe ich die Ausgabe so an, dass auch der Plink Befehl mit geloggt wird, dann ist die Ausgabe lediglich die folgende:
Gestartet 
13:24

und die TXT-Datei ist durch plink.exe in Verwendung. Das wird mir mitgeteilt, wenn ich versuche, Änderungen in der Log-Datei zu tätigen.

echo Gestartet >> C:\APCShutdown\log4.txt
time /T >> C:\APCShutdown\log4.txt
@START "" "C:\Program Files (x86)\PuTTY\plink.exe" -batch root@11.11.11.11 -pw Password "/sbin/shutdown.sh && poweroff" >> C:\APCShutdown\log4.txt  
echo Erledigt >> C:\APCShutdown\log4.txt
time /T >> C:\APCShutdown\log4.txt

Habe testweise auch Putty in der 64 Bit Version deinstalliert und in der 32 bit Version installiert - ohne Veränderung.
Umgebungsvariable für Plink: "PLINK_PROTOCOL" habe ich ebenfalls auf den Wert "ssh" gesetzt - ohne Veränderung.

Ich komme leider nicht weiter...
Member: Fighter456
Fighter456 Oct 27, 2023 at 15:42:32 (UTC)
Goto Top
Wird die Batch-Datei überhaupt ausgeführt? Packe doch mal bitte die Zeitausgabe "time /T >> C:\APCShutdown\Log.txt" einmal vor die Ausführung und einmal nach der Ausführung von plink.exe in die Batch-Datei selber.

Wenn in die Anleitung mit deiner Version zudem vergleiche, kommen mir die leeren "" vor @start und "C:\Program Files…" falsch vor? In der Anleitung lassen diese die Laufwerksangabe zudem außerhalb, sprich:

@START C:"\Program Files (x86)\PuTTY\plink.exe" -batch root@11.11.11.11 -pw Password "/sbin/shutdown.sh && poweroff" >> C:\APCShutdown\log4.txt  

Ansonsten auch erst einmal ohne "/sbin/shutdown.sh && poweroff" testen, um zu schauen, was der ESXi zur Anmeldung über plink überhaupt sagt.
Member: joh316
joh316 Nov 03, 2023 updated at 12:59:26 (UTC)
Goto Top
Sorry für die verzögerte Meldung...
es erfolgt keine Ausgabe, wie bereits im ersten Post beschrieben. Die anderen Schreibweisen habe ich auch getestet - ohne Erfolg.

Habe zwischenzeitlich eine Powershelldatei erstellt, um über PowerCLI den Host runterzufahren.
Führe ich die .ps1 Datei aus, fährt der Host korrekt runter, führt die Software das aus, passiert wieder nichts...

Die Software führt folgende Batch datei aus:
@START "" "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy Unrestricted -NoProfile -NonInteractive C:"\APCShutdown\shutdown.ps1"  

Die PowerShell Datei sieht wie folgt aus:
$hostIP = "11.11.11.11"  
$user = "root"  
$password = "Password"  

Import-Module VMware.VimAutomation.Core | out-file "c:\APCShutdown\log_powershell.txt"  
"3" | out-file "c:\APCShutdown\log_powershell.txt" -Append  
"4" | out-file "c:\APCShutdown\log_powershell.txt" -Append  
"5" | out-file "c:\APCShutdown\log_powershell.txt" -Append  
Connect-VIServer -Server $hostIP -User $user -Password $password -SaveCredentials | out-file "c:\APCShutdown\log_powershell.txt" -Append  
"6" | out-file "c:\APCShutdown\log_powershell.txt" -Append  
Stop-VMHost $hostIP -Force -Confirm:$false | out-file "c:\APCShutdown\log_powershell.txt" -Append  
"Herunterfahren beendet" | out-file "c:\APCShutdown\log_powershell.txt" -Append  

Lasse ich die Software die Batch Datei ausführen, wird als Logfile (c:\APCShutdown\log_powershell.txt) folgendes generiert:
3
4
5
6
Herunterfahren beendet
Das bedeutet ja zumindest schonmal, dass die PowerShell Datei ausgeführt wird, sonst gäbe es die Ausgaben nicht.

Führe ich die Batch Datei manuell aus per Doppelklick, wird es sauber abgearbeitet (DER HOST FÄHRT RUNTER) und im Log (c:\APCShutdown\log_powershell.txt) erscheint es so:
3
4
5

Name                           Port  User                          
----                           ----  ----                          
11.11.11.11                     443   root                          


6

Name                 ConnectionState PowerState NumCpu CpuUsageMhz CpuTotalMhz   MemoryUsageGB   MemoryTotalGB Version
----                 --------------- ---------- ------ ----------- -----------   -------------   ------------- -------
11.11.11.11           Connected       PoweredOn       8         550       14888          13,699          23,999   5.5.0


Herunterfahren beendet

Ich verstehe nicht, warum die relevanten Befehle sowohl in der ursprünglichen Batch Datei (Ursprungsposting) als auch in der PowerShell Datei nicht korrekt ausgeführt werden.

Vielleicht hat ja noch jemand eine Idee - wäre echt klasse face-smile
Member: joh316
Solution joh316 Jan 06, 2024 at 13:40:22 (UTC)
Goto Top
Also nach langem Probieren, habe ich die Lösung nun tatsächlich gefunden - und die ist nicht mal schwer...

Die Verbindung zu dem SSH-Host muss per Putty einmalig erledigt werden, dass man dem Zertifikat vertraut.
Der zugehörige Windows-Dienst muss mit den Anmeldeinformationen des Users, mit dem die ganze Zeit gearbeitet wird, versehen werden!!

Ich nehme an, das hängt mit der Session 0 Problematik zusammen - das Plink wird also quasi abgekapselt gestartet.
Deshalb funktionierten auch die Anweisungen drum herum in derselben Batch Datei, weil die plink.exe gekapselt gestartet wird... Da muss man drauf kommen.

Also jedenfalls gehts.
Sowohl, wenn der User angemeldet ist, als auch wenn das System einfach nur läuft, ohne dass jemand angemeldet ist.

Danke trotzdem für alle Hilfe - vielleicht hilft das hier ja noch jemandem mit dem gleichen Problem.