返回

PowerShell脚本中如何区分返回值和参数?

windows

在 PowerShell 脚本中分离返回变量和参数

问题

在执行 PowerShell 脚本时,你可能希望仅获取返回变量,而排除传递给脚本的参数。然而,默认情况下,输出将包含两者,这可能会带来困惑和不便。

解决方案

要解决这个问题,可以使用 [cmdletbinding()] 参数将脚本参数与返回值分开。这个参数创建一个特殊对象,其中包含输入参数和输出返回值。要访问返回变量,请使用 $PSCmdlet.ReturnValue

步骤

1. 在脚本中分离参数和返回值

[cmdletbinding()]
param (
    [Parameter(Mandatory=$true)]
    [string]
    $mypass,

    [Parameter(Mandatory=$true)]
    [string]
    $myuser,

    [Parameter(Mandatory=$true)]
    [string]
    $ServerName
)

$returnValues = "cmdb_ci_linux_server,2,8.9,Test,10.130.68.75"
$PSCmdlet.ReturnValue = $returnValues

2. 在工作流中获取返回变量

$scriptOutput = Invoke-Expression -Command & '.\get_details.ps1' -mypass *** -myuser svc_AMS_AppReliabilityEng -ServerName remoteserver777 | Select-Object -ExpandProperty ReturnValue

注意

  • 确保 get_details.ps1 脚本保存在工作流可以访问的位置。
  • 替换 *** 为你的实际密码。

结论

通过使用 [cmdletbinding()] 参数,你可以轻松地在 PowerShell 脚本中分离返回变量和参数。这可以帮助你专注于所需的信息,并避免不必要的混乱。

常见问题解答

  1. 为什么传递给脚本的参数会包含在输出中?

    这是 PowerShell 的默认行为。它会将所有输出传递给调用脚本的命令。

  2. [cmdletbinding()] 参数如何工作?

    这个参数创建了一个特殊对象,其中包含输入参数和输出返回值。

  3. 我如何访问返回变量?

    使用 $PSCmdlet.ReturnValue 访问返回变量。

  4. 这种方法与使用 -OutVariable 参数有什么区别?

    -OutVariable 参数将返回值存储在指定的变量中,而 [cmdletbinding()] 参数创建一个包含参数和返回值的对象。

  5. 这种方法有什么好处?

    这种方法使你可以更轻松地访问返回变量,并避免混淆,因为参数和返回值不会混合在同一输出中。