Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
PS2EXE — Modulo per compilare script PowerShell in eseguibili | Kitploit
Strumenti/GitHubGitHub/mscholtes/ps2exe
Generazione di PayloadScripting e AutomazioneUtilità e Framework
GitHubmscholtes/ps2exe

PS2EXE

Modulo per compilare script PowerShell in eseguibili

Vedi Repository
1.8k24763 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Repository senza IA - l'intelligenza artificiale sta uccidendo la creatività e la nostra natura!

PS2EXE

Rielaborazione del grande script di Ingo Karstein con supporto GUI. L'output e l'input GUI sono attivati con un solo interruttore, vengono generati eseguibili Windows reali. Compila solo script compatibili con PowerShell 5.x. Con interfaccia grafica opzionale Win-PS2EXE.

Versione del modulo.

Trovi la versione basata su script qui (https://github.com/MScholtes/TechNet-Gallery).

Autore: Markus Scholtes

Versione: 1.0.18

Data: 2026-06-06

Installazione

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

o scarica da qui: https://www.powershellgallery.com/packages/ps2exe/.

Utilizzo

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

oppure

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

compila "source.ps1" nell'eseguibile target.exe (se ".\target.exe" è omesso, l'output viene scritto in ".\source.exe").

Scarica lo strumento

oppure avvia Win-PS2EXE per un'interfaccia grafica con

root@kitploit:~
  Win-PS2EXE

Parametri

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 eseguibile generato ha i seguenti parametri riservati:

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.

Note

Utilizzo di PowerShell Core:

PS2EXE può essere utilizzato con PowerShell Core. Per farlo, installa il modulo PS2EXE in PowerShell Core come descritto sopra. Ma poiché .Net Core non viene fornito con un compilatore, viene utilizzato il compilatore di .Net Framework (.Net Framework e PowerShell 5.1 sono inclusi in Windows).

Per questo motivo PS2EXE può compilare solo script compatibili con PowerShell 5.1 e genera binari .Net 4.x, ma può ancora essere utilizzato direttamente su ogni sistema operativo Windows supportato senza dipendenze.

Incorporare file negli eseguibili compilati:

Con il parametro -embedFiles seguito da una tabella hash con percorsi di file, quei file verranno incorporati nell'eseguibile compilato. All'avvio dell'eseguibile, quei file verranno scritti su disco nei percorsi specificati, ad esempio -embedFiles @{'Targetfilepath1'='Sourcefilepath1';'Targetfilepath2'='Sourcefilepath2'}. I nomi dei file sorgente devono essere univoci. Sono consentiti percorsi assoluti e relativi. Per i percorsi di destinazione, un percorso relativo che inizia con '.\' viene interpretato come relativo all'eseguibile, senza il '.\' iniziale come relativo al percorso corrente in fase di esecuzione. Le directory vengono create automaticamente all'avvio se necessario. Nel percorso di destinazione, le variabili d'ambiente nella notazione cmd.exe come %TEMP% o %APPDATA% vengono espanse in fase di esecuzione. Un fallimento nella creazione di uno dei file incorporati fermerà immediatamente l'esecuzione dell'eseguibile compilato.

Elenco di cmdlet non implementati:

I comandi di input/output di base hanno dovuto essere riscritti in C# per PS2EXE. Non sono implementati Write-Progress in modalità console (troppo lavoro) e Start-Transcript/Stop-Transcript (nessuna implementazione di riferimento adeguata da parte di Microsoft).

Formattazione dell'output in modalità GUI:

Per impostazione predefinita in PowerShell, gli output dei cmdlet sono formattati riga per riga (come un array di stringhe). Quando il tuo comando genera 10 righe di output e usi l'output GUI, appariranno 10 finestre di messaggio ciascuna in attesa di un OK. Per evitarlo, invia il tuo comando al cmdlet Out-String. Questo convertirà l'output in un array di stringhe con 10 righe, e tutto l'output verrà mostrato in un'unica finestra di messaggio (ad esempio: dir C:\ | Out-String).

File di configurazione:

PS2EXE può creare file di configurazione con il nome dell'eseguibile generato + ".config". Nella maggior parte dei casi questi file di configurazione non sono necessari, sono un manifest che indica quale versione di .Net Framework dovrebbe essere utilizzata. Poiché di solito utilizzerai l'attuale .Net Framework, prova a eseguire il tuo eseguibile senza il file di configurazione.

Elaborazione dei parametri:

Gli script compilati elaborano i parametri come lo script originale. Una restrizione deriva dall'ambiente Windows: per tutti gli eseguibili, tutti i parametri hanno il tipo STRING, se non c'è una conversione implicita per il tuo tipo di parametro, devi convertire esplicitamente nel tuo script. Puoi anche inviare contenuto tramite pipe all'eseguibile con la stessa restrizione (tutti i valori inviati tramite pipe hanno il tipo STRING).

