I want to have an array and add elements to it from different functions in my script. My example below illustrates where I might be misunderstanding something regarding scope. My understanding currently is that if an array is defined outside the function, and then elements are added inside the function, those elements should be available outside the function.
Function ListRunningServices
{
$services+= Get-Service | ?{$_.Status -eq "Running"} | sort Name | select Name;
}
$services = @();
ListRunningServices;
$services;
What am I missing here? Perhaps my style is completely wrong.
$service in the scope of the function has nothing to do with the one outside the function.
Try :
Keeping most of your code you can use :
You can read the full explanation in About_scope.
You can solve this with global variables, but using globals is genereally considered bad practice. If you use a generic collection type, like arraylist, instead of an array then you have an add() method that will update the collection in a parent scope without needing to explicitly scope it in the function:
Powershell requires specifying the
scope
with prefixes onarray
variables. Seems that "normalString
" variables don't. Use them like this:I know this is late, but I hope this helps at least someone.
The
$services
within the function block is scoped to the function. You can do something like the following instead:Else, you may explicitly use
global:
to alter the scope: