PowerShell Skript mit Batch ausführen

PowerShell ist wohl für jeden technischen IT´ler, der auch mit Microsoft zu tun hat, ein nützliches Werkzeug um gewisse Aktionen zu automatisieren. Denn als IT´ler ist man ja in der Regel eher faul. Warum also Sachen mehrmals tun, wenn sie sich auch automatisieren lassen. Zugegebenermaßen ist das Ausführen eines PS Skripts außerhalb der Konsole nicht wirklich intuitiv. Gerade wenn es schnell gehen soll und erst eine PS Konsole geöffnet werden muss, um das Skript auszuführen, wünscht man sich eine schnellere Lösung. Diese kann darin bestehen, ein Skript direkt über eine Batch Datei zu starten. Diese muss dann nur noch ausgeführt werden und gut ist. Hört sich im ersten Moment vielleicht einfacher an als es wirklich ist.


Es gibt doch ein paar Dinge zu berücksichtigen. Dazu gehören zum Beispiel:

  • Was ist mit der Execution Policy für PS Skripte?
  • Was ist, wenn das Skript mit administrativen Rechten gestartet werden muss?
  • Wie kann das Skript aufgebaut werden, dass es nicht ständig umgebaut werden muss?

Der erste Schritt ist relativ einfach. Das Skript wird ohne großes TamTam aufgerufen.

PowerShell Batch cmd

PowerShell.exe -Command "& 'C:\Temp\script.ps1'"

Um das Batch auch für andere Skripte nutzen zu können, ohne jedes Mal den Inhalt zu ändern, können Variablen verwendet werden. Die cmd Datei benötigt dann den selben Namen wie das PowerShell Skript und muss im gleichen Verzeichnis liegen. Über Verknüpfungen lässt sich das cmd von jedem beliebigen Pfad ausführen.

PowerShell Batch cmd

PowerShell.exe -Command "& '%~dpn0.ps1'"

Standardmäßig lassen sich PowerShell Skripte nicht ausführen, da dies von der Execution Policy verhindert wird. Um dies gleich beim Aufruf zu berücksichtigen, lässt sich die Execution Policy im Batch entsprechend setzen.

PowerShell Batch cmd

PowerShell.exe -ExecutionPolicy Bypass -Command "& '%~dpn0.ps1'"

Ein weiterer Anwendungsfall besteht darin, dass PS Skript mit erhöhten Rechten auszuführen. Natürlich lässt sich das cmd administrativ ausführen. Solche „Intelligenzen“ lassen sich jedoch auch direkt ins cmd packen. Wird das cmd dann ohne administrative Rechte ausgeführt, kommt ein UAC Prompt um die benötigten Rechte zu erteilen.

powershell_cmd04

PowerShell.exe -Command "& {Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy Bypass -File ""%~dpn0.ps1""' -Verb RunAs}"

Mit diesen Möglichkeiten der PowerShell Batch ist es deutlich einfacher, ein Skript schnell per Doppelklick zu starten, um es so ausführen zu lassen wie es nötig ist.