Compiler le PowerShell avec PS2EXE

Compiler le PowerShellDire « 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.

Scripting  / Formateur Powershell Formation PowerShell PowerShell PS2EXE