2015-10-19 2 views
1

У меня есть следующий (не работает) poweshell скрипт:Как передать аргументы вызывающему выражению в Powershell?

$scriptPath = ((new-object net.webclient).DownloadString('https://gist.githubus 
ercontent.com/AndrewSav/c4fb71ae1b379901ad90/raw/23f2d8d5fb8c9c50342ac431cc0360ce44465308/SO33205298')); $args = "`"aaa 
bbb`""; iex $scriptPath $args 

Так я:

  1. загрузки скрипта для выполнения.
  2. создание списка аргументов для отправки в скрипт
  3. Выполнение скрипта (для меня это прямо сейчас в кли).

но это erroring:

Invoke-Expression : A positional parameter cannot be found that accepts argument '"aaa bbb"'. 
At line:1 char:209 
+ ... 44465308/SO33205298')); $args = "`"aaa bbb`""; iex $scriptPath $args 
+              ~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidArgument: (:) [Invoke-Expression], ParentContainsErrorRecordException 
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeExpressionCommand 

Может кто-нибудь помочь мне понять, как пройти в аргументах к этому сценарию?

Примечание: этот вопрос ссылается/создается от this other SO question.

ответ

1

Вы должны попробовать что-то вроде этого:

$scriptPath = ((new-object net.webclient).DownloadString('https://gist.githubusercontent.com/AndrewSav/c4fb71ae1b379901ad90/raw/23f2d8d5fb8c9c50342ac431cc0360ce44465308/SO33205298')) 
Invoke-Command -ScriptBlock ([scriptblock]::Create($scriptPath)) -ArgumentList "coucou" 

Вы должны создать ScriptBlock от источника перед вызовом его.

+0

> «Вы должны создать ScriptBlock из исходного кода перед его вызовом». - На самом деле это не так. Вы можете использовать IEX, II и оператор & call, чтобы все вызывали строковое представление Posh-кода. – ChadT

+0

@DaRKoN_and .. могу ли я передать именованные аргументы? например. '-version 1.2.3.4 -source PewPew -foo any' ?? <- и эти аргументы не находятся в том же порядке, что и параметр, указанный в скрипте –

+0

@DaRKoN_ Вы можете использовать скрипт скрипта, но $ Scriptpath - это не путь к скрипту, а источник сценария, и я не см., как вы начинаете сценарий из источника с Invoke-Item, иначе, чем сохранение источника в файл. Ответ, который я даю здесь. – JPBlanc