Войти

Показать полную графическую версию : [решено] Запуск скрипта c github с параметрами


ryok
24-06-2022, 21:58
Запускаю скрипт 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
а почему же именно через бат ? объясните

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

ryok
25-06-2022, 12:02
Для меня это просто удобнее, запускать различные скрипты с гитхаба через двойной клик по файлу

DJ Mogarych
25-06-2022, 12:08
На скрипт Powershell можно создать ярлык и запускать его точно так же.


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

ryok
25-06-2022, 12:19
DJ Mogarych,
скрипт .ps1 находится на гитхабе

DJ Mogarych
25-06-2022, 12:36
Создайте .ps1 с тем, что вы запускаете через терминал PS, и сделайте на него ярлык.

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

ryok
25-06-2022, 17:02
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
вот так например
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
Serguei Kouzmine,
подскажите пожалуйста как это все соединить ? с предыдущим моим постом

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

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

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

ryok
25-06-2022, 23:51
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
потому что опять синтаксическая ошибка в one-liner'е

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

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

Sham
26-06-2022, 00:03
вся команда должна быть в кавычках, а двойные кавычки внутри дублируются. Вроде так
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
Вы передаёте параметры в 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
значение можно передать в одинарных кавычках -param1 'с пробелом'. Если в двойных, то нужно двойное экранирование -param1 """"с пробелом""""

ryok
26-06-2022, 03:23
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"


Спасибо вам большое за помощь.




© OSzone.net 2001-2012