Sicurezza delle password:

Non memorizzare mai le password nel tuo script compilato! Si può semplicemente decompilare lo script con il parametro -extract. Per esempio

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

decompilerà lo script memorizzato in Output.exe. E nota: lo script (intenzionalmente) è memorizzato in testo chiaro nell'eseguibile!

Variabili dello script:

Poiché PS2EXE converte uno script in un eseguibile, le variabili relative allo script non sono più disponibili. La variabile $MyInvocation è impostata su altri valori rispetto a uno script. In particolare la variabile $PSScriptRoot è vuota - puoi usare $ScriptRoot come sostituto.

Puoi ottenere $PSScriptRoot indipendentemente dal fatto che sia compilato o meno con la seguente riga di codice:

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

Finestra in background in modalità -noConsole:

Quando una finestra esterna viene aperta in uno script con modalità -noConsole (ad esempio per Get-Credential o per un comando che necessita di una shell cmd.exe), la finestra successiva viene aperta in background.

Il motivo è che alla chiusura della finestra esterna, Windows cerca di attivare la finestra principale. Poiché lo script compilato non ha finestra, viene attivata la finestra principale dello script compilato, normalmente la finestra di Explorer o PowerShell.

Per aggirare il problema, $Host.UI.RawUI.FlushInputBuffer() apre una finestra invisibile che può essere attivata. La chiamata successiva di $Host.UI.RawUI.FlushInputBuffer() chiude questa finestra (e così via).

L'esempio seguente non aprirà più una finestra in background come farebbe una singola chiamata di "ipconfig | Out-String":

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

Modifiche:

1.0.18 - 2026-06-06

  • variabile predefinita $ScriptRoot come sostituto di $PSScriptRoot
  • nuova versione di Win-PS2EXE

1.0.17 / 2025-08-21

  • nuovo parametro -embedFiles per incorporare file nell'eseguibile compilato

1.0.16 / 2025-07-20

  • nuovo parametro -conHost per forzare l'avvio degli eseguibili compilati in Conhost invece di Windows Terminal

1.0.15 / 2025-01-05

  • se utilizzato solo in PowerShell Core, il modulo non deve essere installato anche in PowerShell 5.1

1.0.14 / 2024-09-15

  • nuovo parametro -? per gli eseguibili compilati per mostrare la guida dello script PowerShell originale
  • in modalità GUI, i titoli delle finestre sono il titolo dell'applicazione (quando impostato durante la compilazione con il parametro -title)

1.0.13 / 2023-09-26

  • ora [ e ] sono supportati nel nome della directory dello script
  • il file sorgente può essere più grande di 16 MB (per chi ne avesse bisogno)
  • nuovo campo di testo per parametri aggiuntivi in Win-PS2EXE

1.0.12 / 2022-11-22

  • nuovo parametro -winFormsDPIAware per supportare il ridimensionamento per WinForms in modalità noConsole (solo Windows 10 o successivi)

1.0.11 / 2021-11-21

  • corretto errore per password più lunghe di 24 caratteri
  • nuovo parametro -DPIAware per supportare il ridimensionamento in modalità noConsole
  • nuovo parametro -exitOnCancel per fermare l'esecuzione del programma su annullamento nelle finestre di input (solo in modalità noConsole)

1.0.10 / 2021-04-10

  • il parametro outputFile ora accetta una cartella di destinazione (senza nome file)

1.0.9 / 2021-02-28

  • nuovo parametro UNICODEEncoding per l'output in UNICODE
  • modificato il parametro debug in prepareDebug
  • finalmente osato utilizzare parametri avanzati

1.0.8 / 2020-10-24

  • rifattorizzato

1.0.7 / 2020-08-21

  • correzione di bug per barre di progresso simultanee in una pipeline

1.0.6 / 2020-08-10

  • il prompt per la scelta si comporta ora come PowerShell (solo modalità console)
  • supporto (limitato) per PowerShell Core (avvia Windows PowerShell in background)
  • corretta elaborazione di valori di parametri negativi
  • supporto per barre di progresso animate (solo modalità noConsole)

1.0.5 / 2020-07-11

  • supporto per barre di progresso annidate (solo modalità noConsole)

1.0.4 / 2020-04-19

  • Application.EnableVisualStyles() come predefinito per applicazioni GUI, nuovo parametro -noVisualStyles per prevenirlo

1.0.3 / 2020-02-15

  • file convertiti da UTF-16 a UTF-8 per consentire git diff
  • ignorare i tasti di controllo nella richiesta di stringa sicura in modalità console

1.0.2 / 2020-01-08

  • aggiunti esempi su github

1.0.1 / 2019-12-16

  • corretto problema "larghezza finestra illimitata per finestre GUI" in ps2exe.ps1 e Win-PS2EXE

1.0.0 / 2019-11-08

  • prima versione stabile del modulo

0.0.0 / 2019-09-15

  • sperimentale