Informationen zu Hash TabellenAbout Hash Tables

KURZE BESCHREIBUNGSHORT DESCRIPTION

Beschreibt das Erstellen, verwenden und Sortieren von Hash Tabellen in PowerShell.Describes how to create, use, and sort hash tables in PowerShell.

LANGE BESCHREIBUNGLONG DESCRIPTION

Eine Hash Tabelle, die auch als Wörterbuch oder assoziatives Array bezeichnet wird, ist eine kompakte Datenstruktur, die ein oder mehrere Schlüssel/Wert-Paare speichert.A hash table, also known as a dictionary or associative array, is a compact data structure that stores one or more key/value pairs. Eine Hash Tabelle kann z. b. eine Reihe von IP-Adressen und Computernamen enthalten, wobei es sich bei den IP-Adressen um die Schlüssel handelt und die Computernamen die Werte sind oder umgekehrt.For example, a hash table might contain a series of IP addresses and computer names, where the IP addresses are the keys and the computer names are the values, or vice versa.

In PowerShell ist jede Hash Tabelle ein Hashtable-Objekt (System. Collections. Hashtable).In PowerShell, each hash table is a Hashtable (System.Collections.Hashtable) object. Sie können die Eigenschaften und Methoden von Hash fähigen Objekten in PowerShell verwenden.You can use the properties and methods of Hashtable objects in PowerShell.

Ab PowerShell 3,0 können Sie das [geordnete]-Attribut verwenden, um in PowerShell ein geordnetes Wörterbuch (System. Collections. Specialized. OrderedDictionary) zu erstellen.Beginning in PowerShell 3.0, you can use the [ordered] attribute to create an ordered dictionary (System.Collections.Specialized.OrderedDictionary) in PowerShell.

Geordnete Wörterbücher unterscheiden sich von den Hash Tabellen darin, dass die Schlüssel immer in der Reihenfolge angezeigt werden, in der Sie Sie auflisten.Ordered dictionaries differ from hash tables in that the keys always appear in the order in which you list them. Die Reihenfolge der Schlüssel in einer Hash Tabelle wird nicht ermittelt.The order of keys in a hash table is not determined.

Die Schlüssel und der Wert in den Hash Tabellen sind ebenfalls .NET-Objekte.The keys and value in hash tables are also .NET objects. Sie sind meistens Zeichen folgen oder Ganzzahlen, Sie können jedoch einen beliebigen Objekttyp aufweisen.They are most often strings or integers, but they can have any object type. Sie können auch Tabellen Hash Tabellen erstellen, in denen der Wert eines Schlüssels eine andere Hash Tabelle ist.You can also create nested hash tables, in which the value of a key is another hash table.

Hash Tabellen werden häufig verwendet, da Sie für das Suchen und Abrufen von Daten sehr effizient sind.Hash tables are frequently used because they are very efficient for finding and retrieving data. Sie können Hash Tabellen zum Speichern von Listen und zum Erstellen berechneter Eigenschaften in PowerShell verwenden.You can use hash tables to store lists and to create calculated properties in PowerShell. Und PowerShell verfügt über das Cmdlet ConvertFrom-StringData, das Zeichen folgen in eine Hash Tabelle konvertiert.And, PowerShell has a cmdlet, ConvertFrom-StringData, that converts strings to a hash table.

SyntaxSyntax

Die Syntax einer Hash Tabelle lautet wie folgt:The syntax of a hash table is as follows:

@{ <name> = <value>; [<name> = <value> ] ...}

Die Syntax eines geordneten Wörterbuchs lautet wie folgt:The syntax of an ordered dictionary is as follows:

[ordered]@{ <name> = <value>; [<name> = <value> ] ...}

Das [geordnete]-Attribut wurde in PowerShell 3,0 eingeführt.The [ordered] attribute was introduced in PowerShell 3.0.

Erstellen von Hash TabellenCreating Hash Tables

