2015-10-19 119 views
1

我有以下(不工作)poweshell脚本:如何在Powershell中将参数传递给Invoke-Expression?

$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. 执行脚本(对我来说,这是在现在的cli)。

但它的示数:

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" 

你必须调用它之前创建的源脚本块。

+0

>“在调用它之前,您必须从源创建一个ScriptBlock。” - 事实上并非如此。您可以使用IEX,II和&call运算符来调用Posh代码的字符串表示形式。 – ChadT

+0

@DaRKoN_and ..我可以传入命名参数吗?例如。 '-version 1.2.3.4 -source pewPew -foo whatever' ?? < - 并且这些参数与脚本中列出的参数的顺序不同 –

+0

@DaRKoN_您可以调用脚本,但$ Scriptpath不是脚本路径,而是脚本的源,而且我不请参阅如何使用Invoke-Item从源文件启动脚本,而不是将源文件保存到文件。我在这里给出的答案。 – JPBlanc

相关问题