Подтвердить что ты не робот

Создание исполняемого файла .exe из скрипта PowerShell?

Можно ли создать исполняемый файл file.exe из скрипта PowerShell?

4b9b3361

Ответ 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, который по-прежнему находится в стадии бета-тестирования через пару лет... может стоить посмотреть на ваши потребности.

http://shelltools.wik.is/Portable_PowerShell