2017-05-04 4 views
0

Beim Erstellen eines Cmd/Batch-Skripts (z. B. parent.bat) ist es möglich, den Befehl 'call' zu verwenden, um eine andere Stapeldatei (z. B. child.bat) aufzurufen. Die Anweisungen, die in der child.bat gefunden werden, würden als Teil der parent.bat laufen. Alle Variablen, die parent.bat verwenden würde, die child.bat könnten verwenden und umgekehrt.Entspricht cmd 'call' Befehl?

Ist es möglich, Variablen von parent.ps1 zu child.ps1 und umgekehrt in PowerShell zu übertragen?

+1

Informieren Sie sich über 'dot-Sourcing' in Powershell, ich denke, das ist, was Sie nach – arco444

+0

Danke. Dot Sourcing war, was ich gesucht habe. – MikePro

Antwort

1

PowerShell-Skripte, die in einem anderen Skript aufgerufen werden, haben Zugriff auf die Variablen des übergeordneten Skripts, aber alle Änderungen gehen verloren, da sie im lokalen Gültigkeitsbereich gespeichert werden (lesen Sie mehr 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" 

Ausgang:

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

Wenn Sie Dot-Sourcing (.) das Kind-Skript aufrufen, es wird im Bereich des übergeordneten Skripts ausgeführt, wodurch Variablenänderungen im untergeordneten Skript für t sichtbar gemacht werden er Elternteil. Ex:

Parent.ps1

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

Ausgang:

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