18/12/2024

PowerShell

PowerShell : convertir PS1 en EXE (exécutable)

I. Présentation

Il peut s'avérer utile de compiler un script PowerShell en exécutable afin d'en faire un véritable programme, capable de s'exécuter en autonomie sans passer par la console PowerShell. Cela est d'autant plus vrai lorsque l'on souhaite créer une application en PowerShell, basée sur WPF par exemple.

Dans ce tutoriel, nous allons voir comment convertir un fichier PS1 en EXE, à l'aide d'un outil gratuit nommé "Ps1 To Exe".

Avant de continuer, téléchargez le logiciel : PS1 To Exe

II. PS1 To Exe

Une fois l'installeur téléchargé, installez le logiciel qui s'avère assez léger. Il va falloir ouvrir dans le logiciel le script PowerShell que vous souhaitez convertir.

Pour cela, cliquez sur le bouton "Open" et ouvrez votre fichier PS1.

À partir de ce moment-là, nous pourrions lancer directement la conversion, mais je vais vous montrer quelques options. Sur la droite, dans l'onglet "Options", vous avez l'option "Icon". Cela permet de définir un icône pour votre application, lorsque celle-ci sera visible dans l'explorateur Windows. Il ne s'agit pas de l'icône au sein de l'application, mais bien celui visible dans l'explorateur de fichiers.

Vous avez la possibilité de choisir le format de votre exécutable, à savoir 32 ou 64 bits, ainsi qu'état de la console PowerShell. Si vous souhaitez que la console PowerShell ne s'affiche pas, afin de voir uniquement votre interface graphique, sélectionnez une option avec "Windows (Invisible)".

Enfin, si vous utilisez un fichier de configuration ou tout autre fichier que vous souhaitez intégrer à l'exécutable, c'est possible ! Cliquez sur l'onglet "Embed" et cliquez sur "Add" afin de rechercher le fichier à intégrer dans l'exécutable. Il est possible d'intégrer plusieurs fichiers, mais cela impactera forcément la taille de votre exécutable.

Le bouton "Convert" va permettre de démarrer la conversion afin d'obtenir votre script au format Exe. Lorsque vous cliquez sur le bouton, vous devez indiquer le chemin où vous voulez l'enregistrer, ainsi que son nom.

Voilà, il ne reste plus qu'à utiliser votre programme ! ??

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

19 commentaires sur “PowerShell : convertir PS1 en EXE (exécutable)

  • marche pas et de plus l’exécutable créé est sniffé par malwareBytes, le mieux est encore un bon .bat

    Répondre
    • Même problème, l’exe généré est supprimé par Windows Defender.

      Répondre
      • Bonsoir,
        C’est étonnant, je viens de l’installer sur un autre PC, avec la dernière version d’ESET, aucun problème que ce soit au niveau de « PS1 to Exe » ou du script compilé en EXE. Sur mon PC avec Windows Defender, je n’ai pas rencontré de problème non plus. Avez-vous coché des options spécifiques ?
        Florian

        Répondre
        • Comment est-ce qu’on appel/utilise les fichiers inclus (embed) à partir du script powershell ?

          Répondre
  • Bonjour. Merci pour ce logiciel. Petit souci, quand je sélectionne l’option « Windows (Invisible) », le message d’erreur « Couldn’t add resources » apparaît. Par contre, avec l’option « Console (Visible) », ça fonctionne. Seb

    Répondre
    • J’ai oublié de préciser que le message d’erreur apparaît au moment de la conversion en .EXE

      Répondre
  • Cette application n’est vraiment pas recommandable pour faire ce genre de chose, plusieurs antivirus d’entreprise l’envoie balader, je ne peux vous conseiller cette outil, il est possible d’utiliser le PowerShell avec un compilateur de package voir le travail de Damien Van Robaeys (http://www.systanddeploy.com/2017/11/ps1-to-exe-generator-new-version.html).

    Pour la partie variable, je vous invite à utiliser ce petit bout de code qui vous permettra d’utiliser la racine de votre script à coup-sûr.

    #=============== Variable for use Root folder of PS1 ====================
    If ($psISE)
    {
    $currentScriptDirectory = Split-Path -Parent -Path $psISE.CurrentFile.FullPath
    }
    If (!$currentScriptDirectory)
    {
    If ($MyInvocation.MyCommand.CommandType -eq "ExternalScript")
    {
    $currentScriptDirectory = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
    }
    Else
    {
    $currentScriptDirectory = Split-Path -Parent -Path ([Environment]::GetCommandLineArgs()[0])
    }
    }
    #========================================================================

    Il existe une exception sera uniquement lorsque vous utiliserez PS2EXE de Ingo Karstein, il faudra utiliser ceci :

    $FullPathToEXE = [System.Diagnostics.Process]::GetCurrentProcess().MainModule.FileName
    $currentScriptDirectory = [System.IO.Path]::GetDirectoryName($FullPathToEXE)
    #le chemin racine sera la variable $CurrentScriptPath

    Bien à vous

    Répondre
  • bonjour à tous, je rencontre un soucis lorsque je souhaites avoir le répertoire racine en variable et de rajouter les fichiers générés dans ce répertoire.

    merci de vos retours.

    cordialement.

    Répondre
  • ça fonctionne très bien.

    Effectivement l’antivirus râle… Mais rien d’étonnant, on exécute un programme non signé qui sort de nulle part. Je dirai même, heureusement que l’antivirus râle !

    Faites une petite exclusion dans votre antivirus et le tour est joué. 😉

    Petite question : Je suis tenté d’utiliser l’outil pour compiler des scripts d’installation de logiciels et d’embarquer des identifiants à privilèges dans celui-ci.

    Est-ce que cela est raisonnable ? Est-il facile de casser le programme généré ?

    Cordialement,

    Répondre
    • Bonjour Thibault,
      J’ai également eu des alertes d’antivirus de mon côté, y compris avec d’autres méthodes que cet outil pour convertir un PS1 en EXE. Je crois qu’il faut faire avec et faire une exclusion sur l’exécutable du script, comme tu l’as dit. Cela fait plusieurs années que j’utilise cette méthode personnellement. Je ne sais pas dans quelle mesure il est facile ou non de reconvertir l’EXE en PS1, mais je ne pense pas que ce soit simple ! Je suis preneur aussi de retour à ce sujet 🙂

      Répondre
      • Hello avec des outils de RE type dnspy j’imagine que c’est possible…

        Répondre
  • Bonjour,

    moi aussi j’ai eu ce type de problème et depuis, dans un répertoire qui est exclu de l’antivirus, je signe les exécutables avec SignTool.exe et un certificat.pfx.

    Par contre j’aurais une question: si j’ajoute un mot de passe comment pourrais-je exécuter l’exécutable en passant ce mot de passe dans une ligne de commandes ?

    Répondre
  • Bonjour ,
    Je rencontre les mêmes problèmes que vous, Je suis preneur d’un petit tutoriel concernant la signature d’un fichier exe via certificat pfx
    Merci

    Répondre
  • Cela sert à lancer un jeux ps1 en exe sur un PC? Ou alors je confond

    Répondre
    • Hello, oui tu confonds car là il s’agit de scripts PowerShell dont l’extension est « .ps1 ».

      Répondre
  • Bonjour,
    savez-vous s’il est possible de revenir en arrière ? Convertir un .exe en .ps1 ?
    Je n’ai pas sauvegardé le script powershell avant de le convertir en .exe et je me retrouve bloqué;
    Florian

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.