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

时间:2014-09-15 13:28:14

标签: powershell ampersand

我在另一个PowerShell脚本中运行powershell脚本时遇到问题,传递参数并捕获输出 我尝试过使用&号运算符,通过powershell.exe -Command调用它,但似乎没有任何效果 让我疯狂的是,我可以在没有参数的情况下执行脚本并捕获输出,但是一旦参数加入游戏,一切都会变得疯狂。
似乎很多人都知道这个问题,但不幸的是我无法找到解决方案。

似乎有用的是使用固定参数和存储在变量中的值,如C:\path\to\script.ps1 -arg1 $value 如果没有其他工作,这可能会提供解决方案,但我想运行类似于此& $pathToScript $params 2>&1的命令(2>&1用于捕获错误输出以及标准)。

非常感谢任何帮助,如果您能够指出我正确的方向,我会在您之后命名该功能!
提前谢谢。

修改
忘记包含错误信息,对不起 有时构造只打印脚本的路径,
有时它会说Cannot run file in the middle of pipeline和有时它抱怨它无法找到提到的脚本文件(我有时在我的路径中有空格,但我想引用它就足够了:引用就像这样{{1} })。

这是我想在其中使用的简化函数:

$path = "`"C:\path\with space\to\script.ps1`""

2 个答案:

答案 0 :(得分:3)

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

我们进行了一点间接,并将cd包含在相应的目录中,然后运行命令。这就像一个魅力。

解决方案源代码:

Function captureScriptOutput
{
    param($fileName, $params)

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

这可以工作甚至捕获错误输出,我希望其他一些人遇到这种问题可以用它来解决他们的问题。

Cheerioh,谢谢你的回复!

答案 1 :(得分:0)

尝试使用invoke-expression,但需要测试需要多少引用

Invoke-expression "$path $param"