Jump to content

APC PowerChute Shutdown Script


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

vor 3 Minuten schrieb Dukel:

Wozu muss der Switch heruntergefahren werden?

Weil ich die Erfahrung gemacht habe, dass es LWL-Core Switche nicht so gerne mögen, wenn man da einfach Stecker zieht. Da es meinem Kollegen eben so geht, muss die Funktion rein. Ist beschlossene Sache.

 

vor 4 Minuten schrieb Dukel:

Email [...] APC Software funktionieren

Die APC-Software kann aber nur ein Template. Die APC-Mails kommen zu mir in mein Admin-Postfach. Das Powershell-Script verschickt nochmal (zudem in meinem Namen, sonst ließt es keiner) eine Mail von wegen "Server fährt gleich runter, speichert eure Arbeiten und macht Programm X und Y zu!"

 

Warum und ob wir das machen ist bereits intern beschlossen (und wenn ich händisch auf die Batch-Datei klicke funktioniert das auch alles), es geht nun nur noch um die Umsetzung.

 

Grüße!

Link zu diesem Kommentar

Also das Thema liegt gefühlte 5 Jahre zurück. Als Leitfaden ...

 

1. Folgender Skript wird initial getriggert und ruft einen PowerShellSkript auf - shutdown.bat  - ich hatte hier direkt die vmware module eingebunden, kannst du bei Bedarf wegehhauen


echo Shutdown of all VM’s and ESX hosts is launched at >> C:\tools\usv_shutdown\log\alert.txt
echo %date% %time% >> C:\tools\usv_shutdown\log\alert.txt
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "& 'C:\tools\usv_shutdown\runasAdministrator.ps1'" -PSConsoleFile "C:\tools\usv_shutdown\vim.psc1"

2.PowerShellSkript - Initialisierung Powershell: Ich hatte damals Probleme mit den entsprechenden Berechtigungen, die wurden nicht sauber übergeben.Die Aufgabe hiervon ist die PowerShell für den eigentlichen Skript anzustarten.

Hinweis: Die notwendigen Credentials müssen vorher angelegt werden. Da gibt es heute auch bessere Methoden.

cls
#legt Ausführungsbenutzer fest
$user= "********"
#lädt Passwortdatei 
$File="C:\tools\usv_shutdown\credentials\*******.pwd"
$password = Get-Content $File | ConvertTo-SecureString
#erzeugt die Credentials
$credential = New-Object System.Management.Automation.PsCredential($user,$password)
#eigentlicher PS Skript, der z.B. als Admin etc ausgeführt wird
$script = "C:\tools\usv_shutdown\multithread.ps1"
#Skript Aufruf
Start-Process powershell -Credential $credential $script #-ArgumentList 

#schließt den Intialisierungsskript

3. Eigentlicher Zielskript - Hier kannst du dann mit deinen Bedürfnissen loslegen.

Wie du Emailsverschickst usw, das darfst du gerne recherchieren.

 

Du solltest erstmal in ruhe definieren was du möchtest. Sprich dich nochmal die Anforderungen prüfen.

 

Beispiel:

5 Min Stromausfall danach erfolgt Triggerung. Unter 3. Werden bei mir parallel in mehrere Jobs - je ESXi Host (alle Gäste  -VMs) und  Bleche heruntergefahren.

 

Hier gibt es sicher mehrere Wege ans Ziel...

Man kann auch via Batch-Datei eine Art Triggerfile erzeugen, parallel läuft in der Prozessplanung der alle X Minuten die Datei prüft und bei Befund die Datei verschiebt und anschließend die gewünschten Routinen ausführt.

 

 

bearbeitet von PowerShellAdmin
Link zu diesem Kommentar

Danke dafür @PowerShellAdmin

 

Wenn ich die CMD-Datei von Hand starte funktioniert das alles bis auf die Nutzerübergabe. Was muss denn in die PWD-Datei rein? Das Passwort im Klartext, oder verschlüsselt? Bei letzterem, welche Verschlüsselungsart wird denn dafür gebraucht?

 

