Как сконвертировать PowerShell в EXE
@bladerunner0x2049Сконвертировать скрипт PowerShell в исполняемый exe-файл можно с помощью PS2EXE-GUI. Этот конвертер основан на скрипте PS2EXE, к которому добавлена графическая оболочка.
У скрипта имеется большое количество дополнительных опций, поэтому начать лучше со справки. Для ее вывода надо запустить скрипт ps2exe.ps1 без параметров.
В самом простом варианте конвертации запускаем ps2exe.ps1 и указываем ему в качестве параметров входной и выходной файлы. Для примера возьмем простой скрипт, выводящий сообщение на экран, сконвертируем его и проверим результат:
.\ps2exe.ps1 -inputFile script.ps1 -outputFile script.exe
По умолчанию выходной файл создается как консольное приложение. Если указать ключ noConsole, то файл скомпилируется как Windows приложение:
.\ps2exe.ps1 -inputFile script.ps1 -outputFile script.exe -noConsole
Сгенерированный exe-файл поддерживает несколько дополнительных параметров. К примеру, запущенный с параметром -wait он после выполнения не завершится, а будет ожидать реакции пользователя.
Те, кто не любит работать в консоли, могут воспользоваться графической оболочкой. Принцип здесь тот же, указываем входной и выходной файл, и отмечаем дополнительные опции. Кстати, в отличии от оригинального PS2EXE в GUI есть пара новых параметров.
Обратите внимание, что при конвертации не происходит преобразования скрипта в другой язык программирования, просто скрипт заворачивается в код С#. Полученный в результате конвертации exe-файл представляет из себя сборку .Net, содержащую исходный скрипт в кодировке Base64.
Поэтому созданный exe-файл не является самостоятельным, для работы ему требуется PowerShell и .NET версии 2.0 и выше. Также конвертация не увеличит скорость работы скрипта и не даст ему каких то дополнительных преимуществ. Тогда зачем вообще нужно конвертировать PowerShell в exe?
Плюсы все-же есть. К примеру, сконвертированный скрипт отрабатывает даже при запрете на выполнение PowerShell скриптов. Это поможет обойти политику выполнения.
Еще одно преимущество, это возможность скрытого запуска. Скомпилированный с параметрами noOutpup, noError и noConsole скрипт выполняется полностью незаметно для пользователя. Добиться подобного эффекта другими способами мне не удалось. Это важно для всяческих Logon скриптов.
Ну и наконец, конвертацию можно использовать в качестве альтернативы обфускации. К примеру, если вы передаете свои скрипты сторонним лицам и не хотите, чтобы они могли посмотреть исходный код. Однако тут есть один тонкий момент. Сконвертированный скрипт можно легко расконвертировать, выполнив его с ключом Extract, например:
script.exe -extract:″script.ps1″
Поэтому хранить в скриптах какие то важные вещи (напр. пароли) все же не стоит.