相当于cmd' call'命令?

时间:2017-05-04 10:53:07

标签: powershell

创建cmd /批处理脚本(例如parent.bat)时,可以使用'来电'命令调用另一个批处理文件(例如child.bat)。 child.bat中的说明将作为parent.bat的一部分运行。 parent.bat将使用的任何变量,child.bat都可以使用,反之亦然。

是否可以在PowerShell中将变量从parent.ps1传递到child.ps1,反之亦然?

1 个答案:

答案 0 :(得分:1)

在另一个脚本内部调用的PowerShell脚本可以访问父脚本的变量,但任何修改都会丢失,因为它们保存在本地范围内(阅读更多about scopes here)。

Parent.ps1

$MyVariable = "Foo"
Write-Host "PARENT BEFORE: MyVariable: $MyVariable"
& "$PSScriptRoot\Child.ps1"
Write-Host "PARENT AFTER: MyVariable: $MyVariable"

Child.ps1

Write-Host "CHILD BEFORE: MyVariable: $MyVariable"
$MyVariable = "Bar"
Write-Host "CHILD AFTER: MyVariable: $MyVariable"

输出:

PS > .\Parent.ps1
PARENT BEFORE: MyVariable: Foo
CHILD BEFORE: MyVariable: Foo
CHILD AFTER: MyVariable: Bar
PARENT AFTER: MyVariable: Foo

如果使用dot-sourcing(.)来调用子脚本,它将在父脚本的Scope中运行,这将使子脚本中的变量修改对父项可见。例如:

Parent.ps1

$MyVariable = "Foo"
Write-Host "PARENT BEFORE: MyVariable: $MyVariable"
. "$PSScriptRoot\Child.ps1"
Write-Host "PARENT AFTER: MyVariable: $MyVariable"

输出:

PARENT BEFORE: MyVariable: Foo
CHILD BEFORE: MyVariable: Foo
CHILD AFTER: MyVariable: Bar
PARENT AFTER: MyVariable: Bar