Создание исполняемого файла .exe из скрипта PowerShell? - PullRequest
31 голосов
/ 21 сентября 2010

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

Ответы [ 8 ]

19 голосов
/ 07 января 2011

Нет.По крайней мере, пока, и после 5 версий PowerShell это кажется маловероятным.

Хотелось бы просто оставить все как есть, но другие люди предоставили кучу ответов типа «обходной путь», которые я чувствую себя вынужденнымипо адресу:

Вы можете обернуть свой сценарий .ps1 в другой тип сценария, чтобы сделать его двойным щелчком, и вы даже можете сгенерировать исполняемый файл со встроенным сценарием (см. другие ответы наэтот поток) ... но эти "исполняемые файлы" требуют правильной версии 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 , возможно, будет возможно упаковать что-то вродеf-распаковка zip, которая будет содержать правильную версию PowerShell и скрипт и будет работать.Это , а не исполняемый файл в любом обычном смысле этого слова - это немного похоже на то, если бы Valve решила просто отправить образ vmware на флэш-накопитель в качестве своего решения, позволяющего пользователям Linux играть в Half Life.Однако продукт кажется заброшенным.

С PrimalScript (или PowerShell Studio ) или PowerGui или pShellExec , вашСкрипт может быть зашифрован, так что он немного защищен от посторонних глаз ... но это в основном просто запутывание, и, по сути, ничем не отличается от командного файла, а в некоторых отношениях хуже.

8 голосов
/ 21 сентября 2010

Из коробки - нет. Однако я создал сценарий PowerShell, который может взять сценарий и создать обертку EXE вокруг него. Я создал этот скрипт некоторое время назад, но решил опубликовать его здесь , чтобы люди могли его проверить.

7 голосов
/ 20 марта 2017

Да, есть возможность с 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-репо, которое называется PythonEXE .

В нем демонстрируется, как создать исполняемый файл из проекта Python, а также предоставляется пошаговая инструкция YouTube.Руководство.

6 голосов
/ 30 июня 2014

Использование Редактор скриптов PowerGUI (это бесплатно и работает).Откройте сценарий в редакторе сценариев PowerGUI> Инструменты> Сценарий компиляции> Выберите любые параметры, которые вы хотите использовать для своего .exe (исходный код для защиты паролем, автоматическое закрытие консоли после запуска .exe и т. Д.).

3 голосов
/ 06 февраля 2018

Я понял ваш вопрос как "Может ли мой скрипт 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"
}
2 голосов
/ 27 января 2013

Решение, которое я нашел наилучшим для распространения сценария PowerShell в виде exe, заключалось в том, чтобы заключить его в исполняемый файл NSIS .

Я пишу скрипт .nsi так:

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

Мне просто нужно скомпилировать сценарий в исполняемый файл с помощью цепочки инструментов NSIS, и он будет работать на любой ОС с PowerShell, независимо от политики выполнения.

Этот вопрос был вдохновлен этим вопросом Как вызвать PowerShell в NSIS .

2 голосов
/ 21 сентября 2010

PrimalScript из Sapien создаст исполняемый файл из сценария PowerShell.На компьютере, на котором выполняется исполняемый файл, должен быть установлен PowerShell.

0 голосов
/ 28 сентября 2010

Существует проект Portable PowerShell, который через пару лет все еще находится в бета-версии ... возможно, стоит обратить внимание на ваши потребности.

http://shelltools.wik.is/Portable_PowerShell

...