Table of Contents
Creating an Array of HashTables
To create an array of hashtables in PowerShell:
- Create an array.
- Create two or more hash tables.
- Use
+=operator to add the hash tables (created in the second step) to an array (created in the first step).
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$arrayOfHashTables = @() $hashTable1 = [ordered]@{ "firstName" = "Mehvish" "lastName" = "Ashiq" department="Computer Science" } $hashTable2 = [ordered]@{ "firstName" = "Tahir" "Raza" = "Ashiq" department="Designs & Arts" } $arrayOfHashTables += $hashTable1 $arrayOfHashTables += $hashTable2 $arrayOfHashTables |
|
1 2 3 4 5 6 7 8 9 10 |
Name Value ---- ----- firstName Mehvish lastName Ashiq department Computer Science firstName Tahir Raza Ashiq department Designs & Arts |
First, we used an array operator represented with @() to create an array and saved it in the $arrayOfHashTables variable. Next, we created two hash tables stored in $hashTable1 and $hashTable2; each contained key-value pairs wrapped around @{}. Optionally, we can use [ordered] to have key-value pairs in the same order in which they are inserted while creating the hash tables. The array of hash tables will look as follows if we will not use [ordered].
|
1 2 3 4 5 6 7 8 9 10 |
Name Value ---- ----- department Computer Science firstName Mehvish lastName Ashiq department Designs & Arts firstName Tahir Raza Ashiq |
Once we are done with creating hash tables, we use the += operator to add $hashTable1 and $hashTable2 in the $arrayOfHashTables. Alternatively, you can also use the + operator to add hash tables to the array of hash tables as follows:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$arrayOfHashTables = @() $hashTable1 = [ordered]@{ "firstName" = "Mehvish" "lastName" = "Ashiq" department="Computer Science" } $hashTable2 = [ordered]@{ "firstName" = "Tahir" "Raza" = "Ashiq" department="Designs & Arts" } $arrayOfHashTables = $arrayOfHashTables + $hashTable1 $arrayOfHashTables = $arrayOfHashTables + $hashTable2 |
We created two hash tables ($hashTable1 and $hashTable2); now, what if we have to add 10 or 15 more? What will happen now? It will result in code redundancy. To avoid that, we will write this in a script named Test.ps1 and pass one or multiple hash tables as parameters. How to do it? Let’s learn that in the following section.
Passing Data from a Parameter to an Array of HashTable
To pass data from a parameter to an array of hash tables:
- Create a
.ps1file, let’s sayTest.ps1. - Use the
paramblock to accept an array of hash tables as a parameter. - Use the
Write-Hostcmdlet to display customized messages. - Use the
foreachloop to iterate over an array of hash tables. - Use nested
foreachwith theGetEnumerator()method to iterate over each hash table entry. - For each nested iteration of the above loop, use the
Write-Hostcmdlet to write the key and its value inkey=valueformat.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
param( [hashtable[]]$Hashtables ) Write-Host "Hashtables: @(" foreach($hashtable in $Hashtables){ Write-Host " @{" foreach($entry in $hashtable.GetEnumerator()){ Write-Host " " $entry.Key = $entry.Value } Write-Host " }" } Write-Host ")" |
|
1 2 3 |
.\Test.ps1 -Hashtables @{ firstName = "Aftab"; lastName = "Raza"; department = "Game Development"},@{ firstName = "Azher"; lastName = "Raza"; department = "Mathematics"} |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Hashtables: @( @{ department = Game Development firstName = Aftab lastName = Raza } @{ department = Mathematics firstName = Azher lastName = Raza } ) |
First, we used the param block with the param keyword followed by opening, and closing brackets (()); this block accepts one or more parameters. We used this to take an array of hash tables as a parameter.
The point is how we can ensure that this script only takes an array of hash tables as a parameter. We can assign a type to the parameter and include a [Parameter()] block. In the following example, we can see a parameter that only accepts an array of hash tables of type hashtable[].
|
1 2 3 4 5 6 |
param( [Parameter()] [hashtable[]]$Hashtables ) |
We used Write-Host cmdlet on different places in the above-provided script (Test.ps1) to write customized output/message to the host; here host is our PowerShell console or terminal.
Next, a foreach loop was used to iterate over an array of hash tables ($Hashtables). In each iteration, we used a nested foreach with the GetEnumerator() method to loop over every entry of the hash table and write key=value using Write-Host cmdlet.
What is the role of the GetEnumartor() method? This method was used to get an enumerator (a IEnumerator object) that we used to iterate through the specified collection, which is a hash table in our case.
That’s all about array of HashTables in PowerShell.