Testweise habe ich versucht $password mit

$password = "HierDasPasswort" | ConvertTo-SecureString

zu befüllen. Leider bekomme ich dann die Eingabemaske, in der ich meine Benutzerdaten eingeben soll.

 

Grüße!

Link zu diesem Kommentar

Die Passwortcontainer müssen vorab erzeugt werden. Das Auslesen innerhalb 2. sollte hier auch verbessert werden.

Das Beispiel ist an der Stelle veraltet.

Viel Spaß :)

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/convertto-securestring?view=powershell-6

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/convertfrom-securestring?view=powershell-6

bearbeitet von PowerShellAdmin
Link zu diesem Kommentar
vor 50 Minuten schrieb PowerShellAdmin:

Die Passwortcontainer müssen vorab erzeugt werden

Ich habe die Datei nun mit dem Code generiert (die Outputdatei auch entsprechend umbenannt, wie sie in Deinem Script steht):

$credential = Get-Credential
$credential.Password | ConvertFrom-SecureString | Set-Content c:scriptsencrypted_password1.txt

Sie wird auch angelegt. Nur leider bekomme ich weiterhin das Abfragefenster für Benutzer und PW.

 

Grüße!

Link zu diesem Kommentar

Die Datei am besten mit den Zielnamen und Zielpfad initial erzeugen und sicherstellen, dass der Domainnutzer korrekt angegeben ist z.B. domain\sammaccountname.

 

So wie ich es rauslese, wird hier eine Ver- und Entschlüsselung mit dem zusätzlichen Key empfohlen.

 

 

bearbeitet von PowerShellAdmin
Link zu diesem Kommentar

Ich glaube einen Teil habe ich, ich musste den Benutzernamen mit Hostname\ davor angeben.

 

Jetzt habe ich aber ein kleines Mysterium.

 

Wenn ich die Batch-Datei, die übrigens bei mir so aussieht starte, bekomme ich weiterhin die Maske, dass ich meine Anmeldedaten eingeben muss.

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "& 'C:\tools\usv_shutdown\runasAdministrator.ps1' -PSConsoleFile "C:\tools\usv_shutdown\test.ps1"

 

Wenn ich die RunAsAdministrator-Datei von @PowerShellAdmin in Powershell ISE öffne und dort starte läuft alles sauber durch, ohne Abfrage.

 

cls
#legt Ausführungsbenutzer fest
$user= "SERVERNAME\Administrator"
#lädt Passwortdatei 
$File="C:\tools\usv_shutdown\user.pwd"
$password = Get-Content $File | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString
#erzeugt die Credentials
$credential = New-Object System.Management.Automation.PsCredential($user,$password)
#eigentlicher PS Skript, der z.B. als Admin etc ausgeführt wird
$script = "C:\tools\usv_shutdown\test.ps1"
#Skript Aufruf
Start-Process powershell -Credential $credential $script #-ArgumentList 

#schließt den Intialisierungsskript

 

Wo hab ich den Knoten drin?

 

Grüße!

Link zu diesem Kommentar

Soweit es sich um einen lokalen Benutzer handelt, entspricht der Hostname der lokalen Domain.

 

Zu dem Thema ist auch bei MSXFAQ ein umfassender Artikel.

https://www.msxfaq.de/code/powershell/pspasswort.htm

 

Schliesse Mal bitte ISE und teste den Aufruf direkt über die PowerShell.exe.

Ich nehme an da stimmt was mit den Pfaden und / oder Variablen nicht.

Ise ist da leider etwas trügerisch.

 

Entferne bitte den folgenden Auszug, das ist nicht korrekt. Der gewünschte Script wird via Variable Script definiert, das PSC ist eine zusätzliche Erweiterung der Konsole - hatte ich lediglich für die vsphere Erweiterung verwendet.

 

-PSConsoleFile "C:\tools\usv_shutdown\test.ps1
bearbeitet von PowerShellAdmin
Link zu diesem Kommentar
vor 4 Minuten schrieb HeizungAuf5:

$password = Get-Content $File | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString

