2017-05-04 6 views
0

cmd /バッチスクリプト(例:parent.bat)を作成するときに、 'call'コマンドを使用して別のバッチファイル(例:child.bat)を呼び出すことができます。 child.batにある指示は、parent.batの一部として実行されます。 parent.batが使用する任意の変数child.batが使用でき、その逆も可能です。cmd 'call'コマンドに相当しますか?

PowerShellでparent.ps1からchild.ps1に変数を渡すことは可能ですか?その逆も可能ですか?

+1

、私はそれが – 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" 

出力:PowerShellで 'ドットソーシング' をよく読んで

PARENT BEFORE: MyVariable: Foo 
CHILD BEFORE: MyVariable: Foo 
CHILD AFTER: MyVariable: Bar 
PARENT AFTER: MyVariable: Bar 
関連する問題