別のスクリプト内で呼び出された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
、私はそれが – arco444
ありがとうした後、あなたがしているものだと思います。ドットソーシングは私が探していたものでした。 – MikePro