Consider the following code:
$x = 1
function changeit {
"Changing `$x. Was: $x"
$x = 2
"New value: $x"
}
"`$x has value $x"
changeit
"`$x has value $x"
Not too complicated, right. Let’s see what happens when we run it:
$x has value 1
Changing $x. Was: 1
New value: 2
$x has value 1
What’s going on? Well, trying to change the value of $x inside the function did not work. Why not? What the statement $x = 2
actually does, is to create a local variable inside the function and give it the value of 2. Let’s fix that:
$x = 1
function changeit {
"Changing `$x. Was: $x"
$script:x = 2
"New value: $x"
}
"`$x has value $x"
changeit
"`$x has value $x"
Now, we run it again:
$x has value 1
Changing $x. Was: 1
New value: 2
$x has value 2
The thing is that we have to explicitly tell Powershell to update the variable in the parent scope instead of creating a new variable in the current scope.