Du liest ein verschlüsseltes Passwort aus der Datei ein, verschlüsselst es nochmal und entschlüsselst es wieder.

Du müsstest wohl den mittleren Part raus lassen.

 

Ansonsten teste es einfach erstmal mit Zugangsdaten im Plaintext. Wenn das läuft, den nächsten Step machen.

Link zu diesem Kommentar
vor 8 Minuten schrieb testperson:

Du liest ein verschlüsseltes Passwort aus der Datei ein, verschlüsselst es nochmal und entschlüsselst es wieder.

Du müsstest wohl den mittleren Part raus lassen.

 

Ansonsten teste es einfach erstmal mit Zugangsdaten im Plaintext. Wenn das läuft, den nächsten Step machen.

:grins1: da wundert mich der Dialog nicht ...

 

Link zu diesem Kommentar

Übrigens erstmal sorry, dass ich hier wohl etwas rumdümple, aber - obwohl Admin in der Berufsbezeichnung - hab ich mit PowerShell normalerweise nicht viel zu tun.

 

vor 26 Minuten schrieb PowerShellAdmin:

Entferne bitte den folgenden Auszug, das ist nicht korrekt. Der gewünschte Script wird via Variable Script definiert, das PSC ist eine zusätzliche Erweiterung der Konsole - hatte ich lediglich für die vsphere Erweiterung verwendet.

 


-PSConsoleFile "C:\tools\usv_shutdown\test.ps1

Jo, ist raus.

 

vor 25 Minuten schrieb testperson:

Du müsstest wohl den mittleren Part raus lassen.

Danke, de Zeile sieht nun bei mir so aus:

$File="C:\tools\usv_shutdown\user.pwd"
$password = Get-Content $File  ConvertFrom-SecureString

 

 

vor 27 Minuten schrieb PowerShellAdmin:

Schliesse Mal bitte ISE und teste den Aufruf direkt über die PowerShell.exe.

Wenn ich die runAsAdministrator.ps1 mit einem Rechtsklick per PowerShell öffne, bekomme ich das

image.thumb.png.13897e6456dc5a07cab032b14b99946a.png

 

 

Wenn ich das Programm über ISE starte, bekomme ich auch 2 Fehler angezeigt, es läuft aber ohne Passwort Abfrage durch

Get-Content : Es wurde kein Positionsparameter gefunden, der das Argument "ConvertFrom-SecureString" akzeptiert.
In C:\tools\usv_shutdown\runasAdministrator.ps1:6 Zeichen:13
+ $password = Get-Content $File  ConvertFrom-SecureString
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-Content], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.GetContentCommand
 
New-Object : Für "PSCredential" und die folgende Argumenteanzahl kann keine Überladung gefunden werden: "2".
In C:\tools\usv_shutdown\runasAdministrator.ps1:8 Zeichen:15
+ ... redential = New-Object System.Management.Automation.PsCredential($use ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodException
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

 

 

vor 29 Minuten schrieb testperson:

Ansonsten teste es einfach erstmal mit Zugangsdaten im Plaintext. Wenn das läuft, den nächsten Step machen.

Hab ich mal so umgesetzt:

$File="C:\tools\usv_shutdown\user.pwd"
$password = "HierDasPasswortDenken"
#erzeugt die Credentials
$credential = New-Object System.Management.Automation.PsCredential($user,$password)

und auch mal mit

$credential = New-Object System.Management.Automation.PsCredential($user,"HierDasPasswortDenken")

 

In beiden Fällen ist es so wie vorher. Ich bekomme in der ISE einen Fehler (siehe unten) und wenn ich die CMD-Datei oder die ps1 Datei per rechtsklick starte, bekomme ich wieder die Abfrage.

New-Object : Für "PSCredential" und die folgende Argumenteanzahl kann keine Überladung gefunden werden: "2".
In C:\tools\usv_shutdown\runasAdministrator.ps1:8 Zeichen:15
+ ... redential = New-Object System.Management.Automation.PsCredential($use ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodException
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

 

Grüße!

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...