Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Создание исполняемого файла на основе скрипта PowerShell (http://forum.oszone.net/showthread.php?t=351767)

lxa85 22-08-2022 18:23 2990926

Создание исполняемого файла на основе скрипта PowerShell
 
Тема является выделенной из Как полюбить PowerShell? для поддержания чистоты и порядка.
Есть скрипт
Код:

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 2990943

У вас у входного и выходного файла одинаковые имена и расширения, может, дело в этом?

lxa85 23-08-2022 09:23 2990959

Да, ошибка в написании есть, но нет, ситуацию это не спасает.
Код:

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 2990961

Надо поставить ps2exe как модуль в Powershell, это было сделано?

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

lxa85 23-08-2022 10:15 2990963

Версия 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



Время: 15:48.

Время: 15:48.
© OSzone.net 2001-