Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
PS2EXE — Módulo para compilar scripts de PowerShell a ejecutables. | Kitploit
Herramientas/GitHubGitHub/mscholtes/ps2exe
Generación de PayloadsScripting y AutomatizaciónUtilidades y Frameworks
GitHubmscholtes/ps2exe

PS2EXE

Módulo para compilar scripts de PowerShell a ejecutables.

Ver Repositorio
1.8k247hace 2 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Repositorio libre de IA - la inteligencia artificial está matando la creatividad y nuestra naturaleza

PS2EXE

Refinamiento del gran script de Ingo Karstein con soporte GUI. La salida y entrada GUI se activan con un solo interruptor, se generan ejecutables reales de Windows. Compila solo scripts compatibles con PowerShell 5.x. Con interfaz gráfica opcional Win-PS2EXE.

Versión del módulo.

Puede encontrar la versión basada en script aquí (https://github.com/MScholtes/TechNet-Gallery).

Autor: Markus Scholtes

Versión: 1.0.18

Fecha: 2026-06-06

Instalación

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

o descárguelo desde aquí: https://www.powershellgallery.com/packages/ps2exe/.

Uso

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

o

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

compila "source.ps1" en el ejecutable target.exe (si se omite ".\target.exe", la salida se escribe en ".\source.exe").

o inicie Win-PS2EXE para una interfaz gráfica con

root@kitploit:~
  Win-PS2EXE

Parámetros

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 = Script de PowerShell que desea convertir a ejecutable (el archivo debe estar codificado en UTF8 o UTF16)
     outputFile = Nombre o carpeta del archivo ejecutable de destino; por defecto, inputFile con extensión '.exe'
   prepareDebug = Crea información útil para la depuración
     x86 or x64 = Compilar solo para tiempo de ejecución de 32 o 64 bits
           lcid = ID de ubicación para el ejecutable compilado. Se usa la configuración regional del usuario actual si no se especifica
     STA or MTA = Modo 'Single Thread Apartment' o 'Multi Thread Apartment'
      noConsole = El ejecutable resultante será una aplicación de Windows Forms sin ventana de consola
        conHost = Forzar inicio con conhost como consola en lugar de Windows Terminal (deshabilita redirecciones)
UNICODEEncoding = Codificar la salida como UNICODE en modo consola
  credentialGUI = Usar GUI para solicitar credenciales en modo consola
       iconFile = Nombre del archivo de icono para el ejecutable compilado
     embedFiles = Archivos a incrustar dados como hash, se extraerán según la clave del hash, los nombres de archivo de origen deben ser únicos
                  (p. ej., -embedFiles @{'RutaArchivoDestino'='RutaArchivoOrigen'} )
          title = Información del título (se muestra en la pestaña de detalles del cuadro de diálogo de propiedades del Explorador de Windows)
    description = Información de descripción (no se muestra, pero se incrusta en el ejecutable)
        company = Información de la empresa (no se muestra, pero se incrusta en el ejecutable)
        product = Información del producto (se muestra en la pestaña de detalles del cuadro de diálogo de propiedades del Explorador de Windows)
      copyright = Información de copyright (se muestra en la pestaña de detalles del cuadro de diálogo de propiedades del Explorador de Windows)
      trademark = Información de marca comercial (se muestra en la pestaña de detalles del cuadro de diálogo de propiedades del Explorador de Windows)
        version = Información de versión (se muestra en la pestaña de detalles del cuadro de diálogo de propiedades del Explorador de Windows)
     configFile = Escribir archivo de configuración (<outputfile>.exe.config)
       noOutput = El ejecutable resultante no generará salida estándar (incluye canalización verbose e información)
        noError = El ejecutable resultante no generará salida de error (incluye canalización warning y depuración)
 noVisualStyles = Deshabilitar estilos visuales para una aplicación GUI de Windows generada (solo con -noConsole)
   exitOnCancel = Sale del programa cuando se selecciona Cancelar o "X" en un cuadro de entrada Read-Host (solo con -noConsole)
       DPIAware = Si la escala de pantalla está activada, los controles GUI se escalarán si es posible (solo con -noConsole)
   requireAdmin = Si UAC está habilitado, el ejecutable compilado se ejecuta solo en contexto elevado (aparece el diálogo de UAC si es necesario)
      supportOS = Utiliza funciones de las versiones más recientes de Windows (ejecute [Environment]::OSVersion para ver la diferencia)
     virtualize = Se activa la virtualización de la aplicación (forzando el tiempo de ejecución x86)
      longPaths = Habilitar rutas largas (> 260 caracteres) si está habilitado en el SO (solo funciona con Windows 10)

Un ejecutable generado tiene los siguientes parámetros reservados:

root@kitploit:~
-? [<MODIFIER>]     Texto de ayuda de PowerShell del script dentro del ejecutable. La combinación de parámetros opcional
                    "-? -detailed", "-? -examples" o "-? -full" se puede utilizar para obtener el texto de ayuda correspondiente.
-debug              Fuerza la depuración del ejecutable. Llama a "System.Diagnostics.Debugger.Launch()".
-extract:<FILENAME> Extrae el script de PowerShell dentro del ejecutable y lo guarda como FILENAME.
                    El script no se ejecutará.
-wait               Al final de la ejecución del script escribe "Hit any key to exit..." y espera que se presione una tecla.
-end                Todas las opciones siguientes se pasarán al script dentro del ejecutable.
                    Todas las opciones anteriores son utilizadas por el propio ejecutable y no se pasarán al script.

Comentarios

Uso de PowerShell Core:

PS2EXE se puede usar con PowerShell Core. Para hacerlo, simplemente instale el módulo PS2EXE en PowerShell Core como se describió anteriormente. Pero dado que .Net Core no incluye un compilador, se usa el compilador de .Net Framework (.Net Framework y PowerShell 5.1 están incluidos en Windows).

Por esta razón, PS2EXE solo puede compilar scripts compatibles con PowerShell 5.1 y genera binarios de .Net 4.x, pero aún se puede usar directamente en todos los sistemas operativos Windows compatibles sin dependencias.

Incrustar archivos en ejecutables compilados:

Con el parámetro -embedFiles seguido de una tabla hash con rutas a archivos, esos archivos se incrustarán en el ejecutable compilado. Al iniciar el ejecutable, esos archivos se escribirán en el disco en las rutas especificadas, p. ej., -embedFiles @{'RutaArchivoDestino1'='RutaArchivoOrigen1';'RutaArchivoDestino2'='RutaArchivoOrigen2'}. Los nombres de archivo de origen deben ser únicos. Se permiten rutas absolutas y relativas. Para las rutas de destino, una ruta relativa que comienza con '.\' se interpreta como relativa al ejecutable, sin el '.\' inicial como relativa a la ruta actual en tiempo de ejecución. Los directorios se crean automáticamente al inicio si es necesario. En la ruta de destino, las variables de entorno en notación cmd.exe como %TEMP% o %APPDATA% se expanden en tiempo de ejecución. Un error al crear uno de los archivos incrustados detendrá inmediatamente la ejecución del ejecutable compilado.

Lista de cmdlets no implementados:

Los comandos básicos de entrada/salida tuvieron que reescribirse en C# para PS2EXE. No están implementados Write-Progress en modo consola (demasiado trabajo) y Start-Transcript/Stop-Transcript (no hay una implementación de referencia adecuada de Microsoft).

Formato de salida en modo GUI:

Por defecto, en PowerShell las salidas de los cmdlets se formatean línea por línea (como una matriz de cadenas). Cuando su comando genera 10 líneas de salida y utiliza la salida GUI, aparecerán 10 cuadros de mensaje, cada uno esperando un Aceptar. Para evitar esto, canalice su comando al cmdlet Out-String. Esto convertirá la salida en una matriz de cadenas con 10 líneas, toda la salida se mostrará en un solo cuadro de mensaje (por ejemplo: dir C:\ | Out-String).

Archivos de configuración:

PS2EXE puede crear archivos de configuración con el nombre del ejecutable generado + ".config". En la mayoría de los casos, estos archivos de configuración no son necesarios; son un manifiesto que indica qué versión de .Net Framework debe usarse. Como normalmente utilizará la versión actual de .Net Framework, intente ejecutar su ejecutable sin el archivo de configuración.

Procesamiento de parámetros:

Los scripts compilados procesan los parámetros como lo hace el script original. Una restricción proviene del entorno de Windows: para todos los ejecutables, todos los parámetros tienen el tipo STRING; si no hay una conversión implícita para el tipo de su parámetro, debe convertir explícitamente en su script. Incluso puede canalizar contenido al ejecutable con la misma restricción (todos los valores canalizados tienen el tipo STRING).

Seguridad de contraseñas:

¡Nunca almacene contraseñas en su script compilado! Se puede descompilar fácilmente el script con el parámetro -extract. Por ejemplo

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

descompilará el script almacenado en Output.exe. Y tenga en cuenta: ¡el script (intencionalmente) se almacena en texto claro en el ejecutable!

Variables de script:

Dado que PS2EXE convierte un script en un ejecutable, las variables relacionadas con el script ya no están disponibles. La variable $MyInvocation se establece en otros valores que en un script.

Especialmente la variable $PSScriptRoot está vacía: puede usar $ScriptRoot como reemplazo.

Puede obtener $PSScriptRoot independientemente de si está compilado o no con la siguiente línea de código:

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

Ventana en segundo plano en modo -noConsole:

Cuando se abre una ventana externa en un script con modo -noConsole (es decir, para Get-Credential o para un comando que necesita un shell cmd.exe), la siguiente ventana se abre en segundo plano.

La razón es que al cerrar la ventana externa, Windows intenta activar la ventana principal. Dado que el script compilado no tiene ventana, se activa la ventana principal del script compilado, normalmente la ventana del Explorador o de PowerShell.

Para solucionar esto, $Host.UI.RawUI.FlushInputBuffer() abre una ventana invisible que se puede activar. La siguiente llamada a $Host.UI.RawUI.FlushInputBuffer() cierra esta ventana (y así sucesivamente).

El siguiente ejemplo ya no abrirá una ventana en segundo plano como lo haría una sola llamada de "ipconfig | Out-String":

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

Cambios:

1.0.18 - 2026-06-06

  • variable predefinida $ScriptRoot como reemplazo de $PSScriptRoot
  • nueva versión de Win-PS2EXE

1.0.17 / 2025-08-21

  • nuevo parámetro -embedFiles para incrustar archivos en el ejecutable compilado

1.0.16 / 2025-07-20

  • nuevo parámetro -conHost para forzar el inicio de ejecutables compilados en Conhost en lugar de Windows Terminal

1.0.15 / 2025-01-05

  • si se usa solo en PowerShell Core, el módulo no tiene que instalarse también en PowerShell 5.1

1.0.14 / 2024-09-15

  • nuevo parámetro -? para ejecutables compilados para mostrar la ayuda del script original de PowerShell
  • en modo GUI, los títulos de las ventanas son el título de la aplicación (cuando se compila con el parámetro -title)

1.0.13 / 2023-09-26

  • ahora [ y ] son compatibles en el nombre del directorio del script
  • el archivo de origen puede tener más de 16 MB (para quien lo necesite)
  • nuevo campo de texto de parámetro adicional en Win-PS2EXE

1.0.12 / 2022-11-22

  • nuevo parámetro -winFormsDPIAware para admitir escalado en WinForms en modo noConsole (solo Windows 10 o superior)

1.0.11 / 2021-11-21

  • corregido error de contraseña de más de 24 caracteres
  • nuevo parámetro -DPIAware para admitir escalado en modo noConsole
  • nuevo parámetro -exitOnCancel para detener la ejecución del programa al cancelar en cuadros de entrada (solo en modo noConsole)

1.0.10 / 2021-04-10

  • el parámetro outputFile ahora acepta una carpeta de destino (sin nombre de archivo)

1.0.9 / 2021-02-28

  • nuevo parámetro UNICODEEncoding para salida como UNICODE
  • cambiado el parámetro debug a prepareDebug
  • finalmente me atreví a usar parámetros avanzados

1.0.8 / 2020-10-24

  • refactorizado

1.0.7 / 2020-08-21

  • corrección de errores para barras de progreso simultáneas en una sola canalización

1.0.6 / 2020-08-10

  • el prompt de elección ahora se comporta como PowerShell (solo modo consola)
  • soporte (limitado) para PowerShell Core (inicia Windows PowerShell en segundo plano)
  • corregido el procesamiento de valores de parámetros negativos
  • soporte para barras de progreso animadas (solo modo noConsole)

1.0.5 / 2020-07-11

  • soporte para barras de progreso anidadas (solo modo noConsole)

1.0.4 / 2020-04-19

  • Application.EnableVisualStyles() como valor predeterminado para aplicaciones GUI, nuevo parámetro -noVisualStyles para evitar esto

1.0.3 / 2020-02-15

  • archivos convertidos de UTF-16 a UTF-8 para permitir git diff
  • ignorar teclas de control en solicitud de cadena segura en modo consola

1.0.2 / 2020-01-08

  • ejemplos añadidos a github

1.0.1 / 2019-12-16

  • corregido el problema de "ancho de ventana ilimitado para ventanas GUI" en ps2exe.ps1 y Win-PS2EXE

1.0.0 / 2019-11-08

  • primera versión estable del módulo

0.0.0 / 2019-09-15

  • experimental
Descargar herramienta