Powershell - 运行外部 Powershell 脚本并捕获输出 - 无法传递参数

5
我在另一个powershell脚本中运行powershell脚本时遇到了问题,需要传递参数并捕获输出。我尝试使用和号运算符,通过powershell.exe -Command调用它,但似乎没有任何作用。
似乎可以使用存储在变量中的固定参数和值来解决此问题,例如:C:\path\to\script.ps1 -arg1 $value
如果没有其他方法可用,则这可能是一种解决方案,但是我想要类似于这个命令运行:& $pathToScript $params 2>&12>&1是为了捕获错误输出以及标准输出)。
有时该结构只打印脚本的路径,
有时会显示Cannot run file in the middle of pipeline
有时会抱怨无法找到所提到的脚本文件(我的路径中有时有空格,但我认为引用就足够了:引用方式如下:$path = "`"C:\path\with space\to\script.ps1`"")。
这是我想要使用它的简化功能:
Function captureScriptOutput
{
    #the function receives the script path and parameters
    param($path, $params)
    
    #this works if no params are passed, but I need params!
    $output = & $path $params 2>&1 | Out-String
}

1
一切会变得多么疯狂? - Raf
我现在编辑了我的问题,感谢您的指示。 - user3894477
2个回答

3

在同事的帮助下,我解决了这个问题。

我们采用了一些间接的方法,将 cd 命令包含到相应的目录中,然后再运行命令。这个方法非常有效。

解决方案源代码:

Function captureScriptOutput
{
    param($fileName, $params)

    cd "C:\into\path with\space"
    $output = & .\$fileName $params 2>&1 | Out-String
}

这个可以工作,甚至可以捕获错误输出。我希望其他遇到这种问题的人也能使用它来解决问题。谢谢回复!

0
尝试使用invoke-expression,但你需要测试需要多少引号。
Invoke-expression "$path $param"

谢谢您的回复,我尝试了一些操作并遇到了引号的问题。我尝试了这个命令:Invoke-Expression -Command "`"$path`" $param",但是它只会回显路径,就像我试图引用字符串$path所持有的那样:$path = "`"C:\path.ps1`""。这个MSDN页面建议将路径变量用单引号括起来,但这并没有解决路径中空格的问题。还有其他建议吗? - user3894477
有人在谷歌上建议使用与Invoke-Expression一起的“&”符号,如下所示:Invoke-Expression -Command "& $path"。这会导致Powershell抱怨它无法识别命令“&”。 - user3894477

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接