TOPIC
about_hash_tables
SHORT DESCRIPTION
Describes how to create, use, and sort hash tables in Windows PowerShell.
LONG DESCRIPTION
A hash table, also known as a dictionary or associative array, is a
compact data structure that stores one or more name/value pairs. For
example, a hash table might contain a series of names and employee IDs,
computer names and IP addresses, or message IDs and message text.
Hash tables are frequently used because they are very efficient for finding
and retrieving data. You can use hash tables to store lists and to create
calculated properties in Windows PowerShell. And, Windows PowerShell has a
cmdlet, ConvertFrom-StringData, that converts strings to a hash table.
Creating Hash Tables
The items in a hash table are arranged in name/value pairs, such as:
Msg1=”Please enter your password.”
Msg2=”The path parameter is required.”
Msg3=”The Alias of Get-Command is gcm.”
The values are mapped to or associated with the names so that when you
submit the name, Windows PowerShell returns the value.
In Windows PowerShell, the syntax of a hash table is as follows:
@{ <name> = <value>; [<name> = <value> ] …}
When you create a hash table, follow these guidelines:
– Begin the hash table with an at sign (@).
– Enclose the hash table in braces ({}).
– Enter one or more name-value pairs for the content of the hash
table.
– Use an equal sign (=) to separate each name from its value.
– Use a semicolon (;) to separate the name/value pairs.
– If a name or value contains spaces, enclose it in quotation marks.
For example, a hash table of the previous user messages looks like this:
@{
Msg1=”Please enter your password.”;
Msg2=”The path parameter is required.”;
Msg3=”The Alias of Get-Command is gcm.”;
}
To use a hash table in scripts and commands, save it in a Variable. The
value of the Variable is a hash table object
(System.Collections.Hashtable), and each name in the name/value pairs
is a property of the hash table object.
The following commands save the user-Message hash table in the $a
Variable and use the dot method to display the values.
C:\PS> $a = @{
>> Msg1=”Please enter your password.”;
>> Msg2=”The path parameter is required.”;
>> Msg3=”The Alias of Get-Command is gcm.”;
>> }
C:\PS> $a
Name Value
—- —–
Msg1 Please enter your password.
Msg3 The Alias of Get-Command is gcm.
Msg2 The path parameter is required.
C:\PS> $a.Msg1
Please enter your password.
Hash tables are not limited to one type of data. You can enter any data
type in a hash table, and you can combine data types in a single hash
table. For example, you can build a hash table that contains an integer,
a call to a cmdlet, and a string.
Sorting Hash Tables
To sort the hash table alphabetically by keys or values, use the
GetEnumerator method of hash tables to get the keys and values in the
hash table, and then use the Sort-Object cmdlet to sort them.
For example, the following command sorts the hash table in $a
alphabetically by keys.
C:\PS> $a.getenumerator() | Sort-Object -property key
Name Value
—- —–
Msg1 Please enter your password.
Msg2 The path parameter is required.
Msg3 The Alias of Get-Command is gcm.
The following command uses the same method to sort the hash values in
descending order.
C:\PS> $a.getenumerator() | Sort-Object -property value -descending
Name Value
—- —–
Msg2 The path parameter is required.
Msg3 The Alias of Get-Command is gcm.
Msg1 Please enter your password.
ConvertFrom-StringData
The ConvertFrom-StringData cmdlet converts a string or a here-string of
name/value pairs into a hash table. You can use the
ConvertFrom-StringData cmdlet safely in the Data section of a script,
and you can use it with the Import-LocalizedData cmdlet to display user
messages in the user-interface (UI) culture of the current user.
Here-strings are especially useful when the values in the hash table
include quotation marks. (For more information about here-strings, see
about_Quoting_Rules.)
The following example shows how to create a here-string of the user
messages in the previous example and how to use ConvertFrom-StringData
to convert them from a string into a hash table.
The following command creates a here-string of the name/value pairs and
then saves it in the $string Variable.
C:\PS> $string = @”
Msg1=”Please enter your password.”
Msg2=”The path parameter is required.”
Msg3=”The Alias of Get-Command is gcm.”
“@
This command uses the ConvertFrom-StringData cmdlet to convert the
here-string into a hash table.
C:\PS> ConvertFrom-StringData $string
Name Value
—- —–
Msg3 “The Alias of Get-Command is gcm.”
Msg2 “The path parameter is required.”
Msg1 “Please enter your password.”
SEE ALSO
about_arrays
about_Quoting_Rules
about_script_internationalization
ConvertFrom-StringData
Import-LocalizedData