2017-05-04 45 views
0

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

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

+1

在PowerShell中的 '点采购' 读了起来,我觉得这是你以后 – arco444

+0

谢谢。点源是我一直在寻找的。 – MikePro

回答

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 

如果使用点采购(.)来调用子脚本,它将运行在父脚本的作用域中,该脚本将在子脚本中对t可见的变量进行修改他的父母。例如:

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