Befolgen Sie die folgenden Richtlinien, um eine Hash Tabelle zu erstellen:To create a hash table, follow these guidelines:

  • Beginnen Sie die Hash Tabelle mit einem @-Zeichen.Begin the hash table with an at sign (@).
  • Schließen Sie die Hash Tabelle in geschweifte Klammern ( {} ) ein.Enclose the hash table in braces ({}).
  • Geben Sie mindestens ein Schlüssel-Wert-Paar für den Inhalt der Hash Tabelle ein.Enter one or more key/value pairs for the content of the hash table.
  • Verwenden Sie ein Gleichheitszeichen (=), um jeden Schlüssel von seinem Wert zu trennen.Use an equal sign (=) to separate each key from its value.
  • Verwenden Sie ein Semikolon (;) oder ein Zeilenumbruch, um die Schlüssel-Wert-Paare voneinander zu trennen.Use a semicolon (;) or a line break to separate the key/value pairs.
  • Ein Schlüssel, der Leerzeichen enthält, muss in Anführungszeichen eingeschlossen werden.Key that contains spaces must be enclosed in quotation marks. Werte müssen gültige PowerShell-Ausdrücke sein.Values must be valid PowerShell expressions. Zeichen folgen müssen in Anführungszeichen eingeschlossen werden, auch wenn Sie keine Leerzeichen enthalten.Strings must appear in quotation marks, even if they do not include spaces.
  • Um die Hash Tabelle zu verwalten, speichern Sie Sie in einer Variablen.To manage the hash table, save it in a variable.
  • Wenn Sie einer Variablen eine geordnete Hash Tabelle zuweisen, platzieren Sie das Attribut [geordnet] vor dem Symbol "@".</span><span class="sxs-lookup">When assigning an ordered hash table to a variable, place the [ordered] attribute before the "@" symbol.</span></span> <span data-ttu-id="89112-137">Wenn Sie ihn vor dem Variablennamen platzieren, schlägt der Befehl fehl.If you place it before the variable name, the command fails.

Um im Wert $Hash eine leere Hash Tabelle zu erstellen, geben Sie Folgendes ein:To create an empty hash table in the value of $hash, type:

$hash = @{}

Sie können einer Hash Tabelle auch Schlüssel und Werte hinzufügen, wenn Sie Sie erstellen.You can also add keys and values to a hash table when you create it. Beispielsweise erstellt die folgende Anweisung eine Hash Tabelle mit drei Schlüsseln.For example, the following statement creates a hash table with three keys.

$hash = @{ Number = 1; Shape = "Square"; Color = "Blue"}

Erstellen geordneter WörterbücherCreating Ordered Dictionaries

Sie können ein geordnetes Wörterbuch erstellen, indem Sie ein Objekt des OrderedDictionary-Typs hinzufügen, aber die einfachste Möglichkeit zum Erstellen eines geordneten Wörterbuchs ist das Verwenden des [geordneten]-Attributs.You can create an ordered dictionary by adding an object of the OrderedDictionary type, but the easiest way to create an ordered dictionary is use the [Ordered] attribute.

Das [geordnete]-Attribut wird in PowerShell 3,0 eingeführt.The [ordered] attribute is introduced in PowerShell 3.0.

Platzieren Sie das Attribut direkt vor dem Symbol "@".</span><span class="sxs-lookup">Place the attribute immediately before the "@" symbol.

$hash = [ordered]@{ Number = 1; Shape = "Square"; Color = "Blue"}

Sie können geordnete Wörterbücher genauso wie Hash Tabellen verwenden.You can use ordered dictionaries in the same way that you use hash tables. Beide Typen können als Parameterwerte verwendet werden, die eine Hash Tabelle oder ein Wörterbuch (IDictionary) akzeptieren.Either type can be used as the value of parameters that take a hash table or dictionary (iDictionary).

Sie können das [geordnete]-Attribut nicht verwenden, um eine Hash Tabelle zu konvertieren oder umzuwandeln.You cannot use the [ordered] attribute to convert or cast a hash table. Wenn Sie das geordnete Attribut vor dem Variablennamen platzieren, schlägt der Befehl mit der folgenden Fehlermeldung fehl.If you place the ordered attribute before the variable name, the command fails with the following error message.

PS C:\> [ordered]$hash = @{}
At line:1 char:1
+ [ordered]$hash = @{}
+ [!INCLUDE[]()]
The ordered attribute can be specified only on a hash literal node.
+ CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordExc
eption
+ FullyQualifiedErrorId : OrderedAttributeOnlyOnHashLiteralNode

