Войти

Показать полную графическую версию : [решено] Создание исполняемого файла на основе скрипта PowerShell


lxa85
22-08-2022, 18:23
Тема является выделенной из Как полюбить PowerShell? (http://forum.oszone.net/thread-351766.html) для поддержания чистоты и порядка.
Есть скрипт
Write-Output -InputObject 'Hello World'

Совершенно бестолковый, выводит "Привет мир!"
Я хочу из данного скрипта сделать исполняемый файл.
Допустим гугл нам подскажет команду Ps2Exe.

PS C:\Users\Andrew\Documents\PS_test> ps2exe -inputFile C:\Users\Andrew\Documents\PS_test\helloWorld.ps1 -outputFile C:\Users\Andrew\Documents\PS_test\helloWorld.ps1 -iconFile C:\Data\Icon.ico -noConsole -title "MyScript" -version 0.0.0.1
PS2EXE-GUI v0.5.0.27 by Ingo Karstein, reworked and GUI support by Markus Scholtes

& : Имя "Invoke-ps2exe" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а также наличие и
правильность пути, после чего повторите попытку.
строка:1 знак:2
+ &'Invoke-ps2exe' -inputFile C:\Users\Andrew\Documents\PS_test\helloW ...
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Invoke-ps2exe:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

PS C:\Users\Andrew\Documents\PS_test> ps2exe
PS2EXE-GUI v0.5.0.27 by Ingo Karstein, reworked and GUI support by Markus Scholtes

Usage:

Invoke-ps2exe [-inputFile] '<filename>' [[-outputFile] '<filename>']
[-prepareDebug] [-x86|-x64] [-lcid <id>] [-STA|-MTA] [-noConsole] [-UNICODEEncoding]
[-credentialGUI] [-iconFile '<filename>'] [-title '<title>'] [-description '<description>']
[-company '<company>'] [-product '<product>'] [-copyright '<copyright>'] [-trademark '<trademark>']
[-version '<version>'] [-configFile] [-noOutput] [-noError] [-noVisualStyles] [-exitOnCancel]
[-DPIAware] [-requireAdmin] [-supportOS] [-virtualize] [-longPaths]


Вот то ли лыжи не едут, то ли я понятия не имею, что ей от меня надо.
Причем не важно, короткая форма вызова будет или нет -- Имя командлета не распознано.
Но! Если его вызвать просто так (ps2exe?, Invoke-ps2exe) -- то командлет находится.

Можно через графику (win-ps2exe), можно другими инструментами (powershell on steroids). Т.е. задача решаема, это не проблема.
Проблема мне понять что здесь идет не так.

DJ Mogarych
22-08-2022, 21:57
У вас у входного и выходного файла одинаковые имена и расширения, может, дело в этом?

lxa85
23-08-2022, 09:23
Да, ошибка в написании есть, но нет, ситуацию это не спасает.
PS C:\Users\Andrew\Documents\PS_test> ps2exe -inputFile C:\Users\Andrew\Documents\PS_test\helloWorld.ps1 -outputFile C:\Users\Andrew\Documents\PS_test\111.exe
PS2EXE-GUI v0.5.0.27 by Ingo Karstein, reworked and GUI support by Markus Scholtes

& : Имя "Invoke-ps2exe" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а также наличие и
правильность пути, после чего повторите попытку.
строка:1 знак:2
+ &'Invoke-ps2exe' -inputFile C:\Users\Andrew\Documents\PS_test\helloW ...
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Invoke-ps2exe:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Есть предположение, что windows не переустанавливался очень давно и система захламлена. (Гипотетически)
Я с какой-нибудь оказией попробую на чистой установке.

DJ Mogarych
23-08-2022, 09:41
Надо поставить ps2exe как модуль в Powershell, это было сделано?

https://github.com/MScholtes/PS2EXE#installation

lxa85
23-08-2022, 10:15
Версия ps

PS C:\Users\Andrew\Documents\PS_test>
PS C:\Users\Andrew\Documents\PS_test> Install-Module ps2exe
PS C:\Users\Andrew\Documents\PS_test> ps2exe -inputFile C:\Users\Andrew\Documents\PS_test\helloWorld.ps1 -outputFile C:\Users\Andrew\Documents\PS_test\111.exe
PS2EXE-GUI v0.5.0.27 by Ingo Karstein, reworked and GUI support by Markus Scholtes

& : Имя "Invoke-ps2exe" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а также наличие и
правильность пути, после чего повторите попытку.
строка:1 знак:2
+ &'Invoke-ps2exe' -inputFile C:\Users\Andrew\Documents\PS_test\helloW ...
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Invoke-ps2exe:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

PS C:\Users\Andrew\Documents\PS_test> ls

Directory: C:\Users\Andrew\Documents\PS_test

Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 21.08.2022 9:44 1558 helloWorld.ps1
-a--- 20.08.2022 19:45 32768 hw.exe
-a--- 20.08.2022 19:51 24576 hw_console.exe
-a--- 21.08.2022 9:10 281088 tt.exe

PS C:\Users\Andrew\Documents\PS_test> $PSVersionTable

Name Value
---- -----
PSVersion 7.2.0-preview.10
PSEdition Core
GitCommitId 7.2.0-preview.10
OS Microsoft Windows 10.0.17763
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0



----

Значит, дело было так.
В PS версии 7 это фигня через установку модуля не отрабатывает. Причем молчит как резанная.
В PS версии 5, открытой от имени администратора после Install-Module потребовался
Import-Module
PS C:\Windows\system32> Install-Module ps2exe

Для продолжения требуется поставщик NuGet
Для взаимодействия с репозиториями на основе NuGet модулю PowerShellGet требуется версия поставщика NuGet "2.8.5.201"
или более новая. Поставщик NuGet должен быть доступен в "C:\Program Files\PackageManagement\ProviderAssemblies" или
"C:\Users\Andrew\AppData\Local\PackageManagement\ProviderAssemblies". Поставщик NuGet можно также установить, выполнив
команду "Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force". Вы хотите, чтобы модуль PowerShellGet
установил и импортировал поставщик NuGet прямо сейчас?
[Y] Да - Y [N] Нет - N [S] Приостановить - S [?] Справка (значением по умолчанию является "Y"): y

Ненадежный репозиторий
Идет установка модулей из ненадежного репозитория. Если вы доверяете этому репозиторию, измените его значение
InstallationPolicy, запустив командлет Set-PSRepository. Вы действительно хотите установить модули из "PSGallery"?
[Y] Да - Y [A] Да для всех - A [N] Нет - N [L] Нет для всех - L [S] Приостановить - S [?] Справка
(значением по умолчанию является "N"):y

PS C:\Users\Andrew\Documents\PS_test> ps2exe
ps2exe : Команда "ps2exe" найдена в модуле "ps2exe", но загрузить этот модуль не удалось. Для получения дополнительных
сведений выполните команду "Import-Module ps2exe".

Import-Module потребовал включение политики выполнения скриптов Set-ExecutionPolicy
PS C:\Users\Andrew\Documents\PS_test> Set-ExecutionPolicy

Командлет Set-ExecutionPolicy в конвейере команд в позиции 1
Укажите значения для следующих параметров:
ExecutionPolicy: Unrestricted
И только после этого
PS C:\Users\Andrew\Documents\PS_test> ps2exe
PS2EXE-GUI v0.5.0.27 by Ingo Karstein, reworked and GUI support by Markus Scholtes
PS C:\Users\Andrew\Documents\PS_test> ps2exe .\helloWorld.ps1
PS2EXE-GUI v0.5.0.27 by Ingo Karstein, reworked and GUI support by Markus Scholtes


Reading input file C:\Users\Andrew\Documents\PS_test\helloWorld.ps1
Compiling file...

Output file C:\Users\Andrew\Documents\PS_test\helloWorld.exe written
PS C:\Users\Andrew\Documents\PS_test> ls


Каталог: C:\Users\Andrew\Documents\PS_test


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 23.08.2022 10:05 29184 helloWorld.exe
-a---- 21.08.2022 9:44 1558 helloWorld.ps1


Так же начало работать и в PS версии 7.
PS C:\Users\Andrew\Documents\PS_test> ps2exe -inputFile C:\Users\Andrew\Documents\PS_test\helloWorld.ps1 -outputFile C:\Users\Andrew\Documents\PS_test\111.exe
PS2EXE-GUI v0.5.0.27 by Ingo Karstein, reworked and GUI support by Markus Scholtes

PowerShell Desktop environment started...


Reading input file C:\Users\Andrew\Documents\PS_test\helloWorld.ps1
Compiling file...

Output file C:\Users\Andrew\Documents\PS_test\111.exe written

PS C:\Users\Andrew\Documents\PS_test> ls

Directory: C:\Users\Andrew\Documents\PS_test

Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 23.08.2022 10:13 29184 111.exe
-a--- 23.08.2022 10:05 29184 helloWorld.exe
-a--- 21.08.2022 9:44 1558 helloWorld.ps1




© OSzone.net 2001-2012