我在另一个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`""
答案 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"