Как сделать exe файл из ps1

Обновлено: 06.07.2024

Давно собирался написать эту заметку, всё руки не доходили, а тут посмотрев статистику блога увидел, что время от времени ко мне попадают люди по запросам “конвертирование powershell в exe”, “как сделать из ps1 exe” и т.д., и скорее всего найдя только небольшое упоминание о такой возможности в Primal Forms уходят ни с чем. И уходят судя по всему расстроенные, так как Primal Forms стоит денег :). А между прочим есть совершенно бесплатный инструмент для конвертирования файлов скриптов .ps1 в исполняемые exe-файлы, о котором сегодня и пойдёт речь.

Для тех, кто впервые слышит про “какие-то там политики” рекомендую выполнить команду

Для демонстрации работы конвертора создадим простенький скрипт, который будет создавать в корне системного диска html-файл, содержащий службы компьютера, отсортированные по статусу:

Сохраним его под именем, например, Out-Service.ps1.

Переходим непосредственно к конвертированию.

Сам конвертор представляет собой скрипт на Powershell, содержащийся в файле ps2exe.ps1. Скрипт имеет несколько параметров, перечислять все думаю нет смысла – все они описаны там же на странице загрузки. Минимально необходимые параметры –inputFile и –outputFile задающие, соответственно, имя исходного .ps1-файла желаемое имя будущего exe’шника. Т.е. в простейшем случае команда для конвертирования будет выглядеть следующим образом:

.\ps2exe.ps1 -inputFile .\Out-Service.ps1 -outputFile .\Out-Service.exe

(Вообще-то –outputFile можно пропустить и после .ps1-файла просто указать имя exe’шника.)

В результате в указанном каталоге (в данном случае всё выполняется в текущем каталоге) будет создан файл Out-Service.exe, при запуске которого в корне системного диска будет создан файл Services.htm, в котором будут перечислены все службы компьютера, отсортированные по статусу.

Ещё раз отмечу, что работы сковертированные файлы, это “не настоящие” exe’шники: для того, чтобы они работали необходимо соблюдение трёх условий:

  • политики - у вас могут блокироваться запуски сценариев имеющие расширения скриптовых языков;
  • понятное назначение - все пользователи Windows знают для чего нужны файлы с буквами .exe на конце названия. Расширение .ps1 может вызывать вопросы даже у администраторов;
  • запуск - exe файл запускается двойным кликом, а ps1 - через консоль с настроенной политикой безопасности;
  • редактирование - поместив сценарий Powershell в exe файл его будет сложнее отредактировать;
  • срытие консоли - простой запуск скриптов PS1 всегда вызывает окно консоли. Один из способов обойти его - с помощью exe файла.

Еще нужно отметить, что exe файл можно рассмотреть как архив с файлами. То есть мы можем поместить в 1 exe файл сам сценарий Powershell и файлы (например пароли, адреса, таблицы и т.д.). Это преимущество избавляет нас от ситуации с отсутствующими файлами и доступами к ним, которые могут быть у обычного сценария.

Навигация по посту

В этой статье будут рассмотрено несколько способов создания .exe файлы из .ps1. Самыми удобными и легкими способами - являются первые 3. Способы должны подойти для интерпретаторов Powershell 5.1+ и 6-7+. В конце статьи есть таблица с итогами.

PS2EXE

Модуль ps2exe имеет консольный и графический режим работы. На мой взгляд PS2EXE - это самый простой и удобный способ создания EXE по следующим причинам:

  1. Доступен из репозитория Powershell;
  2. Единственное предназначение модуля - конвертация форматов;
  3. Есть консольный вариант и в стиле PS;

У этого способа так же есть и минус. Как сообщал автор проекта с помощью этого модуля, когда-то, был упакован в .exe вирус. После этого, некоторые антивирусы, стали срабатывать на файлы .exe упакованные этим модулем. Мой антивирус таких сигнатур не нашел. Проект популярный и имеет 200 звезд и с открытым кодом. Тем не менее доверять автору или нет - решать вам.

Установить его можно с помощью следующей команды:

Вам может пригодится основная информация по модулю, которую можно получить так:

Установка ps2exe для конвертации файлов exe в Powershell

На скриншоте выше отмечена, например, ссылка на гитхаб, где есть обсуждение этого модуля и его возможностей.

Консоль

У модуля есть несколько алиасов, которые работают одинаково. Самый простой способ создания exe файла следующий:

Конвертация файлов ps1 в exe в Powershell

У команды модуля есть ряд дополнительных параметров увидеть которые можно в справке:

Справка по компиляции файлов Powershell с ps2exe

Отмечу наиболее важные параметры:

  • x86-x64 - компиляция под определенную архитектуру. Если этого не указано, то используется значение по умолчанию (обе архитектуры);
  • title - заголовок консоли;
  • noConsole - не отображает консоль при запуске скрипта;
  • requireAdmin - запрашивать права администратора (UAC);
  • credentialGUI - вывод диалогового окна для ввода учетных данных.

