PowerShell Arrays Quick Tips
You are looking for a short but useful help to use Arrays in PowerShell. Here you can find out quick examples of:
- Creating arrays
- Adding elements
- Removing elements
- Accessing an element
- Iterating them
- Filtering them
in PowerShell.
Creating an array
When you create an array by default it’s type is Object[], unless you specify the type.
# using @()
$itemsArray = @('Item 1', 'Item 2', 'Item 3')
# or ()
$itemsArray = ('Item 1', 'Item 2', 'Item 3')
# or just comma separated
$itemsArray = 'Item 1', 'Item 2', 'Item 3'
# Using ranges
$genericArray = 1..10
# instead of @('a', 'b', 'c', 'd', 'e')
$genericArray = 'a'..'e'
# Int32[] array
[int[]]$numbersArray = 1..10
# ArrayList, type will be List`1, Base type: System.Object
$itemsList = New-Object System.Collections.Generic.List[System.Object]
Adding items to an array
# Add one item
$itemsArray += 'Item 4'
# Add a list to array with @()
$itemsArray += @('Item 5', 'Item 6')
# Add a list to array with ()
$itemsArray += ('Item 5', 'Item 6')
# Add a list to array with just comma separated list
$itemsArray += 'Item 5', 'Item 6'
$genericArray += (11..20)
$genericArray += 'z'..'a'
$numbersArray += (11..20)
# The following command will add ASCII codes of the characters,
# because $numbersArray is an array of type Int32[]
$numbersArray += 'a'..'e'
# Add one item
$itemsList.Add('Item 1')
# Add a list to the end of our list with @()
$itemsList.AddRange(@('Item 2', 'Item 3'))
# Add a list to the end of our list with ()
$itemsList.AddRange(('Item 2', 'Item 3'))
# Nope! this doesn't work
$itemsList.AddRange('Item 2', 'Item 3') #Error
Remove an item from an array
Created arrays using @()
, ()
or comma separated items, are fixed arrays. It means you can’t remove items from them, but you can create a new list with remaining items.
$itemsArray = @('Item 1', 'Item 2', 'Item 3')
# Remove 'Item 2'
$newItemsArray = $itemsArray | Where-Object { $_ –ne 'Item 2' }
# Remove 'Item 2'
$newItemsArray = $itemsArray[0, 2]
Or you can use array lists:
$itemsList = New-Object System.Collections.Generic.List[System.Object]
$itemsList.AddRange(@('Item 1', 'Item 2', 'Item 3'))
# Remove 'Item 1'
$isRemoved = $itemsList.Remove('Item 1')
Working with Arrays
Accessing items
$itemsArray = @('Item 1', 'Item 2', 'Item 3')
$itemsArray[0] # => Item 1
$itemsArray[2] # => Item 3
$itemsArray[-1] # => Item 3
$itemsArray[-3] # => Item 1
$itemsArray[-4] # => $NULL, no error
$itemsArray[3] # => $NULL, no error
# The following will throw an error
# OperationStopped: Index was outside the bounds of the array.
$itemsArray[3] = 'Item 4'
$unknownVariable # => $NULL
$unknownVariable[0] # => Error: Cannot index into a null array.
Iterating Arrays
$itemsArray = @('Item 1', 'Item 2', 'Item 3')
# ForEach-Object Pipeline
$itemsArray | ForEach-Object {"Item: [$_]"}
# For loop
foreach ($item in $itemsArray) {
"Item: [$item]"
}
# Foreach method
$itemsArray.foreach({"Item: [$_]"})
$itemsArray.foreach {"Item: [$_]"}
# For loop
for ($index = 0; $index -lt $itemsArray.count; $index++) {
"Item: [{0}]" -f $itemsArray[$index]
}
# Switch
switch($itemsArray)
{
'Item 1'
{
"Item: [$_]"
}
'Item 3'
{
"Item: [$_]"
}
Default
{
"Item: [$_] not in the list of switch"
}
}
Filtering Arrays
$itemsArray = @('Item 1', 'Item 2', 'Item 3')
# Where-Object
$itemsArray | Where-Object { $_ -like '*tem*' }
# Where method
$itemsArray.Where({ $_ -like '*tem*' })
Conclusion
This was very short and quick introduction to PowerShell Arrays. You can find more information on PowerShell commands and Arrays at Microsoft documentations on Arrays in PowerShell.