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

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

ryok 24-06-2022 21:58 2987233

Запуск скрипта c github с параметрами
 
Запускаю скрипт powershell через файл .bat

Код:

@echo off

powershell -Command "& {[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12}"; "& {Invoke-WebRequest -UseBasicParsing 'https://raw.githubusercontent.com/test/main/test.ps1' | Invoke-Expression}"

pause
exit

В самом скрипте powershell есть возможность указать параметры, но не могу их передать через cmd.

Если запускать напрямую через терминал powershell, то получилось передать параметры вот так
Код:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-Expression "& { $(Invoke-WebRequest -UseBasicParsing 'https://raw.githubusercontent.com/test/main/test.ps1') } -param1 -param2 -param3"
но важен именно запуск через bat файл, а там сыпет ошибками или просто запускает скрипт без параметров...

Serguei Kouzmine 25-06-2022 07:40 2987241

а почему же именно через бат ? объясните

на двух стульях сложно усидеть

ryok 25-06-2022 12:02 2987254

Для меня это просто удобнее, запускать различные скрипты с гитхаба через двойной клик по файлу

DJ Mogarych 25-06-2022 12:08 2987255

На скрипт Powershell можно создать ярлык и запускать его точно так же.

Код:

powershell -f "C:\temp\script.ps1" -executionpolicy bypass

ryok 25-06-2022 12:19 2987256

DJ Mogarych,
скрипт .ps1 находится на гитхабе

DJ Mogarych 25-06-2022 12:36 2987258

Создайте .ps1 с тем, что вы запускаете через терминал PS, и сделайте на него ярлык.

Sham 25-06-2022 16:04 2987267

-Command одной строкой надо, а там две получается. Видимо нужно убрать две " в середине (где "; " оставить ; ).

ryok 25-06-2022 17:02 2987273

Sham,
убрал
Код:

powershell -Command "& {[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12}; & {Invoke-WebRequest -UseBasicParsing 'https://raw.githubusercontent.com/test/main/test.ps1' | Invoke-Expression}"
в таком варианте тоже скрипт запускает, но как правильно указать ему параметры ?

Serguei Kouzmine 25-06-2022 18:40 2987278

вот так например
Код:

powershell.exe -executionpolicy bypass -command "&{ write-host ('processing arguments: {0}' -f ($args -join ',' )) }" a b c d
Код:

processing arguments: a,b,c,d

ryok 25-06-2022 19:09 2987282

Serguei Kouzmine,
подскажите пожалуйста как это все соединить ? с предыдущим моим постом

Serguei Kouzmine 25-06-2022 20:52 2987287

запустить любимый тексторый редактор и написать код :- )
кто же знает какие аргументы просит скрипт который вы скачиваете из враждебного интернета и запускаете в mac brew style (вероятно этим хитроумно обходя наивную систему информационной безопасности места работы)

когда это вскроется - найдут всех
так что вы уж сами

Sham 25-06-2022 23:13 2987290

Вы передаёте параметры в script block и это работает, а выше уже он изменён на пайп внутри блока. Нужно типа этого: "&{...} -param1 -param2 -param3" | Invoke-Expression

ryok 25-06-2022 23:51 2987293

Sham,
получилось так
Код:

powershell -Command "& {[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12}; &{Invoke-WebRequest -UseBasicParsing 'https://raw.githubusercontent.com/test/main/test.ps1'} -param1" | Invoke-Expression
но окно терминале не открывается даже

Serguei Kouzmine 25-06-2022 23:53 2987294

потому что опять синтаксическая ошибка в one-liner'е

скорее всего вам надо не "копипастить" а творчески перерабатывать фрагменты кода которые вам предлагают

исключтельно для ознакомления и без каких бы то ни было гарантий

Sham 26-06-2022 00:03 2987295

вся команда должна быть в кавычках, а двойные кавычки внутри дублируются. Вроде так
Код:

powershell -Command "& {[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12}; ""& { $(Invoke-WebRequest -UseBasicParsing 'https://raw.githubusercontent.com/test/main/test.ps1') } -param1 -param2 -param3"" | Invoke-Expression"
вот это $(...) тоже нельзя убирать, оно раскрывается внутри строки в код из скрипта.

Serguei Kouzmine 26-06-2022 00:30 2987296

Цитата:

Цитата Sham
Вы передаёте параметры в script block и это работает, а выше уже он изменён на пайп внутри блока. Нужно типа этого: "&{...} -param1 -param2 -param3" | Invoke-Expression »

@Sham не забудьто про значения

to pass parameters have to include entire "$command -param1 $param1 -param2 $param2 ..." line
in a string and then pass that string to the Command parameter.
https://adamtheautomator.com/invoke-expression/

Sham 26-06-2022 01:11 2987297

значение можно передать в одинарных кавычках -param1 'с пробелом'. Если в двойных, то нужно двойное экранирование -param1 """"с пробелом""""

ryok 26-06-2022 03:23 2987299

Sham,
заработало, только нужно еще добавить кавычек, а то была ошибка "В строке отсутствует завершающий символ"

Код:

powershell -Command "& {[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12}; """"& { $(Invoke-WebRequest -UseBasicParsing 'https://raw.githubusercontent.com/test/main/test.ps1') } -param1 -param2 -param3"""" | Invoke-Expression"
Спасибо вам большое за помощь.


Время: 14:39.

Время: 14:39.
© OSzone.net 2001-