Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
PS2EXE — Модуль для компиляции скриптов PowerShell в исполняемые файлы | Kitploit
Инструменты/GitHubGitHub/mscholtes/ps2exe
Генерация полезной нагрузкиСкриптинг и автоматизацияУтилиты и фреймворки
GitHubmscholtes/ps2exe

PS2EXE

Модуль для компиляции скриптов PowerShell в исполняемые файлы

Репозиторий
1.8k2472 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Репозиторий без ИИ — искусственный интеллект убивает творчество и нашу природу!

PS2EXE

Доработка отличного скрипта Инго Карштайна с поддержкой GUI. Вывод и ввод через GUI активируются одним переключателем, создаются настоящие исполняемые файлы Windows. Компилирует только скрипты, совместимые с Powershell 5.x. С опциональным графическим интерфейсом Win-PS2EXE.

Версия модуля.

Версию на основе скрипта можно найти здесь (https://github.com/MScholtes/TechNet-Gallery).

Автор: Markus Scholtes

Версия: 1.0.18

Дата: 2026-06-06

Установка

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

или скачайте отсюда: https://www.powershellgallery.com/packages/ps2exe/.

Использование

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

или

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

компилирует «source.ps1» в исполняемый файл target.exe (если «.\target.exe» опущен, вывод записывается в «.\source.exe»).

или запустите Win-PS2EXE для графического интерфейса с помощью

root@kitploit:~
  Win-PS2EXE

Параметры

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)

Сгенерированный исполняемый файл имеет следующие зарезервированные параметры:

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.

Примечания

Использование Powershell Core:

PS2EXE можно использовать с Powershell Core. Для этого просто установите модуль PS2EXE в Powershell Core, как описано выше. Но поскольку .Net Core не поставляется с компилятором, используется компилятор .Net Framework (.Net Framework и Powershell 5.1 входят в состав Windows).

По этой причине PS2EXE может компилировать только скрипты, совместимые с Powershell 5.1, и создаёт двоичные файлы .Net 4.x, но при этом может использоваться напрямую в любой поддерживаемой ОС Windows без дополнительных зависимостей.

Встраивание файлов в скомпилированные исполняемые файлы:

С помощью параметра -embedFiles и хеш-таблицы с путями к файлам эти файлы будут встроены в скомпилированный исполняемый файл. При запуске исполняемого файла эти файлы будут записаны на диск по указанным путям, например -embedFiles @{'Targetfilepath1'='Sourcefilepath1';'Targetfilepath2'='Sourcefilepath2'}. Имена исходных файлов должны быть уникальными. Допускаются абсолютные и относительные пути. Для целевых путей относительный путь, начинающийся с '.\', интерпретируется как относительный к исполняемому файлу, без ведущего '.\' — как относительный к текущему пути во время выполнения. Директории создаются автоматически при запуске, если необходимо. В целевом пути переменные окружения в нотации cmd.exe, такие как %TEMP% или %APPDATA%, разворачиваются во время выполнения. Сбой при создании одного из встроенных файлов немедленно остановит выполнение скомпилированного исполняемого файла.

Список нереализованных командлетов:

Основные команды ввода/вывода пришлось переписать на C# для PS2EXE. Не реализованы: Write-Progress в консольном режиме (слишком много работы) и Start-Transcript/Stop-Transcript (нет подходящей эталонной реализации от Microsoft).

Форматирование вывода в режиме GUI:

По умолчанию в powershell вывод командлетов форматируется построчно (как массив строк). Если ваша команда генерирует 10 строк вывода и вы используете вывод в GUI, появится 10 окон сообщений, каждое из которых ожидает нажатия OK. Чтобы этого избежать, передайте вывод вашей команды через командлет Out-String. Это преобразует вывод в один строковый массив из 10 строк, и весь вывод будет показан в одном окне сообщения (например: dir C:\ | Out-String).

Файлы конфигурации:

PS2EXE может создавать файлы конфигурации с именем сгенерированного исполняемого файла + «.config». В большинстве случаев такие файлы конфигурации не нужны; это манифест, указывающий, какую версию .Net Framework следует использовать. Поскольку вы обычно используете актуальную версию .Net Framework, попробуйте запустить исполняемый файл без файла конфигурации.

Обработка параметров:

Скомпилированные скрипты обрабатывают параметры так же, как исходный скрипт. Одно ограничение связано со средой Windows: для всех исполняемых файлов все параметры имеют тип STRING; если для вашего типа параметра нет неявного преобразования, вам придётся выполнять преобразование явно в вашем скрипте. Вы также можете передавать содержимое через конвейер в исполняемый файл с тем же ограничением (все передаваемые значения имеют тип STRING).

Безопасность паролей:

