gtx*_*911 8 powershell return-value invoke
我有一个Powershell脚本(.ps1),该脚本执行具有返回值的其他Powershell脚本。
我使用以下命令调用脚本:
$result = Invoke-Expression -Command ".\check.ps1 $fileCommon"
Write-Output $result
Run Code Online (Sandbox Code Playgroud)
输出仅Write-Ouput是具有其他脚本的,而没有返回值是$true或$false。
如何捕捉其他脚本的收益?
TTo*_*oni 14
return在PowerShell中,语句后面的表达式将像其他所有表达式一样被求值。如果产生输出,则将其写入stdout。您的$ result会收到脚本写入stdout的任何内容。如果将多个内容写入stdout,则将这些内容放入一个数组中。
因此,如果您的check.ps1例如如下所示:
Write-Output "$args[0]"
return $false
Run Code Online (Sandbox Code Playgroud)
然后用
$result = &".\check.ps1" xxx
Run Code Online (Sandbox Code Playgroud)
那么$result将是一个大小为2的对象数组,其值为“ xxx”(字符串)和“ False”(布尔)。
如果您不能更改脚本,从而只将返回值写入stdout(这是最干净的方法),则可以忽略除最后一个值以外的所有内容:
$result = &".\check.ps1" xxx | select -Last 1
Run Code Online (Sandbox Code Playgroud)
现在$result将仅包含“ False”作为布尔值。
如果可以更改脚本,则另一种选择是传递变量名并将其设置在脚本中。
呼叫:
&".\check.ps1" $fileCommon "result"
if ($result) {
# Do things
}
Run Code Online (Sandbox Code Playgroud)
脚本:
param($file,$parentvariable)
# Do things
Set-Variable -Name $parentvariable -Value $false -Scope 1
Run Code Online (Sandbox Code Playgroud)
该-Scope 1指父(主叫)的范围,所以你可以从调用代码读取它。
| 归档时间: |
|
| 查看次数: |
12360 次 |
| 最近记录: |