返回
PowerShell脚本中如何区分返回值和参数?
windows
2024-03-20 07:19:17
在 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 脚本中分离返回变量和参数。这可以帮助你专注于所需的信息,并避免不必要的混乱。
常见问题解答
-
为什么传递给脚本的参数会包含在输出中?
这是 PowerShell 的默认行为。它会将所有输出传递给调用脚本的命令。
-
[cmdletbinding()]
参数如何工作?这个参数创建了一个特殊对象,其中包含输入参数和输出返回值。
-
我如何访问返回变量?
使用
$PSCmdlet.ReturnValue
访问返回变量。 -
这种方法与使用
-OutVariable
参数有什么区别?-OutVariable
参数将返回值存储在指定的变量中,而[cmdletbinding()]
参数创建一个包含参数和返回值的对象。 -
这种方法有什么好处?
这种方法使你可以更轻松地访问返回变量,并避免混淆,因为参数和返回值不会混合在同一输出中。