Insbesondere für Administratoren ist die PowerShell ein mächtiges Werkzeug und löst nach und nach die eher rudimentären Batch-Skripte ab. Komplexe Programmabläufe und sogar Benutzeroberflächen lassen sich hier nutzen. So kommt es, dass an manchen Stellen ein „schlankes“ PowerShell-Skript einem „vollwertigen“ Programm vorgezogen wird. Insbesondere kleinere Aufgaben, die eher um ein Hauptprogramm herum ablaufen, können so schnell umgesetzt werden. Das jeder sofort sieht, dass es sich um ein anpassbares PowerShell-Skript handelt, will man aber nicht unbedingt. Wie man aus einem PowerShell-Skript eine exe-Datei erstellt erfährst du in diesem Artikel!
Es gibt in allen möglichen PowerShell-Editoren die Möglichkeit zum Export als Exe-Datei. Die meisten davon stelle ich im Folgenden vor. Angefangen mit der Methode, die am einfachsten ist, wenn du keinen gesonderten Editor nutzen willst, sondern deine Skripte z. B. einfach in Notepad++ editierst.
PS2EXE – Schnellste kostenlose Methode um ein PowerShell-Skript in eine Exe-Datei umzuwandeln!
„PowerShell To Exe“ bzw. „PS2EXE“ ist die einfachste und zugleich eine kostenlose Möglichkeit direkt aus der PowerShell-Konsole die Konvertierung zur Exe-Datei vorzunehmen. Es handelt sich hierbei um ein Modul für PowerShell, das man installiert und danach in der PowerShell nutzen kann.
Die Installation des PowerShell-Moduls nimmt man so vor:
1 |
Install-Module ps2exe |
Eine PowerShell-Datei konvertiert man damit wie folgt in eine Exe-Datei:
1 |
Invoke-ps2exe C:\script.ps1 C:\script.exe |
Eine Exe-Datei wieder in ein PowerShell-Skript verwandeln kann man mit diesem Befehl:
1 |
script.exe -extract: C:\script.ps1 |
PowerShell-Skript als Exe-Datei mit IExpress 2.0 speichern
Ein Tool von Microsoft, welches zum Packen von Dateien bzw. Softwarepaketen gedacht ist, kann ebenfalls benutzt werden um PowerShell-Skripte in Exe-Dateien zu verwandeln. Das beste daran ist, dass es ebenfalls kostenlos und bereits in Windows enthalten ist. Das Tool packt alle benötigten Dateien für das PowerShell-Skript zusammen in eine Datei. Dazu müssen folgende, leider recht umfangreiche, Punkte abgearbeitet werden:
- Du musst „IExpress“ als Administrator öffnen. Drücke hierzu die Tasten „Windows“ + „R“ gleichzeitig, um das Dialogfeld „Ausführen“ zu öffnen, gib „iexpress“ ein und drücke die Tasten „Strg“ + „Umschalt“ + „Eingabe“. Noch einfacher geht es sogar, wenn du einfach mit einem Druck auf die „Windows“-Taste das Startmenü öffnest und dort nach „iexpress“ suchst und dann per Rechtsklick auf das gefundene Programm das Kontextmenü öffnest und auf „Als Administrator ausführen“ klickst.
- Wähle dann auf der Willkommensseite von IExpress die Option „Neue Self-Extraction Directive-Datei erstellen“ und klicke auf „Weiter“, um das Paket zu konfigurieren. Die „Self Extraction Directive“-Datei (SED) ist eine Konfigurationsdatei und steuert die Optionen, die bei der Erstellung eines Installationspakets verwendet werden.
- Wähle danach die Option „Dateien extrahieren und einen Installationsbefehl ausführen“ und klicke wieder auf „Weiter“. Wenn du ein Software-Installationsprogramm erstellst, extrahiert diese Option die Dateien, die du in das Paket aufnehmen möchtest. Mit dieser Option kannst du auch einen benutzerdefinierten Befehl zur Ausführung des Skripts schreiben.
- Gib nun einen selbst ausgewählten Pakettitel ein und klicke auf „Weiter“. Der Pakettitel wird in allen Eingabeaufforderungen angezeigt, die der Benutzer während der Installation sieht. Der Pakettitel gilt nur, wenn du ein Software-Installationsprogramm erstellst. In diesem Fall spielt der Titel keine Rolle.
- Wähle dann „Keine Eingabeaufforderung“. Wenn du „Keine Eingabeaufforderung“ wählst, wird der Benutzer nicht mit einem unnötigen Dialogfeld konfrontiert, wenn er die EXE-Datei ausführt.
- Wenn du das Paket für ein Projekt erstellst, für das ein Endbenutzer-Lizenzvertrag (EULA) erforderlich ist, kannst du eine Lizenz hinzufügen, die angezeigt wird, wenn die EXE-Datei ausgeführt wird. In den meisten Fällen wählt man jedoch wohl die Option „Lizenz nicht anzeigen“ und klicke auf „Weiter“.
- Klicke nun auf „Hinzufügen“ und suche nach allen PowerShell-Skripten, die du in diese EXE-Datei aufnehmen möchtest. Achte darauf, dass das Hauptskript, das du aufrufen möchtest, sowie alle abhängigen PowerShell-Skripte und andere Dateien, auf die die Skripte verweisen, enthalten sind.
- Gib im Fenster „Zu startendes Programm installieren“ mit dem Parameter „Datei“ den Pfad zur „powershell.exe“ an. Stelle außerdem sicher, dass du den „ExecutionPolicy“-Parameter auf „Bypass“ setzt, um sicherzustellen, dass eventuell in Windows vorkonfigurierte Ausführungsrichtlinien die PowerShell-Skriptausführung nicht verhindern können. Das könnte beispielsweise so aussehen:
powershell.exe -ExecutionPolicy Bypass -File Rename.ps1
- Als nächstes kannst du festlegen, wie sich die EXE-Fenster bei der Ausführung verhalten sollen. Wenn die EXE im Hintergrund ausgeführt werden soll, wählst du „Versteckt“ und klickst auf „Weiter“. Versteckt ist wahrscheinlich das am häufigsten gewünschte Fensterverhalten, da man ja nicht will, dass der Endbenutzer alles sieht, was das Skript macht.
- Da du nur eine EXE im Hintergrund ausführst, ist es nicht notwendig, eine Endmeldung einzufügen. Wähle also „Keine Meldung“ und „Weiter“.
- Definiere nun den Pfad zu der EXE-Datei, die du erstellen möchtest. Hier kannst du auch eine Reihe weiterer Optionen aktivieren. Klicke anschließend auf „Weiter“. Wenn deine EXE-Datei im Hintergrund läuft, lässt du die Option „Hide File Extracting Progress Animation from User“ deaktiviert.
- Zur Unterstützung langer Dateinamen während des Extraktionsprozesses, wenn die EXE ausgeführt, wird „Store Files using Long File Name inside Package“ (Dateien mit langem Dateinamen im Paket speichern) gewählt. Die Option sollte nur deaktiviert sein, wenn das Paket unter Windows 95 genutzt werden soll.
- Wenn du möchtest, dass die EXE-Datei nach Abschluss des PowerShell-Skripts einen Neustart auslöst, kannst du „Immer neu starten“ auswählen. Nachdem du eine Option ausgewählt hast, klicke wieder auf „Weiter“.
- Wähle nun „Save Self Extraction Directive (SED) file“ und klicke erneut auf „Weiter“. Wenn du eine SED-Datei speicherst, kannst du alle Optionen, die du in diesem Assistenten angegeben hast, zu einem späteren Zeitpunkt ändern. Die SED-Datei enthält die Antworten auf alle bisher eingegebenen Werte. Man kann diese also als Template verwenden!
- Abschließend musst du das Paket nur noch kompilieren. Klicke auf „Weiter“ und du siehst ein Prozessprotokoll. Um die Erstellung des Pakets abzuschließen, klicke auf „Fertig stellen“ und das war es.
Sonderfall: Ausführung des PowerShell-Skriptes mit Administratorrechten
Wenn du ein Skript kompilieren möchtest, das als Administrator ausgeführt werden muss, bietet IExpress leider keine entsprechende Option, die man einfach anhaken kann. Aber es ist dennoch möglich Administratorrechte bei der Ausführung der Exe-Datei einzufordern.
Kopiere dazu vor der Ausführung von IExpress den nachstehenden Code und füge ihn oben in das Skript ein. Dieses Codeschnipsel prüft, ob das Skript als Administrator ausgeführt wird. Ist dies nicht der Fall, wird das Skript automatisch geschlossen und mit Administratorrechten neu gestartet.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
param([switch]$Elevated) function Test-Admin { $currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent()) $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator) } ## Test if the script is running as admin, if not, run it again as admin if ((Test-Admin) -eq $false){ if ($elevated) { } else { try{ Start-Process powershell.exe -WindowStyle Hidden -Verb RunAs -ArgumentList ('-noprofile -file "{0}" -elevated' -f ($MyInvocation.MyCommand.Definition)) ## Window Styles : Normal, Minimized, Maximized and Hidden ## ------> THE REST OF YOUR SCRIPT GOES HERE <------ ## } catch{ exit } } exit } |
Visual Studio Code und PowerShell Pro Tools
Nach der Abkündigung der PowerShell ISE ist Visual Studio Code wohl die beste kostenlose Entwicklungsumgebung für PowerShell-Skripte. Kein Wunder also, dass es hier eine ganze Reihe von Modulen gibt, die einem das Schreiben von PowerShell-Skripten erleichtern. Ebenso enthält das Modul „PowerShell Pro Tools“ auch eine Funktion um das PowerShell-Skript als Exe-Datei abzuspeichern.
Die Installation des Moduls nimmt man in Visual Studio Code unter „Extensions“ vor und sucht hier nach „PowerShell Pro Tools“:
Das PowerShell-Skript exportiert man dann wie folgt in Visual Studio Code:
ACHTUNG: Leider ist dieses Plugin leider nicht kostenlos und man wird nach einer Lizenz gefragt!
Es gibt auch weitere auf die Entwicklung von PowerShell-Skripten spezialisierte Editoren wie z. B. das „PowerShell Studio“ vom Hersteller „Sapien“.
ISE Steroids
Wenn du gerne Skripte in der „PowerShell ISE“ schreibst, ist „ISE Steroids“ genau das Richtige für dich. Allerdings erwähne ich es als letztes Tool, da die „PowerShell ISE“ ja nicht mehr weiter entwickelt wird und von Microsoft abgekündigt wurde. Da sie aber immer noch in Windows enthalten ist, kann man diese natürlich trotzdem noch verwenden.
Bei „ISE Steroids“ handelt es sich nur um eine Erweiterung für den von Werk aus mitgelieferten Editor, die als PowerShell-Modul verpackt ist und viele Funktionen in der „PowerShell ISE“ hinzufügt. Viele davon sind sehr nützlich, aber wir schauen uns hier nur den Export als Exe-Datei an.
Die Installation nimmt man in der „PowerShell ISE“ mit folgendem Befehl vor:
1 |
Install-Module ISESteroids |
Wenn „ISE Steroids“ bereits installiert ist, öffnen du einfach die „PowerShell ISE“ um ein Skript in eine Exe-Datei umzuwandeln.
1. Führe in der integrierten Konsole den Befehl „Start-Steroids“ aus, um die Erweiterung auszuführen und das Steroids-Modul zu laden. Danach erhält der Editor viele weitere Icons um die Funktionen des Moduls nutzen zu können.
2. Öffne oder schreibe ein neues Skript im Editorfenster.
3. Klicke im Menü auf „Tools“ und dann auf „Turn Code into Exe…“ um das PowerShell-Skript als Exe-Datei abzuspeichern:
Ein weiteres, eigentlich kostenloses Tool von DELL, mit dem man PowerShell-Skripte in Exe-Dateien exportieren konnte war das Tool „PowerGUI“. Leider konnte ich dazu keinen funktionierenden Download mehr finden, weshalb ich auf dieses hier nicht weiter eingehen werde.
Fazit zum Umwandeln eines PowerShell-Skriptes in eine Exe-Datei
Wie in diesem Artikel gezeigt, gibt es viele Möglichkeiten bzw. Editoren, mit denen man ein PowerShell-Skript in eine Exe-Datei verpacken kann. Dadurch kann man zumindest nicht sehr technisch-versierte Nutzer des Skriptes davon abhalten sich Einblick in den Code des Skriptes zu verschaffen. Je nachdem was man in seinem Skript macht, kann es aber als Virus oder Malware erkannt werden und z. B. vom Windows Defender blockiert werden.