Если вы используете параметр noConsole, обратите на разное поведение с выводом в stdout. Без указания параметра noConsole - все будет выведено в консоль, а с параметром - в диалоговые окна.

В примере ниже я создал exe файл, который выполняет одну команду "New-Item". Эта команда возвращает информацию о созданном объекте. Если вы не помещаете результат команды в переменную, то он попадает в stdout. Результат команды будет выведен построчно в диалоговых окнах:

Проблема с stdout в Powershell

PS2EXE доступен и в графическом варианте. Папка, в которой лежит файл для запуска GUI, указана в описании модуля (на скриншоте выше). Обычно это один из следующих путей:

Конвертация файлов в exe в Powershell с GUI

Параметры графического интерфейса достаточно очевидны и не нуждаются в дополнительном объяснении.

Как работать в Powershell с модулями и профилями и повторно использовать данные

IExpress 2.0

Отличительной особенностью этого способа в том, что он уже установлен в Windows. IExpress предназначен не только для сценариев Powershell. Основная задача программы создания .exe для установки и запуска программ и поэтому имеет больше возможностей. Запустить редактор вы можете через любую консоль:

IEXpress для конвертации Powershell файлов в exe

Большая часть выбора предназначена для случаев, если вы планируете установить какую-то программу (распаковать в Program Files, реестр и т.д.), а не просто запустить .exe. Из-за этого большую часть выбора можно оставить по умолчанию. На скриншоте выбраны те пункты, которые понадобятся вам для конвертации ps1 в exe:

Конвертация ps1 в exe c Powershell и IExpress

  1. В конце этих диалоговых окон у вас появится файл со всеми выборами и настройками, которые вы сделали. Этот файл можно импортировать тут что бы не повторять этих действий;
  2. Вам нужно создать exe файл, который будет распакован в памяти и запущен. Другие варианты, наверное, нужны для установки;
  3. Выбор заголовка окна после запуска .exe;
  4. Нужно ли у пользователя спрашивать разрешение на установку программы;

Конвертация ps1 в exe c Powershell и IExpress

Конвертация ps1 в exe c Powershell и IExpress

Останутся еще 2 окна, которые не будут иметь выборов. После этого появится файл .exe пригодный для запуска.

В IExpress, в отличие от других программ, нельзя установить требования к привилегиям. Вы либо явно запускаете программу от администратора или от обычного пользователя (в песочнице).

ISE Steroids

В Windows есть собственный редактор для сценариев Powershell, который называется ISE (Integrated Scripting Environment). Для этого редактора существует расширение с названием ISE Steroids. Расширение добавляет множество функций и одна из функций - это конвертация файлов. Плюсы этого способа от следующих в том, что оно бесплатное, до сих пор поддерживается и является расширением (а не полноценной программой).

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

После установки, в самом ISE нужно выполнить следующую команду:

После установки расширения, зайдя в "Сервис", можно увидеть кнопку "Turn Code into EXE. ":

Конвертация ps1 в exe c Powershell ISE Steroids

В новом окне настраивается версионность приложения, поведение окна консоли при запуске приложения, устанавливается иконка и привилегии для запуска. При нажатии на кнопку "Create Application" - нужно указать путь для сохранения готового файла:

Конвертация ps1 в exe c Powershell ISE Steroids

PS1 to EXE

Менее популярный проект, который уже около 2 лет не поддерживается и является редактором кода с возможностью конвертации. На официальном сайте и Github скачать программу нельзя и ее нужно искать по сайтам. Достаточно много минусов, что бы пользоваться этой программой в последнюю очередь.

Консоль

После установки файл, для запуска консоли, находится в одной из следующих папок:

Консольный вариант команды не несет принципов Powershell в наименовании ключей. "PS1 to exe" использует стиль CMD. Пример создания exe файла без показа консоли:

Конвертация файлов Powershell ps1 в exe c PS1toEXE

Параметр /include добавляет в exe дополнительные файлы и папки.

Справка PS1 to EXE

Графический интерфейс программы имеет так же встроенный редактор кода. После открытия файла мы увидим следующую картинку:

Графический редактор PS1 to EXE

  1. Файл, который будет добавлен в exe;
  2. Дополнительные настройки для конвертации;
  3. Выбор дополнительных файлов, если вы планировали их включить;
  4. Конвертация в exe.

VSCode и Powershell Pro Tools

VSCode - это современный редактор кода от Microsoft. Он поддерживает множество языков через разные расширения, в том числе и Powershell. Одно из таких расширений, Powershell Pro Tools, позволяет выполнять конвертацию ps1 в exe. Единственный плюс этого способа в том, если вы пользователь VSCode. Минут - расширение платное.

