2017-05-04 46 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