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 ! ??
marche pas et de plus l’exécutable créé est sniffé par malwareBytes, le mieux est encore un bon .bat
Bonjour Eric, ça ne marche pas, c’est-à-dire ?
Même problème, l’exe généré est supprimé par Windows Defender.
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
Comment est-ce qu’on appel/utilise les fichiers inclus (embed) à partir du script powershell ?
Bonjour, il faut s’appuyer sur « $env:p2eincfilepath » suivi du nom du fichier.
Super un grand merci
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
J’ai oublié de préciser que le message d’erreur apparaît au moment de la conversion en .EXE
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
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.
ç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,
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 🙂
Hello avec des outils de RE type dnspy j’imagine que c’est possible…
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 ?
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
Cela sert à lancer un jeux ps1 en exe sur un PC? Ou alors je confond
Hello, oui tu confonds car là il s’agit de scripts PowerShell dont l’extension est « .ps1 ».
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