Выглядит это расширение следующим образом:

VSCode плагин для конвертации ps1 в exe

После установки расширения и открытии вашего скрипта вам нужно нажать кнопку в правом-верхнем углу экрана для создания .exe файла. При первом нажатии на кнопку, в корневой директории VSCode создается файл конфигурации с расширением "psd1". В этом файле, будет указан путь куда будет сохранен .exe файл:

Конвертация в VSCode файлов Powershell ps1 в exe

Конвертация в VSCode файлов Powershell ps1 в exe

Powershell Studio

Еще один способ создать exe это использовать Powershell Studion. Эта программа - крупный IDE, который разрабатывался специально под Powershell и, конечно, он является платным (45 дней trial).

После открытия файла в IDE нужно открыть настройки пакетов:

Конвертация файлов Powershell ps1 в exe с Powershell Studio

Выбор интерпретатора для конвертации ps1 в exe с Powershell Studio

В следующем окне нужно выбрать путь, где файл должен быть сохранен и выполнить билд:

Выбор места сохранения при конвертации файла Powershell ps1 в exe с Powershell Studio

У Powershell Studio есть много преимуществ. Например он может подписывать конвертированные файлы вашим сертификатом - такой возможности, в других программах, нет.

Остальные варианты

В статье перечислена только часть программ, которые могут выполнить конвертацию. Есть множество других программ. Например редактор PowerGUI. Этот проект был закрыт более 4 лет назад т.к. он был выкуплен компанией DELL. Инсталлятор можно найти только на не официальных сайтах. Из-за отсутствия обновления и поддержки я не стал его включать в список.

Так же есть следующая найденная таблица, которая примерно суммирует написанное выше. Отмечу, что я нашел в ней ошибки - ISE Steroids, например, бесплатное расширение. Могут быть и другие.

Сконвертировать скрипт PowerShell в исполняемый exe-файл можно с помощью PS2EXE-GUI. Этот конвертер основан на скрипте PS2EXE, к которому добавлена графическая оболочка.

У скрипта имеется большое количество дополнительных опций, поэтому начать лучше со справки. Для ее вывода надо запустить скрипт ps2exe.ps1 без параметров.

справка ps2exe

.\ps2exe.ps1 -inputFile script.ps1 -outputFile script.exe

конвертация из консоли PowerShell

По умолчанию выходной файл создается как консольное приложение. Если указать ключ noConsole, то файл скомпилируется как Windows приложение:

.\ps2exe.ps1 -inputFile script.ps1 -outputFile script.exe -noConsole

ключ -NoConsole

Сгенерированный exe-файл поддерживает несколько дополнительных параметров. К примеру, запущенный с параметром -wait он после выполнения не завершится, а будет ожидать реакции пользователя.

ключ -wait

Те, кто не любит работать в консоли, могут воспользоваться графической оболочкой. Принцип здесь тот же, указываем входной и выходной файл, и отмечаем дополнительные опции. Кстати, в отличии от оригинального PS2EXE в GUI есть пара новых параметров.

ps2exe GUI

Плюсы все-же есть. К примеру, сконвертированный скрипт отрабатывает даже при запрете на выполнение PowerShell скриптов. Это поможет обойти политику выполнения.

политика restricted

Еще одно преимущество, это возможность скрытого запуска. Скомпилированный с параметрами noOutpup, noError и noConsole скрипт выполняется полностью незаметно для пользователя. Добиться подобного эффекта другими способами мне не удалось. Это важно для всяческих Logon скриптов.

Ну и наконец, конвертацию можно использовать в качестве альтернативы обфускации. К примеру, если вы передаете свои скрипты сторонним лицам и не хотите, чтобы они могли посмотреть исходный код. Однако тут есть один тонкий момент. Сконвертированный скрипт можно легко расконвертировать, выполнив его с ключом Extract, например:

Поэтому хранить в скриптах какие то важные вещи (напр. пароли) все же не стоит.

Несмотря на все функции, которые Windows операционная система предлагает нам по умолчанию, более продвинутые пользователи обычно стараются пойти еще дальше. Для этого они используют интегрированные элементы, такие как CMD или PowerShell. Что ж, здесь мы покажем вам, как они могут преобразовать сценарий PowerShell в EXE .

Вышеупомянутые инструменты, как CMD or командная строка , и PowerShell, являются встроенной частью самой Windows. Обычно они работают с помощью команд и сценариев, которые позволяют нам иметь гораздо больший контроль над операционной системой. В большинстве случаев, чтобы использовать все это и получить от этого максимальную отдачу, нам необходимо иметь несколько более глубоких знаний о Windows. Хотя его графический интерфейс значительно упрощает нам задачу, все, что мы здесь делаем, делается путем ввода команд.

