Powershell array scope; why is my array empty?

Viewed 12707

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.

4 Answers

Powershell requires specifying the scope with prefixes on array variables. Seems that "normal String" variables don't. Use them like this:

# Visible everywhere inside the script file (f.ex: myNameScript.ps1)
$script:names = @()

Function AddStringToArray ([string]$i_name) {
    $script:names += $i_name
}

AddStringToArray -i_name "Markie"
AddStringToArray -i_name "Harry"

I know this is late, but I hope this helps at least someone.

Related