Um den Ausdruck zu korrigieren, verschieben Sie das [geordnete]-Attribut.To correct the expression, move the [ordered] attribute.

PS C:\> $hash = [ordered]@{}

Sie können ein geordnetes Wörterbuch in eine Hash Tabelle umwandeln, aber Sie können das geordnete Attribut nicht wiederherstellen, selbst wenn Sie die Variable löschen und neue Werte eingeben.You can cast an ordered dictionary to a hash table, but you cannot recover the ordered attribute, even if you clear the variable and enter new values. Um die Reihenfolge wiederherzustellen, müssen Sie die Variable entfernen und neu erstellen.To re-establish the order, you must remove and recreate the variable.

PS C:\> [hashtable]$hash = [ordered]@{
>> Number = 1; Shape = "Square"; Color = "Blue"}
PS C:\> $hash

Name                           Value
----                           -----
Color                          Blue
Shape                          Square
Number                         1

Anzeigen von Hash TabellenDisplaying Hash Tables

Zum Anzeigen einer Hash Tabelle, die in einer Variablen gespeichert ist, geben Sie den Variablennamen ein.To display a hash table that is saved in a variable, type the variable name. Standardmäßig wird eine Hash Tabelle als Tabelle mit einer Spalte für Schlüssel und einer für Werte angezeigt.By default, a hash tables is displayed as a table with one column for keys and one for values.

C:\PS> $hash

Name                           Value
----                           -----
Shape                          Square
Color                          Blue
Number                         1

Hash Tabellen verfügen über Schlüssel-und Werte Eigenschaften.Hash tables have Keys and Values properties. Verwenden Sie die Punkt Notation, um alle Schlüssel oder alle Werte anzuzeigen.Use dot notation to display all of the keys or all of the values.

C:\PS> $hash.keys
Number
Shape
Color

C:\PS> $hash.values
1
Square
Blue

Jeder Schlüssel Name ist auch eine Eigenschaft der Hash Tabelle, und sein Wert ist der Wert der Key-Name-Eigenschaft.Each key name is also a property of the hash table, and its value is the value of the key-name property. Verwenden Sie das folgende Format, um die Eigenschaftswerte anzuzeigen.Use the following format to display the property values.

$hashtable.<key>
<value>

Zum Beispiel:For example:

C:\PS> $hash.Number
1

C:\PS> $hash.Color
Blue

Wenn der Schlüssel Name mit einem der Eigenschaftsnamen des Hash Tabellentyps in Konflikt steht, können Sie verwenden, PSBase um auf diese Eigenschaften zuzugreifen.If the key name collides with one of the property names of the HashTable type, you can use PSBase to access those properties. Wenn beispielsweise der Schlüssel Name lautet keys und Sie die Auflistung von Schlüsseln zurückgeben möchten, verwenden Sie die folgende Syntax:For example, if the key name is keys and you want to return the collection of Keys, use this syntax:

$hashtable.PSBase.Keys

Hash Tabellen haben eine Count-Eigenschaft, die die Anzahl der Schlüssel-Wert-Paare in der Hash Tabelle angibt.Hash tables have a Count property that indicates the number of key-value pairs in the hash table.

C:\PS> $hash.count
3

Hash Tabellen Tabellen sind keine Arrays, daher können Sie keine Ganzzahl als Index in der Hash Tabelle verwenden, aber Sie können einen Schlüsselnamen verwenden, um die Hash Tabelle zu indizieren.Hash table tables are not arrays, so you cannot use an integer as an index into the hash table, but you can use a key name to index into the hash table. Wenn der Schlüssel ein Zeichen folgen Wert ist, müssen Sie den Schlüsselnamen in Anführungszeichen einschließen.If the key is a string value, enclose the key name in quotation marks.

Zum Beispiel:For example:

C:\PS> $hash["Number"]
1

Hinzufügen und Entfernen von Schlüsseln und WertenAdding and Removing Keys and Values

Verwenden Sie das folgende Befehls Format, um einer Hash Tabelle Schlüssel und Werte hinzuzufügen.To add keys and values to a hash table, use the following command format.

$hash["<key>"] = "<value>"

