Hallo Leser,
heute möchte ich die Frage beantworten dich mich des Öfteren erreicht hat: „Wie machst du aus deinem PowerShell-Skript eine ausführbare EXE-Datei?“.
Ausgangslage ist eine kleines Script auf meinem PC welches ein Fenster anzeigen lässt (Bild 1):
#Script dient als Beispiel für PS2EXE" [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") [void][reflection.assembly]::Load("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") [void][reflection.assembly]::Load("System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") [void][reflection.assembly]::Load("System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") [void][reflection.assembly]::Load("System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") [void][reflection.assembly]::Load("System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") [void][reflection.assembly]::Load("System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") [void][reflection.assembly]::Load("System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") [void][reflection.assembly]::Load("System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") [void][reflection.assembly]::Load("System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") #Eine Funktion für den Button erstellen function ende { $Fenster1.Close() } #Ein Fenster Erstellen $Fenster1 = New-Object System.Windows.Forms.Form $Fenster1.Size = New-Object System.Drawing.Size(400,400) $Fenster1.MaximumSize = "400,400" $Fenster1.MinimumSize = "400,400" $Fenster1.Text = "Fenster als Beiepiel" $Fenster1.StartPosition = "CenterScreen" $Fenster1.BackColor = "#B2E4FF" $Fenster1.Icon = $Icon $Fenster1.Font = $Font $Fenster1.WindowState = "Normal" #Ein Button in dem Fenster erstellen $Ende = New-Object System.Windows.Forms.Button $Ende.Location = New-Object System.Drawing.Size(140,125) $Ende.Size = New-Object System.Drawing.Size(100,100) $Ende.Text = "Fenster schließen" $Ende.TabIndex = 5 $Ende.BackColor = "white" $Ende.Add_Click({ende}) $Fenster1.Controls.Add($Ende) #Fenster anzeigen lassen [System.Windows.Forms.Application]::Run($Fenster1) [System.Windows.Forms.Application]::EnableVisualStyles() [System.Windows.Forms.Application]::DoEvents() $Fenster1.Add_Shown({$Fenster1.Activate()})
Das Script liegt im Ordner P:\Scripts\PS2Exe\sample.ps1.
Folgendes wird zusätzlich benötigt:
Im Scriptverzeichnis existiert zudem für jedes der beiden Tools ein Unterverzeichnis.
PowerShell to EXE – der erste Schritt
Damit ich nun die PS1 zu einer EXE-zaubern kann muss ich ebenfalls ein PowerShell-Script ausführen (Bild 2):
P:\Scripts\PS2EXE\PS2EXE_0.5.0.0.0\ps2exe.ps1 -inputFile P:\Scripts\PS2EXE\sample.ps1 -outputFile P:\Scripts\PS2EXE\sample.exe -sta -noConsole -runtime40 -verbose -x64
Damit ist die EXE erstellt und funktioniert!
Attribute zur EXE Datei hinzufügen – Schritt 2
Damit das EXE-File auch um zusätzliche Attribute erweitert werden kann benötige ich das zweite Tool. Zunächst sieht es folgendermaßen aus:
- Produktversion anpassen:
P:\Scripts\PS2EXE\verpatch\verpatch.exe "P:\Scripts\PS2EXE\sample.exe" /pv 1.0.0.0
- Produktnamen anpassen:
P:\Scripts\PS2EXE\verpatch\verpatch.exe "P:\Scripts\PS2EXE\sample.exe" /s product "Andi's iT Blog Sample"
- Beschreibung anpassen:
P:\Scripts\PS2EXE\verpatch\verpatch.exe "P:\Scripts\PS2EXE\sample.exe" /s desc "Andi's iT Blog Sample"
- Dateiversion anpassen:
P:\Scripts\PS2EXE\verpatch\verpatch.exe "P:\Scripts\PS2EXE\sample.exe" 1.0.0.0
- Copyright anpassen:
P:\Scripts\PS2EXE\verpatch\verpatch.exe "P:\Scripts\PS2EXE\sample.exe" /s (c) "Andi's iT Blog"
Damit schaut das ganze wie folgt aus:
EXE mit ICON File erstellen – Optional Schritt 3
Wer jetzt noch gern ein ICON an seiner neuen EXE-Datei hätte muss eine Kleinigkeit beachten. Bei mir musste die ICO-Datei zusätzlich im Homedrive liegen, das bekommt man mit folgendem Befehl heraus:
echo %homedrive%
Hier liegt bei mir noch die ICO des Out of Office Tools. Nun verwende ich erneut den Befehl aus Schritt 1 leicht abgeändert:
P:\Scripts\PS2EXE\PS2EXE_0.5.0.0.0\ps2exe.ps1 -inputFile P:\Scripts\PS2EXE\sample.ps1 -outputFile P:\Scripts\PS2EXE\sample.exe -sta -noConsole -runtime40 -verbose -x64 -iconFile icon.ico
Somit habe ich mein Fertiges PS1-Script in eine EXE umgewandelt …
Andi
(PS: Schon zur EUGO angemeldet? –> https://asichel.de/eugo
Hallo Hr. Sichel.
Ich habe eine *.exe die mit PowerShell-Studio von Sapien erstellt wurde und sollte ich was dran ändern.
Leider ist die Person der diese Ausführbare-Datei erstellt hat, nicht mehr im Unternehmen.
PS-Studio habe ich mir gekauft, doch trotzdem kann ich die Datei damit nicht öffnen. Warum?
Können Sir mir freundlicherweise weiterhelfen?
Gibt es auch ein Tool wo mit PowerShell 7 auf Win10 zurechtkommt?
Funktioniert leider nicht mit der aktuellen Windows 10 Version
Es kommt die Meldung: „THE POWERSHELL VERSION IS UNKNOWN!“
Kann ich das mit der aktuellen Version durch Anpassung des Skripts verwenden?
Hallo.
ein sehr informativer Beitrag. ich habe eine Frage dazu:
Wenn ein PS-Script auf Module zugreift, werden diese dann in die erstellte EXE-Datei mit „hineinkompiliert“?
Hallo Andi,
super Beschreibung.
Bei mit klappt alles, bis auf die Änderung des Copyright.
Das script kommt mit dem Parameter (c) nicht klar…
Truotzdem Danke.
Anbei die korrekte Syntax zum Copyright-Schalter. Anstatt „(c)“ muss „copyright“ als Schalter genutzt werden.
/s copyright „(c) 2017“
[…] Beitrag PowerShell to EXE – So entstehen meine Tools! erschien zuerst auf Andi's iT […]
Vielen Dank für den Beitrag! Sehr interessant. Die Frage wie man ein ps1 Script in eine .exe umwandelt hat mich schon öfters interessiert. Ich werde das demnächst auf jeden Fall mal testen.
Sehr informativ :-) Das werde ich auch mal so ausprobieren.