Можно ли создать исполняемый файл file.exe
из скрипта PowerShell?
Создание исполняемого файла .exe из скрипта PowerShell?
Ответ 1
Нет. По крайней мере, еще нет, и после 5 версий PowerShell это кажется маловероятным.
Мне жаль, что я не могу просто оставить его на этом, но другие люди предоставили кучу ответов "обходного пути", которые я чувствую вынужденными адресовать:
Вы можете обернуть свой .ps1 script в другой тип script, чтобы сделать его двойным щелчком мыши, и вы даже можете сгенерировать исполняемый файл с встроенным script (см. другие ответы в этом разделе)... но эти "исполняемые файлы" требуют правильной версии PowerShell, которые уже присутствуют в системе, поэтому вы ничего не набираете, делая это, и вы теряете множество функций PowerShell (например, вывод потокового объекта, справочную документацию и автоматическая обработка параметров с завершением табуляции для пользователей).
Вот простой пакетный пакет .cmd(вы можете расширить его, чтобы разрешить параметры):
REM <#
copy %0 %0.ps1
PowerShell.exe -ExecutionPolicy Unrestricted -NoProfile -Command "&{Set-Alias REM Write-Host; .\%0.ps1}"
del %0.ps1
exit
REM #>
### Your PowerShell script goes below here.
### I've put a couple of lines as an example ...
ls | sort length -desc | select -first 5 | ft
ps | sort ws -desc | select -first 10 | ft
Я знаю...
С Portable PowerShell, возможно, будет возможно упаковать некий самораспаковывающийся zip, который будет содержать правильную версию PowerShell и script и будет работать. Этот не исполняемый файл в любом нормальном смысле слова - это немного похоже на то, что Valve решила просто отправить изображение vmware на thumbdrive в качестве своего решения позволить пользователям Linux играть в Half Life. Однако продукт кажется заброшенным.
С PrimalScript (или PowerShell Studio) или PowerGui или pShellExec ваш script может быть зашифрован, поэтому он слегка защищен от посторонних глаз... но это в основном просто обфускация и по существу не отличается от командного файла и в некотором роде хуже.
Ответ 2
Из коробки - нет. Однако я создал PowerShell script, который может принять script и создать вокруг него оболочку EXE. Я создал этот script некоторое время назад, но решил опубликовать его здесь для ознакомления с людьми.
Ответ 3
Да, есть опция с PS2EXE для создания таких *.exe
файлов.
использование
Все это действительно просто и хорошо объяснено, тем не менее, вот его фрагмент:
C:\Scripts\PS2EXE\PS2EXE_0.5.0.0.0\ps2exe.ps1
-inputFile C:\Scripts\ExampleEXE\example.ps1
-outputFile C:\Scripts\ExampleEXE\example.exe -sta -noConsole -runtime40 -verbose -x64
Плохо только то, что проект обесценился. Нет обновлений или новых версий с 2015 года.
РЕДАКТИРОВАТЬ: Этот прогноз был принят и поддерживается новым человеком в настоящее время. Вы можете найти обновленный код здесь, последний раз обновленный 01/04/2018 на момент этого редактирования. https://gallery.technet.microsoft.com/scriptcenter/PS2EXE-GUI-Convert-e7cb69d5
Информация о версии
Для добавления и редактирования информации о версии используйте что-то вроде VERPATCH.
ОБНОВЛЕНИЕ 2019
Приветствую git-repo, который называется PythonEXE.
Он демонстрирует, как создать исполняемый файл из проекта Python, а также предоставляет пошаговое руководство YouTube.
Ответ 4
Используйте PowerGUI Script Редактор (он бесплатный и работает). Откройте Script в редакторе PowerGUI Script > Инструменты > Компилировать Script > Выберите любые параметры, которые вы хотели бы использовать для своего .exe(пароль защищает исходный код, автоматически закрывайте консоль после запуска EXE и т.д.).
Ответ 5
Я понял ваш вопрос как "Может ли мой скрипт PowerShell генерировать исполняемый файл?" Это то, что я пытался сделать, когда нашел этот пост. Это возможно с помощью команды Add-Type.
Add-Type -TypeDefinition @"
using System;
class Program {
public static void Main(string[] args) {
Console.WriteLine("Hello World!");
}
}
"@ -CompilerParameters @{
"GenerateExecutable" = $true
"OutputAssembly" = "test2.exe"
}
Ответ 6
PrimalScript из Sapien будет генерировать exe из PowerShell script. На машине, на которой выполняется исполняемый файл, должен быть установлен PowerShell.
Ответ 7
Решение, которое я нашел лучшим для распространения PowerShell script как exe, заключалось в том, чтобы обернуть его в NSIS исполняемый файл.
Я пишу .nsi script следующим образом:
Name "Maintenance task"
OutFile "maintenance.exe"
ShowInstDetails show
Section "Main"
;Executes the "script-to-run.ps1" PowerShell script
InitPluginsDir
SetOutPath "$pluginsdir\MyOrg" ;It is better to put stuff in $pluginsdir, $temp is shared
;extract the .ps1 and run it, collecting output into details.
File script-to-run.ps1
nsExec::ExecToLog 'powershell -inputformat none -ExecutionPolicy RemoteSigned -File "$pluginsdir\MyOrg\script-to-run.ps1" '
SetOutPath $exedir
SectionEnd
Мне просто нужно скомпилировать script в exe с помощью инструментария NSIS, и он будет запускаться на любой ОС с PowerShell, независимо от того, какова политика выполнения.
Это было вызвано этим вопросом Как вызвать PowerShell в NSIS.
Ответ 8
Там проект под названием Portable PowerShell, который по-прежнему находится в стадии бета-тестирования через пару лет... может стоить посмотреть на ваши потребности.
Ответ 9
- Онлайн конвертер PowerShell в EXE