Wenn Sie z. b. der Hash Tabelle einen "Time"-Schlüssel mit dem Wert "Now" hinzufügen möchten, verwenden Sie das folgende Anweisungs Format.For example, to add a "Time" key with a value of "Now" to the hash table, use the following statement format.

$hash["Time"] = "Now"

Mithilfe der Add-Methode des System. Collections. Hashtable-Objekts können Sie auch Schlüssel und Werte zu einer Hash Tabelle hinzufügen.You can also add keys and values to a hash table by using the Add method of the System.Collections.Hashtable object. Die Add-Methode weist die folgende Syntax auf:The Add method has the following syntax:

Add(Key, Value)

Wenn Sie z. b. der Hash Tabelle einen "Time"-Schlüssel mit dem Wert "Now" hinzufügen möchten, verwenden Sie das folgende Anweisungs Format.For example, to add a "Time" key with a value of "Now" to the hash table, use the following statement format.

$hash.Add("Time", "Now")

Außerdem können Sie Schlüssel und Werte zu einer Hash Tabelle hinzufügen, indem Sie den Additions Operator (+) verwenden, um einer vorhandenen Hash Tabelle eine Hash Tabelle hinzuzufügen.And, you can add keys and values to a hash table by using the addition operator (+) to add a hash table to an existing hash table. Beispielsweise fügt die folgende Anweisung der Hash Tabelle in der $Hash Variable einen Zeit Schlüssel mit dem Wert "Now" hinzu.For example, the following statement adds a "Time" key with a value of "Now" to the hash table in the $hash variable.

$hash = $hash + @{Time="Now"}

Sie können auch Werte hinzufügen, die in Variablen gespeichert sind.You can also add values that are stored in variables.

$t = "Today"
$now = (Get-Date)

$hash.Add($t, $now)

Sie können keinen Subtraktions Operator verwenden, um ein Schlüssel-Wert-Paar aus einer Hash Tabelle zu entfernen, aber Sie können die Remove-Methode des Hashtable-Objekts verwenden.You cannot use a subtraction operator to remove a key/value pair from a hash table, but you can use the Remove method of the Hashtable object. Die Remove-Methode nimmt den Schlüssel als Wert an.The Remove method takes the key as its value.

Die Remove-Methode weist die folgende Syntax auf:The Remove method has the following syntax:

Remove(Key)

Wenn Sie z. b. das Schlüssel-Wert-Paar time = now aus der Hash Tabelle im Wert der $Hash Variable entfernen möchten, geben Sie Folgendes ein:For example, to remove the Time=Now key/value pair from the hash table in the value of the $hash variable, type:

$hash.Remove("Time")

Sie können alle Eigenschaften und Methoden von Hash fähigen Objekten in PowerShell verwenden, einschließlich "enthält", "Clear", "Clone" und "CopyTo".You can use all of the properties and methods of Hashtable objects in PowerShell, including Contains, Clear, Clone, and CopyTo. Weitere Informationen zu Hash fähigen Objekten finden Sie unter System. Collections. Hashtable.For more information about Hashtable objects, see System.Collections.Hashtable.

Objekttypen in Hash TabellenObject Types in HashTables

Die Schlüssel und Werte in einer Hash Tabelle können einen beliebigen .net-Objekttyp haben, und eine einzelne Hash Tabelle kann über Schlüssel und Werte mehrerer Typen verfügen.The keys and values in a hash table can have any .NET object type, and a single hash table can have keys and values of multiple types.

Mit der folgenden Anweisung wird eine Hash Tabelle mit Prozessnamen Zeichenfolgen erstellt und Objektwerte verarbeitet und in der $p Variablen gespeichert.The following statement creates a hash table of process name strings and process object values and saves it in the $p variable.

$p = @{"PowerShell" = (Get-Process PowerShell);
"Notepad" = (Get-Process notepad)}

Sie können die Hash Tabelle in anzeigen $p und die Schlüsselnamen-Eigenschaften verwenden, um die Werte anzuzeigen.You can display the hash table in $p and use the key-name properties to display the values.

C:\PS> $p

Name                           Value
----                           -----
PowerShell                     System.Diagnostics.Process (PowerShell)
Notepad                        System.Diagnostics.Process (notepad)