Никогда не храните пароли в скомпилированном скрипте! Скрипт можно легко декомпилировать с помощью параметра -extract. Например

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

выполнит декомпиляцию скрипта, хранящегося в Output.exe. И обратите внимание: скрипт (намеренно) хранится в открытом виде в исполняемом файле!

Переменные скрипта:

Поскольку PS2EXE преобразует скрипт в исполняемый файл, переменные, относящиеся к скрипту, становятся недоступны. Переменная $MyInvocation принимает другие значения, чем в скрипте.

В частности, переменная $PSScriptRoot пуста — вместо неё можно использовать $ScriptRoot.

Вы можете получить значение $PSScriptRoot независимо от того, скомпилирован скрипт или нет, с помощью следующей строки кода:

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

Окно на заднем плане в режиме -noConsole:

Когда в скрипте с режимом -noConsole открывается внешнее окно (например, для Get-Credential или команды, требующей оболочки cmd.exe), следующее окно открывается на заднем плане.

Причина в том, что при закрытии внешнего окна Windows пытается активировать родительское окно. Поскольку скомпилированный скрипт не имеет окна, вместо него активируется родительское окно скомпилированного скрипта — обычно окно Проводника или Powershell.

Чтобы обойти это, $Host.UI.RawUI.FlushInputBuffer() открывает невидимое окно, которое можно активировать. Последующий вызов $Host.UI.RawUI.FlushInputBuffer() закрывает это окно (и так далее).

Следующий пример не будет больше открывать окно на заднем плане, в отличие от одиночного вызова «ipconfig | Out-String»:

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

Изменения:

1.0.18 - 2026-06-06

  • предопределённая переменная $ScriptRoot как замена $PSScriptRoot
  • новая версия Win-PS2EXE

1.0.17 / 2025-08-21

  • новый параметр -embedFiles для встраивания файлов в скомпилированный исполняемый файл

1.0.16 / 2025-07-20

  • новый параметр -conHost для принудительного запуска скомпилированных исполняемых файлов в Conhost вместо Windows Terminal

1.0.15 / 2025-01-05

  • если модуль используется только в Powershell Core, его не обязательно устанавливать также в Powershell 5.1

1.0.14 / 2024-09-15

  • новый параметр -? для скомпилированных исполняемых файлов показывает справку исходного скрипта Powershell
  • в режиме GUI заголовки окон — это заголовок приложения (если задан при компиляции параметром -title)

1.0.13 / 2023-09-26

  • теперь символы [ и ] поддерживаются в имени каталога скрипта
  • исходный файл может быть больше 16 МБ (для тех, кому это нужно)
  • новое дополнительное текстовое поле параметра в Win-PS2EXE

1.0.12 / 2022-11-22

  • новый параметр -winFormsDPIAware для поддержки масштабирования WinForms в режиме noConsole (только Windows 10 и выше)

1.0.11 / 2021-11-21

  • исправлена ошибка с паролем длиннее 24 символов
  • новый параметр -DPIAware для поддержки масштабирования в режиме noConsole
  • новый параметр -exitOnCancel для остановки выполнения программы при отмене в окнах ввода (только в режиме noConsole)

1.0.10 / 2021-04-10

  • параметр outputFile теперь принимает целевую папку (без имени файла)

1.0.9 / 2021-02-28

  • новый параметр UNICODEEncoding для вывода в UNICODE
  • изменён параметр debug на prepareDebug
  • наконец решился использовать расширенные параметры

1.0.8 / 2020-10-24

  • рефакторинг

1.0.7 / 2020-08-21

  • исправление ошибки для одновременных индикаторов выполнения в одном конвейере

1.0.6 / 2020-08-10

  • запрос выбора теперь ведёт себя как в Powershell (только консольный режим)
  • (ограниченная) поддержка Powershell Core (запускает Windows Powershell в фоне)
  • исправлена обработка отрицательных значений параметров
  • поддержка анимированных индикаторов выполнения (только режим noConsole)

1.0.5 / 2020-07-11

  • поддержка вложенных индикаторов выполнения (только режим noConsole)

1.0.4 / 2020-04-19

  • Application.EnableVisualStyles() по умолчанию для GUI-приложений, новый параметр -noVisualStyles для отключения

1.0.3 / 2020-02-15

  • конвертированные файлы из UTF-16 в UTF-8 для поддержки git diff
  • игнорирование управляющих клавиш в защищённом вводе строки в консольном режиме

1.0.2 / 2020-01-08

  • добавлены примеры в github

1.0.1 / 2019-12-16

  • исправлена проблема «неограниченная ширина окна для GUI-окон» в ps2exe.ps1 и Win-PS2EXE

1.0.0 / 2019-11-08

  • первая стабильная версия модуля

0.0.0 / 2019-09-15

  • экспериментальная
Скачать инструмент