2017-05-04 1 views
0

Lors de la création d'un script cmd/batch (par exemple, parent.bat), il est possible d'utiliser la commande "call" pour appeler un autre fichier de traitement par lots (par exemple child.bat). Les instructions trouvées dans le child.bat fonctionneraient dans le cadre du parent.bat. Toutes les variables que le parent.bat utiliserait, le child.bat pourrait utiliser et vice versa.Equivalent à la commande 'call' de cmd?

Est-il possible de passer des variables du parent.ps1 au child.ps1 et vice versa dans PowerShell?

+1

Lire sur le 'sourcing point' dans Powershell, je pense que c'est ce que vous êtes après – arco444

+0

Merci. Dot sourcing était ce que je cherchais. – MikePro

Répondre

1

Les scripts PowerShell appelés dans un autre script auront accès aux variables du script parent, mais toutes les modifications seront perdues lors de leur enregistrement dans la portée locale (en savoir plus 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" 

Sortie:

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

Si vous utilisez-sourcing de points (.) pour appeler l'enfant-script, il s'exécutera dans la portée du script parent, qui apportera des modifications variables dans le script enfant visible pour t le parent. Ex:

Parent.ps1

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

Sortie:

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