Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
PS2EXE — Module pour compiler des scripts PowerShell en exécutables | Kitploit
Outils/GitHubGitHub/mscholtes/ps2exe
Génération de PayloadsScripting et AutomatisationUtilitaires et Frameworks
GitHubmscholtes/ps2exe

PS2EXE

Module pour compiler des scripts PowerShell en exécutables

Voir le dépôt
1.8k247il y a 2 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Dépôt libre d'IA - l'intelligence artificielle tue la créativité et notre nature !

PS2EXE

Surcharge du grand script d'Ingo Karstein avec support GUI. La sortie et l'entrée GUI sont activées avec un seul interrupteur, de véritables exécutables Windows sont générés. Compile uniquement les scripts compatibles Powershell 5.x. Avec une interface graphique frontale optionnelle Win-PS2EXE.

Version du module.

Vous trouverez la version basée sur le script ici (https://github.com/MScholtes/TechNet-Gallery).

Auteur : Markus Scholtes

Version : 1.0.18

Date : 2026-06-06

Installation

root@kitploit:~
PS C:\> Install-Module ps2exe

ou téléchargez depuis ici : https://www.powershellgallery.com/packages/ps2exe/.

Utilisation

root@kitploit:~
  Invoke-ps2exe .\source.ps1 .\target.exe

ou

root@kitploit:~
  ps2exe .\source.ps1 .\target.exe

compile « source.ps1 » dans l'exécutable target.exe (si « .\target.exe » est omis, la sortie est écrite dans « .\source.exe »).

ou lancez Win-PS2EXE pour une interface graphique avec

root@kitploit:~
  Win-PS2EXE

Paramètres

root@kitploit:~
ps2exe [-inputFile] '<file_name>' [[-outputFile] '<file_name>']
       [-prepareDebug] [-x86|-x64] [-lcid <id>] [-STA|-MTA] [-noConsole] [-conHost] [-UNICODEEncoding]
       [-credentialGUI] [-iconFile '<filename>'] [-$embedFiles <hashtable>] [-title '<title>'] [-description '<description>']
       [-company '<company>'] [-product '<product>'] [-copyright '<copyright>'] [-trademark '<trademark>']
       [-version '<version>'] [-configFile] [-noOutput] [-noError] [-noVisualStyles] [-exitOnCancel]
       [-DPIAware] [-requireAdmin] [-supportOS] [-virtualize] [-longPaths]
root@kitploit:~
      inputFile = Powershell script that you want to convert to executable (file has to be UTF8 or UTF16 encoded)
     outputFile = destination executable file name or folder, defaults to inputFile with extension '.exe'
   prepareDebug = create helpful information for debugging
     x86 or x64 = compile for 32-bit or 64-bit runtime only
           lcid = location ID for the compiled executable. Current user culture if not specified
     STA or MTA = 'Single Thread Apartment' or 'Multi Thread Apartment' mode
      noConsole = the resulting executable will be a Windows Forms app without a console window
        conHost = force start with conhost as console instead of Windows Terminal (disables redirections)
UNICODEEncoding = encode output as UNICODE in console mode
  credentialGUI = use GUI for prompting credentials in console mode
       iconFile = icon file name for the compiled executable
     embedFiles = files to embed given as hash, will be extracted to key of hash, source file names must be unique
                  (e.g. -embedFiles @{'Targetfilepath'='Sourcefilepath'} )
          title = title information (displayed in details tab of Windows Explorer's properties dialog)
    description = description information (not displayed, but embedded in executable)
        company = company information (not displayed, but embedded in executable)
        product = product information (displayed in details tab of Windows Explorer's properties dialog)
      copyright = copyright information (displayed in details tab of Windows Explorer's properties dialog)
      trademark = trademark information (displayed in details tab of Windows Explorer's properties dialog)
        version = version information (displayed in details tab of Windows Explorer's properties dialog)
     configFile = write config file (<outputfile>.exe.config)
       noOutput = the resulting executable will generate no standard output (includes verbose and information channel)
        noError = the resulting executable will generate no error output (includes warning and debug channel)
 noVisualStyles = disable visual styles for a generated windows GUI application (only with -noConsole)
   exitOnCancel = exits program when Cancel or "X" is selected in a Read-Host input box (only with -noConsole)
       DPIAware = if display scaling is activated, GUI controls will be scaled if possible (only with -noConsole)
   requireAdmin = if UAC is enabled, compiled executable run only in elevated context (UAC dialog appears if required)
      supportOS = use functions of newest Windows versions (execute [Environment]::OSVersion to see the difference)
     virtualize = application virtualization is activated (forcing x86 runtime)
      longPaths = enable long paths ( > 260 characters) if enabled on OS (works only with Windows 10)

Un exécutable généré a les paramètres réservés suivants :

root@kitploit:~
-? [<MODIFIER>]     Powershell help text of the script inside the executable. The optional parameter combination
                    "-? -detailed", "-? -examples" or "-? -full" can be used to get the appropriate help text.
-debug              Forces the executable to be debugged. It calls "System.Diagnostics.Debugger.Launch()".
-extract:<FILENAME> Extracts the powerShell script inside the executable and saves it as FILENAME.
                    The script will not be executed.
-wait               At the end of the script execution it writes "Hit any key to exit..." and waits for a key to be pressed.
-end                All following options will be passed to the script inside the executable.
                    All preceding options are used by the executable itself and will not be passed to the script.

Remarques

Utilisation de Powershell Core :

PS2EXE peut être utilisé avec Powershell Core. Pour ce faire, installez simplement le module PS2EXE dans Powershell Core comme décrit ci-dessus. Mais comme .Net Core n'est pas livré avec un compilateur, le compilateur de .Net Framework est utilisé (.Net Framework et Powershell 5.1 sont inclus dans Windows).

Pour cette raison, PS2EXE ne peut compiler que des scripts compatibles Powershell 5.1 et génère des binaires .Net 4.x, mais peut toujours être utilisé directement sur chaque système d'exploitation Windows pris en charge sans dépendances.

Intégration de fichiers dans les exécutables compilés :

Avec le paramètre -embedFiles suivi d'une table de hachage avec des chemins vers des fichiers, ces fichiers seront intégrés dans l'exécutable compilé. Au démarrage de l'exécutable, ces fichiers seront écrits sur le disque aux chemins spécifiés, par ex. -embedFiles @{'Targetfilepath1'='Sourcefilepath1';'Targetfilepath2'='Sourcefilepath2'}. Les noms de fichiers source doivent être uniques. Les chemins absolus et relatifs sont autorisés. Pour les chemins cibles, un chemin relatif commençant par '.\' est interprété comme relatif à l'exécutable, sans le préfixe '.\' comme relatif au chemin actuel au moment de l'exécution. Les répertoires sont créés automatiquement au démarrage si nécessaire. Dans le chemin cible, les variables d'environnement en notation cmd.exe comme %TEMP% ou %APPDATA% sont développées au moment de l'exécution. Un échec lors de la création d'un des fichiers intégrés arrêtera immédiatement l'exécution de l'exécutable compilé.

Liste des cmdlets non implémentés :

Les commandes d'entrée/sortie de base ont dû être réécrites en C# pour PS2EXE. Ne sont pas implémentés : Write-Progress en mode console (trop de travail) et Start-Transcript/Stop-Transcript (aucune implémentation de référence appropriée par Microsoft).

Formatage de la sortie en mode GUI :

Par défaut, dans Powershell, les sorties des commandlets sont formatées ligne par ligne (sous forme de tableau de chaînes). Lorsque votre commande génère 10 lignes de sortie et que vous utilisez la sortie GUI, 10 boîtes de message apparaîtront, chacune attendant un OK. Pour éviter cela, redirigez votre commande vers la commande Out-String. Cela convertira la sortie en un tableau de chaînes avec 10 lignes, et toute la sortie sera affichée dans une seule boîte de message (par exemple : dir C:\ | Out-String).

Fichiers de configuration :

PS2EXE peut créer des fichiers de configuration portant le nom de l'exécutable généré + « .config ». Dans la plupart des cas, ces fichiers de configuration ne sont pas nécessaires ; ce sont des manifestes qui indiquent quelle version du .Net Framework doit être utilisée. Comme vous utiliserez généralement la version actuelle du .Net Framework, essayez d'exécuter votre exécutable sans le fichier de configuration.

Traitement des paramètres :

Les scripts compilés traitent les paramètres comme le script original. Une restriction vient de l'environnement Windows : pour tous les exécutables, tous les paramètres ont le type STRING. S'il n'y a pas de conversion implicite pour votre type de paramètre, vous devez convertir explicitement dans votre script. Vous pouvez même rediriger le contenu vers l'exécutable avec la même restriction (toutes les valeurs redirigées ont le type STRING).

Sécurité des mots de passe :

Ne stockez jamais de mots de passe dans votre script compilé ! On peut simplement décompiler le script avec le paramètre -extract. Par exemple

root@kitploit:~
Output.exe -extract:C:\Output.ps1

décompilera le script stocké dans Output.exe. Et remarquez : le script (intentionnellement) est stocké en texte clair dans l'exécutable !

Variables de script :

Puisque PS2EXE convertit un script en exécutable, les variables liées au script ne sont plus disponibles. La variable $MyInvocation est définie à d'autres valeurs que dans un script.

En particulier, la variable $PSScriptRoot est vide - vous pouvez utiliser $ScriptRoot comme remplacement.

Vous pouvez obtenir $PSScriptRoot indépendamment de la compilation avec la ligne de code suivante :

root@kitploit:~
if (!$PSScriptRoot) { $PSScriptRoot = $ScriptRoot }

Fenêtre en arrière-plan en mode -noConsole :

Lorsqu'une fenêtre externe est ouverte dans un script avec le mode -noConsole (par exemple pour Get-Credential ou pour une commande nécessitant un shell cmd.exe), la fenêtre suivante s'ouvre en arrière-plan.

La raison en est qu'à la fermeture de la fenêtre externe, Windows tente d'activer la fenêtre parente. Comme le script compilé n'a pas de fenêtre, la fenêtre parente du script compilé est activée à la place, normalement la fenêtre de l'Explorateur ou de Powershell.

Pour contourner ce problème, $Host.UI.RawUI.FlushInputBuffer() ouvre une fenêtre invisible qui peut être activée. L'appel suivant de $Host.UI.RawUI.FlushInputBuffer() ferme cette fenêtre (et ainsi de suite).

L'exemple suivant n'ouvrira plus de fenêtre en arrière-plan comme le ferait un simple appel de « ipconfig | Out-String » :

root@kitploit:~
$Host.UI.RawUI.FlushInputBuffer()
ipconfig | Out-String
$Host.UI.RawUI.FlushInputBuffer()

Modifications :

1.0.18 - 2026-06-06

  • variable prédéfinie $ScriptRoot comme remplacement de $PSScriptRoot
  • nouvelle version de Win-PS2EXE

1.0.17 / 2025-08-21

  • nouveau paramètre -embedFiles pour intégrer des fichiers dans l'exécutable compilé

1.0.16 / 2025-07-20

  • nouveau paramètre -conHost pour forcer le démarrage des exécutables compilés dans Conhost au lieu de Windows Terminal

1.0.15 / 2025-01-05

  • si utilisé uniquement dans Powershell Core, le module n'a pas besoin d'être installé également dans Powershell 5.1

1.0.14 / 2024-09-15

  • nouveau paramètre -? pour les exécutables compilés afin d'afficher l'aide du script Powershell original
  • en mode GUI, les titres des fenêtres sont les titres de l'application (lorsqu'ils sont définis lors de la compilation avec le paramètre -title)

1.0.13 / 2023-09-26

  • les crochets [ et ] sont désormais pris en charge dans le nom du répertoire du script
  • le fichier source peut maintenant être plus volumineux que 16 Mo (pour ceux qui en ont besoin)
  • nouveau champ de texte de paramètres supplémentaires dans Win-PS2EXE

1.0.12 / 2022-11-22

  • nouveau paramètre -winFormsDPIAware pour prendre en charge la mise à l'échelle des WinForms en mode noConsole (Windows 10 ou ultérieur uniquement)

1.0.11 / 2021-11-21

  • correction de l'erreur de mot de passe de plus de 24 caractères
  • nouveau paramètre -DPIAware pour prendre en charge la mise à l'échelle en mode noConsole
  • nouveau paramètre -exitOnCancel pour arrêter l'exécution du programme en cas d'annulation dans les boîtes de saisie (uniquement en mode noConsole)

1.0.10 / 2021-04-10

  • le paramètre outputFile accepte maintenant un dossier cible (sans nom de fichier)

1.0.9 / 2021-02-28

  • nouveau paramètre UNICODEEncoding pour produire une sortie en UNICODE
  • paramètre debug renommé en prepareDebug
  • enfin osé utiliser des paramètres avancés

1.0.8 / 2020-10-24

  • refactorisation

1.0.7 / 2020-08-21

  • correction de bogue pour les barres de progression simultanées dans une seule pipeline

1.0.6 / 2020-08-10

  • l'invite de choix se comporte désormais comme Powershell (mode console uniquement)
  • prise en charge (limitée) de Powershell Core (démarre Windows Powershell en arrière-plan)
  • correction du traitement des valeurs de paramètres négatives
  • prise en charge des barres de progression animées (mode noConsole uniquement)

1.0.5 / 2020-07-11

  • prise en charge des barres de progression imbriquées (mode noConsole uniquement)

1.0.4 / 2020-04-19

  • Application.EnableVisualStyles() par défaut pour les applications GUI, nouveau paramètre -noVisualStyles pour l'empêcher

1.0.3 / 2020-02-15

  • fichiers convertis de UTF-16 en UTF-8 pour permettre le git diff
  • ignorer les touches de contrôle dans la demande de chaîne sécurisée en mode console

1.0.2 / 2020-01-08

  • ajout d'exemples sur github

1.0.1 / 2019-12-16

  • correction du problème de « largeur de fenêtre illimitée pour les fenêtres GUI » dans ps2exe.ps1 et Win-PS2EXE

1.0.0 / 2019-11-08

  • première version stable du module

0.0.0 / 2019-09-15

  • expérimental
Télécharger l’outil