about_hash_tables

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