Compiler le PowerShell avec PS2EXE
Dire « Compiler le PowerShell » est évidemment un abus de langage. Il s’agit plutôt de le traduire en bytecode pour qu’ensuite, il soit compilé à la volée dans l’environnement d’exécution – le CLR Common Language Runtime – du Framework .Net.
PS2EXE, un script PowerShell
Il existe un script PowerShell au nom de PS2EXE sous licence MS-PL qui permet de compiler vos scripts PowerShell afin de les transformer en fichiers exécutables. L’éditeur fournit un fichier ZIP à décompresser dans lequel vous trouverez le fichier callPS2EXE.bat qui s’utilise de la manière suivante, en mode ligne de commandes :
callPS2EXE.bat monscript.ps1 monexe.exe -runtime50 -x64
Vous pouvez aussi exécuter le script PowerShell dans l’environnement d’édition du Windows PowerShell ISE ou à partir de l’interpréteur PowerShell :
./ps2exe.ps1 -inputFile kill.ps1 -outputFile kill.exe -icon kill.ico
Pour compiler un script PowerShell affichant une interface graphique, vous devez modifier la dernière du fichier callPS2EXE comme suit :
powershell.exe -command "&'.\ps2exe.ps1' -sta -noconsole %cmd%"
Tous les commutateurs de la commande ps2exe.ps1 sont accessibles en tapant à partir de la ligne de commandes :
powershell.exe -command "&'.\ps2exe.ps1'
Utilisation et paramètres de la commande ps2exe.ps1
Vous pouvez notamment préciser le mode 64 bits, la version du runtime .Net. J’ai découvert le paramètre -icon dans les exemples d’utilisation fournis dans le code du fichier createDemo.bat !
powershell.exe -command "&'.\ps2exe.ps1' [-inputFile] '' [-outputFile] '' [-verbose] [-debug] [-runtime20] [-runtime30]" inputFile = PowerShell script that you want to convert to EXE outputFile = destination EXE file name verbose = Output verbose informations - if any debug = generate debug informations for output file debug = generate debug informations for output file runtime20 = this switch forces PS2EXE to create a config file for the generated EXE that contains the "supported .NET Framework versions" setting for .NET Framework 2.0 for PowerShell 2.0 runtime30 = this switch forces PS2EXE to create a config file for the generated EXE that contains the "supported .NET Framework versions" setting for .NET Framework 4.0 for PowerShell 3.0 runtime40 = this switch forces PS2EXE to create a config file for the generated EXE that contains the "supported .NET Framework versions" setting for .NET Framework 4.0 for PowerShell 4.0 runtime50 = this switch forces PS2EXE to create a config file for the generated EXE that contains the "supported .NET Framework versions" setting for .NET Framework 4.0 for PowerShell 5.0 lcid = Location ID for the compiled EXE. Current user culture if not specified. x86 = Compile for 32-bit runtime only x64 = Compile for 64-bit runtime only sta = Single Thread Apartment Mode mta = Multi Thread Apartment Mode noConsole = The resulting EXE file starts without a console window just like a Windows Forms app.