Welcome PowerShell User! This recipe is just one of the hundreds of useful resources contained in the PowerShell Cookbook.
If you own the book already, login here to get free, online, searchable access to the entire book's content.
If not, the Windows PowerShell Cookbook is available at Amazon, or any of your other favourite book retailers. If you want to see what the PowerShell Cookbook has to offer, enjoy this free 90 page e-book sample: "The Windows PowerShell Interactive Shell".
You have an array that you want to frequently add elements to, remove elements from, search, and modify.
To work with an array frequently after you define it, use the
System.Collections.ArrayList
class:
PS > $myArray = New-Object System.Collections.ArrayList PS > [void] $myArray.Add("Hello") PS > [void] $myArray.AddRange( ("World","How","Are","You") ) PS > $myArray Hello World How Are You PS > $myArray.RemoveAt(1) PS > $myArray Hello How Are You
Like in most other languages, arrays in PowerShell stay the same length once you create them. PowerShell allows you to add items, remove items, and search for items in an array, but these operations may be time-consuming when you’re dealing with large amounts of data. For example, to combine two arrays, PowerShell creates a new array large enough to hold the contents of both arrays and then copies both arrays into the destination array.
In comparison, the ArrayList
class is designed to let you easily add, remove, and search for items in a collection.
PowerShell passes along any data that your script generates, unless you capture it or cast it to [void]
. Since it is designed primarily to be used from programming languages, the System.Collections.ArrayList
class produces output, even though you may not expect it to. To prevent it from sending data to the output pipeline, either capture the data or cast it to [void]
:
PS > $collection = New-Object System.Collections.ArrayList PS > $collection.Add("Hello") 0 PS > [void] $collection.Add("World")
If you plan to add and remove data to and from an array frequently, the
System.Collections.ArrayList
class provides a more dynamic alternative.
For more information about working with classes from the .NET Framework, see Recipe 3.8.
Recipe 3.8, “Work with .NET Objects”