
Módulo para compilar scripts de PowerShell a ejecutables.
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
PS C:\> Install-Module ps2exe
o descárguelo desde aquí: https://www.powershellgallery.com/packages/ps2exe/.
Invoke-ps2exe .\source.ps1 .\target.exe
o
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
Win-PS2EXE
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]
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:
-? [<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.
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.
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.
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).