C:\PS> $p.PowerShell

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    441      24    54196      54012   571     5.10   1788 PowerShell

C:\PS> $p.keys | foreach {$p.$_.handles}
441
251

Bei den Schlüsseln in einer Hash Tabelle kann es sich auch um einen beliebigen .NET-Typ handeln.The keys in a hash table can also be any .NET type. Mit der folgenden Anweisung wird der Hash Tabelle in der Variablen ein Schlüssel-Wert-Paar hinzugefügt $p .The following statement adds a key/value pair to the hash table in the $p variable. Der Schlüssel ist ein Dienst Objekt, das den WinRM-Dienst darstellt, und der Wert entspricht dem aktuellen Status des Dienstanbieter.The key is a Service object that represents the WinRM service, and the value is the current status of the service.

C:\PS> $p = $p + @{(Get-Service WinRM) = ((Get-Service WinRM).Status)}

Sie können das neue Schlüssel-Wert-Paar anzeigen und darauf zugreifen, indem Sie die gleichen Methoden verwenden, die Sie auch für andere Paare in der Hash Tabelle verwenden.You can display and access the new key/value pair by using the same methods that you use for other pairs in the hash table.

C:\PS> $p

Name                           Value
----                           -----
PowerShell                     System.Diagnostics.Process (PowerShell)
Notepad                        System.Diagnostics.Process (notepad)
System.ServiceProcess.Servi... Running

C:\PS> $p.keys
PowerShell
Notepad

