代码之家  ›  专栏  ›  技术社区  ›  gtx911

如何在Powershell脚本中捕获返回值

  •  18
  • gtx911  · 技术社区  · 7 年前

    我有一个powershell脚本(.ps1) 执行其他Powershell脚本 它有一个返回值。

    我使用以下命令调用脚本:

    $result = Invoke-Expression -Command ".\check.ps1 $fileCommon"
    
    Write-Output $result
    

    输出只是 Write-Ouput 有另一个脚本,但没有 $true $false .

    我怎样才能捕捉到另一个脚本的返回?

    2 回复  |  直到 7 年前
        1
  •  10
  •   TToni    7 年前

    一句话背后的表情 return PowerShell中的语句会像其他表达式一样进行计算。如果它产生输出,则写入标准输出。$result接收脚本写入stdout的内容。如果不止一个东西被写入stdout,那么这些东西将被放入一个数组中。

    所以如果你的支票。例如,ps1如下所示:

    Write-Output "$args[0]"
    return $false
    

    你称之为

    $result = &".\check.ps1" xxx
    

    然后 $result 将是一个大小为2的对象数组,其值为“xxx”(字符串)和“False”(bool)。

    如果无法更改脚本,使其只将返回值写入stdout(这是最干净的方式),则可以忽略除最后一个值以外的所有内容:

    $result = &".\check.ps1" xxx | select -Last 1
    

    现在 $result 将只包含“False”作为布尔值。

    如果可以更改脚本,另一个选项是传递一个变量名并在脚本中设置它。

    电话:

    &".\check.ps1" $fileCommon "result"
    if ($result) {
        # Do things
    }
    

    脚本:

    param($file,$parentvariable)
    # Do things
    Set-Variable -Name $parentvariable -Value $false -Scope 1
    

    这个 -Scope 1 指父(调用方)作用域,因此您可以从调用代码中读取它。