Скрипт в EXE-файл

Таким образом, можно сказать, что мы действительно добиваемся того, чтобы сделать шаг ближе к внутренней части Windows, чтобы контролировать ее и использовать более глубоко. Что ж, многие в этих случаях создают и используют свои собственные скрипты в вышеупомянутых PowerShell выполнять всевозможные задания и изменения.

Какие скрипты мы создаем в Windows из PowerShell

Для начала мы скажем вам, что эти конкретные элементы, о которых мы говорим, скрипты, представляют собой набор команд, которые выполняют определенные задачи в Windows. Их можно создавать с помощью различных инструментов и редакторов, хотя в данном случае нас интересуют те, которые разработаны в вышеупомянутой PowerShell.

Для этого пользователю, который его разрабатывает, нужно будет только создать структуру команд и ввести их в редакторе PowerShell со своей клавиатуры. После завершения проекта как такового наиболее распространенным форматом файлов для этих сценариев является .PS1 . Это даст нам возможность в будущем реализовать эти элементы для достижения той цели, к которой мы стремимся.

Poweshell Windows

Но в данном случае мы поговорим о другом способе выполнения этих элементов. И это то, что у нас есть возможность преобразовать Скрипт PowerShell в EXE, то есть исполняемый файл, все из .PS1, который мы создали в начале. Таким образом, мы можем поделиться этим элементом как исполняемым файлом как приложением, вместо того, чтобы делиться им как чистым и простым скриптом. Как вы понимаете, все это избавляет от необходимости объяснять менее опытным пользователям, как запускать сценарии через PowerShell или CMD.

Как преобразовать сценарий PowerShell в EXE

Для того, что мы вам говорим, мы собираемся использовать инструмент это также реализовано в Windows. В частности, мы имеем в виду приложение под названием IExpress. Это тот, который поможет нам сейчас преобразовать сценарий PowerShell в EXE в Windows 10. Кроме того, эта же утилита может помочь нам в других случаях, например, при преобразовании неисполняемого файла. Файлы сценариев Visual Basic, в исполняемых файлах. Но перейдем к тому, что нас действительно интересует.

Таким образом, если у нас есть сценарий PowerShell, например, в формате .PS1, мы должны открыть инструмент IExpress, о котором мы говорим. Для этого нажимаем кнопку Win + R сочетание клавиш, чтобы открыть диалоговое окно «Выполнить» системы. Потом в нем пишем iexpress и принимаем.

Cuadro Ejecutar

Откройте IExpress, чтобы преобразовать сценарий PowerShell в EXE

Затем мы нажимаем кнопку с надписью «Создать новый файл директивы самоизвлечения» и нажимаем «Далее». В следующем появившемся окне мы выбрали вариант «Извлечь файлы» и запустить команду установки.

Extraer archivos iexpress

Преобразование скрипта в EXE с помощью IExpress

Теперь в появившемся диалоговом окне нам нужно ввести имя для нового выполнимый файл, который мы собираемся создать. Например, мы можем назвать это Executable-script-itigic.

Ejecutable скрипт softzone

В этот момент инструмент спросит нас, хотим ли мы попросить пользователя подтвердить установку пакета. В данном случае выбираем Нет и переходим в следующее окно. Таким же образом IExpress спросит нас, хотите ли вы показать лицензионное соглашение, где мы снова указываем, что в этом нет необходимости.

Скажем, на следующем появившемся экране мы можем нажать кнопку «Добавить», что дает нам возможность добавить сценарий PowerShell, который мы хотим преобразовать. Делаем это через появившееся окно навигации. На тот момент элемент, который у нас есть в этом инструменте, уже должен быть виден в программе установки выпадающий список. Таким образом, в следующем окне мы оставляем исходный выбор как Default, а в конце процесса мы отмечаем No Message.

Другие альтернативы преобразованию сценария PowerShell в EXE

В случае, если вы столкнетесь с какой-то проблема с инструментом то, что мы описали выше, говорят о том, что мы можем использовать другие интересные альтернативы.

PS2EXE

Это программа, которую вы можете скачать с эту ссылку и это на самом деле Microsoft скрипт для PowerShell.

F2KO Ps1 To Exe

Мы также можем использовать F2KO Ps1 To Exe , бесплатное настольное приложение с поддержкой нескольких языков, которое можно запускать в Windows. Он предназначен для этих задач, которые мы комментируем и можем скачать его здесь .

Онлайн-конвертер F2KO

Здесь мы находим веб-приложение это можно рассматривать как дополнение к одноименному переносному приложению. Мы можем получить доступ это из этой ссылки .

Студия PowerShell

Это программное обеспечение может создавать Приложения PowerShell , помимо проведения многофайловой отладки, создание MSI установщики и т. д. Все это мы получаем отсюда .

Читайте также: