【问题标题】:Powershell - Run external powershell script and capture output - Can't pass parametersPowershell - 运行外部 powershell 脚本并捕获输出 - 无法传递参数
【发布时间】:2014-09-15 13:28:14
【问题描述】:

我在另一个 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,而
有时它会抱怨它找不到提到的脚本文件(我的路径中有时会有空格,但我认为引用它就足够了:引用是这样完成的$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
}

【问题讨论】:

  • 一切都有多疯狂?
  • 现在编辑了我的问题,感谢您的指示。

标签: powershell ampersand


【解决方案1】:

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

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

解决方案源码:

Function captureScriptOutput
{
    param($fileName, $params)

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

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

Cheerioh,感谢您的回复!

【讨论】:

    【解决方案2】:

    尝试使用调用表达式,但您需要测试需要多少引用

    Invoke-expression "$path $param"
    

    【讨论】:

    • 感谢您的回复,我试了一下,遇到报价问题。我试过这个:Invoke-Expression -Command "`"$path`" $param",它只回显了路径,就像我试图引用字符串$path 持有的:$path = "`"C:\path.ps1`""一样。这个MSDN Page 建议用单引号将路径变量括起来,这不能解决路径中的空格问题。那么,还有什么建议吗?
    • google 上的其他人建议将 & 符号与 Invoke-Expression 一起使用,如下所示:Invoke-Expression -Command "& $path"。这导致 Powershell 抱怨它无法识别命令 &
    猜你喜欢
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 2020-12-20
    • 2021-05-13
    • 1970-01-01
    • 2023-01-31
    • 2021-06-21
    相关资源
    最近更新 更多