1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
$DebugPreference='continue'
Remove-Variable X
#On manipule la variable $X en tant qu'objet de type PSVariable et non plus en tant qu'Integer
#Désormais la valeur la variable $X est accessible par le membre 'Value' de la variable $Vx
#Il s'agit du même objet mais sa représentation diffère.
#En manipulant l'objet variable et plus directement sa valeur, on peut interroger sa portée
function Set-PSScope{
Write-Debug "Dans Set-PSScope"
New-variable -name x -value ($x*2) -Description "Seconde affection de la variable X"
Write-PSScope
}
function Write-PSScope{
#Ici on ajoute une notion de portée lors de la recherche d'un variable
#0 Prompt
#1 Set-PSScope
#2 Write-PSScope : Pointe sur la portée parente de Set-PSScope,
# c'est à dire la précédente portée où l'on a déclaré une variable X.
#
#Donc par défaut lors de l'usage de la variable $X, PS (langage dynamique) recherche et référence
#,en 'remontant' la pile d'appel, la dernière déclaration de la variable $X
#
# Prompt : Première affection de la variable X -> Niveau 1
# Set-PSScope : Seconde affection de la variable X -> Niveau 2
try
{
Write-Debug "Dans Write-PSScope - portée = 2"
$Vx=get-Variable X -scope 2
write-host "`$x =$($Vx.Value) -> $($Vx.Description)"
Write-Debug "Dans Write-PSScope - portée = 1"
$Vx=get-Variable X -scope 1
write-host "`$x =$($Vx.Value) -> $($Vx.Description)"
Write-Debug "Dans Write-PSScope - portée par defaut"
$Vx=get-Variable X
write-host "`$x =$($Vx.Value) -> $($Vx.Description)"
}
catch [System.Management.Automation.PSArgumentOutOfRangeException]
{
if ($vx -eq $null)
{write-warning "Vx est null"}
Write-Warning "portée incorrecte"
}
}
New-Variable -name X -value 2 -Description "Première affection de la variable X"
$x
Write-PSScope
Set-PSScope
$x |
Partager