Для сценариев Powershell существует отдельный формат '.ps1'. Этот формат можно преобразовать в полноценный .exe файл. Кроме удобств использования exe файлов описанные способы преобразования покажут и функциональные преимущества. Часть преимуществ, которые можно заметить сразу:
- политики - у вас могут блокироваться запуски сценариев имеющие расширения скриптовых языков;
- понятное назначение - все пользователи Windows знают для чего нужны файлы с буквами .exe на конце названия. Расширение .ps1 может вызывать вопросы даже у администраторов;
- запуск - exe файл запускается двойным кликом, а ps1 - через консоль с настроенной политикой безопасности;
- редактирование - поместив сценарий Powershell в exe файл его будет сложнее отредактировать;
- срытие консоли - простой запуск скриптов PS1 всегда вызывает окно консоли. Один из способов обойти его - с помощью exe файла.
Еще нужно отметить, что exe файл можно рассмотреть как архив с файлами. То есть мы можем поместить в 1 exe файл сам сценарий Powershell и файлы (например пароли, адреса, таблицы и т.д.). Это преимущество избавляет нас от ситуации с отсутствующими файлами и доступами к ним, которые могут быть у обычного сценария.
В большинстве программ, которые будут рассмотрены ниже, конвертация форматов называется "компиляция". На самом деле это не совсем так. По-большему счету они добавляют какой-то скрипт на C# поверх вашего сценария и упаковывают в exe (проще сказать "инкапсуляция"). Какого-то очень сложного процесса перевода сценария с одного языка на другой - нет.
В этой статье будут рассмотрено несколько способов создания .exe файлы из .ps1. Самыми удобными и легкими способами - являются первые 3. Способы должны подойти для интерпретаторов Powershell 5.1+ и 6-7+. В конце статьи есть таблица с итогами.
PS2EXE
Модуль ps2exe имеет консольный и графический режим работы. На мой взгляд PS2EXE - это самый простой и удобный способ создания EXE по следующим причинам:
- Доступен из репозитория Powershell;
- Единственное предназначение модуля - конвертация форматов;
- Есть консольный вариант и в стиле PS;
У этого способа так же есть и минус. Как сообщал автор проекта с помощью этого модуля, когда-то, был упакован в .exe вирус. После этого, некоторые антивирусы, стали срабатывать на файлы .exe упакованные этим модулем. Мой антивирус таких сигнатур не нашел. Проект популярный и имеет 200 звезд и с открытым кодом. Тем не менее доверять автору или нет - решать вам.
Установить его можно с помощью следующей команды:
Install-Module ps2exe -Repository PSGallery
Вам может пригодится основная информация по модулю, которую можно получить так:
Get-Module -ListAvailable | where name -eq ps2exe | select *
На скриншоте выше отмечена, например, ссылка на гитхаб, где есть обсуждение этого модуля и его возможностей.
Консоль
У модуля есть несколько алиасов, которые работают одинаково. Самый простой способ создания exe файла следующий:
Invoke-PS2EXE D:\script.ps1 D:\target.exe
# аналогичная команда
ps2exe -inputFile D:\script.ps1 -outputFile D:\target.exe
У команды модуля есть ряд дополнительных параметров увидеть которые можно в справке:
ps2exe
Отмечу наиболее важные параметры:
- x86-x64 - компиляция под определенную архитектуру. Если этого не указано, то используется значение по умолчанию (обе архитектуры);
- title - заголовок консоли;
- noConsole - не отображает консоль при запуске скрипта;
- requireAdmin - запрашивать права администратора (UAC);
- credentialGUI - вывод диалогового окна для ввода учетных данных.
Если вы используете параметр noConsole, обратите на разное поведение с выводом в stdout. Без указания параметра noConsole - все будет выведено в консоль, а с параметром - в диалоговые окна.
В примере ниже я создал exe файл, который выполняет одну команду "New-Item". Эта команда возвращает информацию о созданном объекте. Если вы не помещаете результат команды в переменную, то он попадает в stdout. Результат команды будет выведен построчно в диалоговых окнах:
Это можно было бы исправить поместив команду в переменную:
$com = New-Item -Path "D:/file_2"
GUI
PS2EXE доступен и в графическом варианте. Папка, в которой лежит файл для запуска GUI, указана в описании модуля (на скриншоте выше). Обычно это один из следующих путей:
# 32bit
C:\Program Files (x86)\WindowsPowerShell\Modules\ps2exe\
# 64bit
C:\Program Files\WindowsPowerShell\Modules\ps2exe\
В папке модуля будет папка с версией. Внутри этих папок файл 'Win-PS2EXE.exe'.
Параметры графического интерфейса достаточно очевидны и не нуждаются в дополнительном объяснении.
Как работать в Powershell с модулями и профилями и повторно использовать данные
IExpress 2.0
Отличительной особенностью этого способа в том, что он уже установлен в Windows. IExpress предназначен не только для сценариев Powershell. Основная задача программы создания .exe для установки и запуска программ и поэтому имеет больше возможностей. Запустить редактор вы можете через любую консоль:
iexpress.exe
Большая часть выбора предназначена для случаев, если вы планируете установить какую-то программу (распаковать в Program Files, реестр и т.д.), а не просто запустить .exe. Из-за этого большую часть выбора можно оставить по умолчанию. На скриншоте выбраны те пункты, которые понадобятся вам для конвертации ps1 в exe:
- В конце этих диалоговых окон у вас появится файл со всеми выборами и настройками, которые вы сделали. Этот файл можно импортировать тут что бы не повторять этих действий;
- Вам нужно создать exe файл, который будет распакован в памяти и запущен. Другие варианты, наверное, нужны для установки;
- Выбор заголовка окна после запуска .exe;
- Нужно ли у пользователя спрашивать разрешение на установку программы;
- Нужен, если вы хотите ограничить права пользователя какой-то лицензией (EULA). Т.е. обычное пользовательское соглашение;
- Какие файлы вы планируете включить в пакет EXE. Это может быть, например, сертификат;
- Нужно указать скрипт и название программы, которые его запустит. Конечно это будет интерпретатор 'powershell.exe'. Так же может понадобится установить политику запуска скрипта на нужный уровень. Пример того что вы можете использовать:
powershell.exe -ExecutionPolicy Bypass -File "D:\script.ps1"
- Команда, которая будет запущена после предыдущего шага;
- Будет ли запущен файл в развернутом окне консоли, свернутом или скрытом варианте.
- Сообщение, которое появляется после успешной установки. В случае обычного запуска файла оно не нужно;
- Путь, где должен быть создан файл exe;
- Пункты, которые используются в старых ОС и при установке программ. Скрывают от пользователя процесс копирования файлов и включают поддержку длинных имен файлов.
- Нужна ли перезагрузка;
- Файл конфигурации, который можно установить в самом 1-ом окне.
Останутся еще 2 окна, которые не будут иметь выборов. После этого появится файл .exe пригодный для запуска.
В IExpress, в отличие от других программ, нельзя установить требования к привилегиям. Вы либо явно запускаете программу от администратора или от обычного пользователя (в песочнице).
ISE Steroids
В Windows есть собственный редактор для сценариев Powershell, который называется ISE (Integrated Scripting Environment). Для этого редактора существует расширение с названием ISE Steroids. Расширение добавляет множество функций и одна из функций - это конвертация файлов. Плюсы этого способа от следующих в том, что оно бесплатное, до сих пор поддерживается и является расширением (а не полноценной программой).
Существует несколько способов установки этого расширения. Самый простой из репозитория:
Install-Module -Name "ISESteroids" -Scope CurrentUser -Repository PSGallery -Force
После установки, в самом ISE нужно выполнить следующую команду:
Start-Steroids
Если при установке могут появиться ошибки. Это ожидаемая ситуация и исправить ее можно скачав пакет с официального сайта ISE Steroids или использовав другие методы описанные там же.
После установки расширения, зайдя в "Сервис", можно увидеть кнопку "Turn Code into EXE...":
В новом окне настраивается версионность приложения, поведение окна консоли при запуске приложения, устанавливается иконка и привилегии для запуска. При нажатии на кнопку "Create Application" - нужно указать путь для сохранения готового файла:
PS1 to EXE
Менее популярный проект, который уже около 2 лет не поддерживается и является редактором кода с возможностью конвертации. На официальном сайте и Github скачать программу нельзя и ее нужно искать по сайтам. Достаточно много минусов, что бы пользоваться этой программой в последнюю очередь.
Консоль
После установки файл, для запуска консоли, находится в одной из следующих папок:
# 32bit
C:\Program Files (x86)\Ps1 to Exe\
# 64bit
C:\Program Files\Ps1 to Exe\
Консольный вариант команды не несет принципов Powershell в наименовании ключей. "PS1 to exe" использует стиль CMD. Пример создания exe файла без показа консоли:
./Ps1_To_Exe.exe /ps1 "D:\script.ps1" /exe "D:\target.exe" /include "D:\temp.py" /invisible
Параметр /include добавляет в exe дополнительные файлы и папки.
Вывод справки:
.\Ps1_To_Exe.exe /?
GUI
Графический интерфейс программы имеет так же встроенный редактор кода. После открытия файла мы увидим следующую картинку:
Где:
- Файл, который будет добавлен в exe;
- Дополнительные настройки для конвертации;
- Выбор дополнительных файлов, если вы планировали их включить;
- Конвертация в exe.
VSCode и Powershell Pro Tools
VSCode - это современный редактор кода от Microsoft. Он поддерживает множество языков через разные расширения, в том числе и Powershell. Одно из таких расширений, Powershell Pro Tools, позволяет выполнять конвертацию ps1 в exe. Единственный плюс этого способа в том, если вы пользователь VSCode. Минут - расширение платное.
Выглядит это расширение следующим образом:
После установки расширения и открытии вашего скрипта вам нужно нажать кнопку в правом-верхнем углу экрана для создания .exe файла. При первом нажатии на кнопку, в корневой директории VSCode создается файл конфигурации с расширением "psd1". В этом файле, будет указан путь куда будет сохранен .exe файл:
Powershell Studio
Еще один способ создать exe это использовать Powershell Studion. Эта программа - крупный IDE, который разрабатывался специально под Powershell и, конечно, он является платным (45 дней trial).
После открытия файла в IDE нужно открыть настройки пакетов:
В главном окне вы должны выбрать интерпретатор для выполнения сценария Powershell. Скорее всего вам нужен будет 'Windows Powershell', а не более старшие версии, так как они не устанавливаются по умолчанию в Windows:
В следующем окне нужно выбрать путь, где файл должен быть сохранен и выполнить билд:
У Powershell Studio есть много преимуществ. Например он может подписывать конвертированные файлы вашим сертификатом - такой возможности, в других программах, нет.
Остальные варианты
В статье перечислена только часть программ, которые могут выполнить конвертацию. Есть множество других программ. Например редактор PowerGUI. Этот проект был закрыт более 4 лет назад т.к. он был выкуплен компанией DELL. Инсталлятор можно найти только на не официальных сайтах. Из-за отсутствия обновления и поддержки я не стал его включать в список.
Так же есть следующая найденная таблица, которая примерно суммирует написанное выше. Отмечу, что я нашел в ней ошибки - ISE Steroids, например, бесплатное расширение. Могут быть и другие...
...
Подписывайтесь на наш Telegram канал
Теги: #powershell