Status   Name               DisplayName
------   ----               -----------
Running  winrm              Windows Remote Management (WS-Manag...

C:\PS> $p.keys | foreach {$_.name}
winrm

Die Schlüssel und Werte in einer Hash Tabelle können auch Hashtable-Objekte sein.The keys and values in a hash table can also be Hashtable objects. Mit der folgenden Anweisung wird der Hash Tabelle in der Variablen, in der der Schlüssel eine Zeichenfolge ist, ein Schlüssel/Wert-Paar hinzugefügt, $p und der Wert ist eine Hash Tabelle mit drei Schlüssel-Wert-Paaren.The following statement adds key/value pair to the hash table in the $p variable in which the key is a string, Hash2, and the value is a hash table with three key/value pairs.

C:\PS> $p = $p + @{"Hash2"= @{a=1; b=2; c=3}}

Sie können die neuen Werte mit denselben Methoden anzeigen und darauf zugreifen.You can display and access the new values by using the same methods.

C:\PS> $p

Name                           Value
----                           -----
PowerShell                     System.Diagnostics.Process (PowerShell)
Notepad                        System.Diagnostics.Process (notepad)
System.ServiceProcess.Servi... Running
Hash2                          {a, b, c}

C:\PS> $p.Hash2

Name                           Value
----                           -----
a                              1
b                              2
c                              3

C:\PS> $p.Hash2.b
2

Sortieren von Schlüsseln und WertenSorting Keys and Values

Die Elemente in einer Hash Tabelle sind intrinsisch Unsortiert.The items in a hash table are intrinsically unordered. Die Schlüssel-Wert-Paare können bei jedem Anzeigen in einer anderen Reihenfolge angezeigt werden.The key/value pairs might appear in a different order each time that you display them.

Obwohl eine Hash Tabelle nicht sortiert werden kann, können Sie die GetEnumerator-Methode von Hash Tabellen verwenden, um die Schlüssel und Werte aufzulisten. verwenden Sie dann das Cmdlet "Sort-Object", um die Enumerationswerte für die Anzeige zu sortieren.Although you cannot sort a hash table, you can use the GetEnumerator method of hash tables to enumerate the keys and values, and then use the Sort-Object cmdlet to sort the enumerated values for display.

Die folgenden Befehle zählen z. b. die Schlüssel und Werte in der Hash Tabelle in der $p Variablen auf und Sortieren dann die Schlüssel in alphabetischer Reihenfolge.For example, the following commands enumerate the keys and values in the hash table in the $p variable and then sort the keys in alphabetical order.

C:\PS> $p.GetEnumerator() | Sort-Object -Property key

Name                           Value
----                           -----
Notepad                        System.Diagnostics.Process (notepad)
PowerShell                     System.Diagnostics.Process (PowerShell)
System.ServiceProcess.Servi... Running

Der folgende Befehl verwendet die gleiche Prozedur, um die Hashwerte in absteigender Reihenfolge zu sortieren.The following command uses the same procedure to sort the hash values in descending order.

C:\PS> $p.getenumerator() | Sort-Object -Property Value -Descending

Name                           Value
----                           -----
PowerShell                     System.Diagnostics.Process (PowerShell)
Notepad                        System.Diagnostics.Process (notepad)
System.ServiceProcess.Servi... Running

Erstellen von Objekten aus Hash TabellenCreating Objects from Hash Tables

Ab PowerShell 3,0 können Sie ein Objekt aus einer Hash Tabelle mit Eigenschaften und Eigenschafts Werten erstellen.Beginning in PowerShell 3.0, you can create an object from a hash table of properties and property values.

Die Syntax ist wie folgt:The syntax is as follows:

[<class-name>]@{
  <property-name>=<property-value>
  <property-name>=<property-value>
}

Diese Methode funktioniert nur für Klassen, die über einen NULL-Konstruktor verfügen, d. h. einen Konstruktor ohne Parameter.This method works only for classes that have a null constructor, that is, a constructor that has no parameters. Die Objekteigenschaften müssen öffentlich und feststellbar sein.The object properties must be public and settable.

Weitere Informationen finden Sie unter about_Object_Creation.For more information, see about_Object_Creation.

ConvertFrom-StringDataConvertFrom-StringData

ConvertFrom-StringDataMit dem-Cmdlet wird eine Zeichenfolge oder eine here-Zeichenfolge von Schlüssel-Wert-Paaren in eine Hash Tabelle konvertiert.The ConvertFrom-StringData cmdlet converts a string or a here-string of key/value pairs into a hash table. Sie können das ConvertFrom-StringData Cmdlet sicher im Daten Abschnitt eines Skripts verwenden, und Sie können es mit dem Import-LocalizedData Cmdlet verwenden, um Benutzer Meldungen in der Benutzeroberflächen Kultur des aktuellen Benutzers anzuzeigen.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.

Diese Zeichen folgen sind besonders nützlich, wenn die Werte in der Hash Tabelle Anführungszeichen enthalten.Here-strings are especially useful when the values in the hash table include quotation marks. Weitere Informationen zu here-Zeichen folgen finden Sie unter about_Quoting_Rules.For more information about here-strings, see about_Quoting_Rules.

Im folgenden Beispiel wird gezeigt, wie eine here-Zeichenfolge der Benutzer Meldungen im vorherigen Beispiel erstellt wird und wie Sie mit eine ConvertFrom-StringData Zeichenfolge aus einer Zeichenfolge in eine Hash Tabelle konvertieren.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.

Der folgende Befehl erstellt eine here-Zeichenfolge der Schlüssel-Wert-Paare und speichert Sie dann in der $ Zeichen folgen Variablen.The following command creates a here-string of the key/value pairs and then saves it in the $string variable.

C:\PS> $string = @"
Msg1 = Type "Windows".
Msg2 = She said, "Hello, World."
Msg3 = Enter an alias (or "nickname").
"@

Dieser Befehl verwendet das Cmdlet "ConvertFrom-StringData", um die here-Zeichenfolge in eine Hash Tabelle zu konvertieren.This command uses the ConvertFrom-StringData cmdlet to convert the here-string into a hash table.

C:\PS> ConvertFrom-StringData $string

Name                           Value
----                           -----
Msg3                           Enter an alias (or "nickname").
Msg2                           She said, "Hello, World."
Msg1                           Type "Windows".

Weitere Informationen zu here-Zeichen folgen finden Sie unter about_Quoting_Rules.For more information about here-strings, see about_Quoting_Rules.

SIEHE AUCHSEE ALSO

about_Arraysabout_Arrays

about_Object_Creationabout_Object_Creation

about_Quoting_Rulesabout_Quoting_Rules

about_Script_Internationalizationabout_Script_Internationalization

ConvertFrom-StringDataConvertFrom-StringData

Import-LocalizedDataImport-LocalizedData

System.Collections.HashtableSystem.Collections.Hashtable