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 
#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()
 $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()

 

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!

 Wird bereits die PowerShell 5.0 verwendet schlägt das Script fehl (Bild 3). Es muss zusätzlich um die PS 5.0 erweitert werden! (Bild 4) 

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:

Bild 5 - EXE Details

  1. Produktversion anpassen:
    P:\Scripts\PS2EXE\verpatch\verpatch.exe "P:\Scripts\PS2EXE\sample.exe" /pv 1.0.0.0
  2. Produktnamen anpassen:
    P:\Scripts\PS2EXE\verpatch\verpatch.exe "P:\Scripts\PS2EXE\sample.exe" /s product "Andi's iT Blog Sample"
  3. Beschreibung anpassen:
    P:\Scripts\PS2EXE\verpatch\verpatch.exe "P:\Scripts\PS2EXE\sample.exe" /s desc "Andi's iT Blog Sample"
  4. Dateiversion anpassen:
    P:\Scripts\PS2EXE\verpatch\verpatch.exe "P:\Scripts\PS2EXE\sample.exe" 1.0.0.0
  5. 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:

Bild 6 - EXE Details bearbeitet

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
Hinweis: Die erweiterten EXE-Details werden natürlich wieder überschrieben ;)

Somit habe ich mein Fertiges PS1-Script in eine EXE umgewandelt …

PowerShell to EXE- Fertige EXE mit ICO und Details

Andi

 

(PS: Schon zur EUGO angemeldet? –> https://asichel.de/eugo