Jump to content
HeizungAuf5

APC PowerChute Shutdown Script

Recommended Posts

Wozu muss der Switch heruntergefahren werden? Der sollte einen Stromausfall aushalten können und beides andere (Email und Shutdown) sollte mit der APC Software funktionieren.

Share this post


Link to post
Share on other sites
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!

Share this post


Link to post
Share on other sites

Ticket bei APC aufmachen?

Startet Powershell, wenn die APC das triggert (siehst du im Task Manager)?

Share this post


Link to post
Share on other sites

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.

 

 

Edited by PowerShellAdmin
  • Thanks 1

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

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

Edited by PowerShellAdmin

Share this post


Link to post
Share on other sites
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!

Share this post


Link to post
Share on other sites

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.

 

 

Edited by PowerShellAdmin

Share this post


Link to post
Share on other sites
Gerade eben schrieb PowerShellAdmin:

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

Wenn das Passwort auf PC1 verschlüsselt wird und auf PC2 entschlüsselt / genutzt werden soll, dann muss AFAIK ein Key genutzt werden.

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

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
Edited by PowerShellAdmin

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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 ...

 

Share this post


Link to post
Share on other sites

Ü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!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...