THEMA
about_Hash_Tables
KURZBESCHREIBUNG
Beschreibt das Erstellen, Verwenden und Sortieren von
Hashtabellen in Windows PowerShell.
DETAILBESCHREIBUNG
Eine Hashtabelle, auch als Wörterbuch oder assoziatives Array
bezeichnet, bildet eine kompakte Datenstruktur, in der ein oder
mehrere Name-Wert-Paare gespeichert werden. Eine Hashtabelle kann
beispielsweise eine Reihe von Namen und Mitarbeiter-IDs,
Computernamen und IP-Adressen oder Meldungs-IDs und
Meldungstexten enthalten.
Hashtabellen werden häufig verwendet, da sie beim Suchen und
Abrufen von Daten sehr effizient sind. Sie können Hashtabellen
verwenden, um Listen zu speichern und berechnete Eigenschaften in
Windows PowerShell zu erstellen. Zudem verfügt Windows PowerShell
über das Cmdlet "ConvertFrom-StringData", mit dem Zeichenfolgen
in eine Hashtabelle konvertiert werden können.
Erstellen von Hashtabellen
Die Elemente in einer Hashtabelle werden in Name-Wert-Paaren
angeordnet, z. B.:
Msg1="Geben Sie Ihr Kennwort ein."
Msg2="Der Pfadparameter ist erforderlich."
Msg3="Der Alias von Get-Command ist gcm."
Die Werte werden den Namen zugeordnet, sodass Windows
PowerShell den Wert zurückgibt, wenn Sie den Namen übermittelt
haben.
In Windows PowerShell wird für Hashtabellen die folgende Syntax
verwendet:
@{ <Name> = <Wert>; [<Name> = <Wert> ] ...}
Folgen Sie beim Erstellen einer Hashtabelle diesen Richtlinien:
- Beginnen Sie die Hashtabelle mit dem at-Zeichen (@).
- Schließen Sie die Hashtabelle in geschweifte Klammern
({}) ein.
- Geben Sie als Inhalt der Hashtabelle ein oder mehrere
Name-Wert-Paare ein.
- Trennen Sie jeden Namen vom zugehörigen Wert durch ein
Gleichheitszeichen (=).
- Trennen Sie die Name-Wert-Paare durch ein Semikolon (;).
- Namen oder Werte mit Leerzeichen schließen Sie in
Anführungszeichen ein.
Eine Hashtabelle der obigen Benutzermeldungen kann
beispielsweise wie folgt aussehen:
@{
Msg1="Geben Sie Ihr Kennwort ein.";
Msg2="Der Pfadparameter ist erforderlich."; Msg3="Der Alias
von Get-Command ist gcm.";
}
Wenn Sie in Skripts und Befehlen eine Hashtabelle verwenden möchten,
speichern Sie diese in einer Variablen. Der Wert der Variablen bildet
ein Hashtabellenobjekt (System.Collections.Hashtable), und jeder Name
in den Name-Wert-Paaren stellt eine Eigenschaft des Hashtabellenobjekts dar.
Mit den folgenden Befehlen speichern Sie die Hashtabelle mit
Benutzermeldungen in der Variablen "$a" und zeigen die Werte mit der
DOT-Methode an.
C:\PS> $a = @{
>> Msg1="Geben Sie Ihr Kennwort ein.";
>> Msg2="Der Pfadparameter ist erforderlich.";
>> Msg3="Der Alias von Get-Command ist gcm.";
>> }
C:\PS> $a
Name Value
---- -----
Msg1 Geben Sie Ihr Kennwort ein.
Msg3 Der Alias von Get-Command ist gcm.
Msg2 Der Pfadparameter ist erforderlich.
C:\PS> $a.Msg1
Geben Sie Ihr Kennwort ein.
Hashtabellen sind auf keinen bestimmten Datentyp beschränkt. In
einer Hashtabelle können Sie jeden Datentyp eingeben, und Sie können
Datentypen in einer einzelnen Hashtabelle kombinieren. Beispielsweise
können Sie eine Hashtabelle erstellen, die eine ganze Zahl, den
Aufruf eines Cmdlets und eine Zeichenfolge enthält.
Sortieren von Hashtabellen
Wenn Sie die Hashtabelle alphabetisch nach Schlüsseln oder
Werten sortieren möchten, rufen Sie mit der GetEnumerator-Methode
von Hashtabellen die Schlüssel und Werte in der Hashtabelle
ab, und sortieren Sie sie dann mit dem Cmdlet "Sort-Object".
Zum Beispiel sortieren Sie die Hashtabelle in "$a" mit dem
folgenden Befehl alphabetisch nach Schlüsseln.
C:\PS> $a.getenumerator() | sort-object -property key
Name Value
---- -----
Msg1 Geben Sie Ihr Kennwort ein.
Msg2 Der Pfadparameter ist erforderlich.
Msg3 Der Alias von Get-Command ist gcm.
Mit dem folgenden Befehl sortieren Sie die Hashwerte mit
derselben Methode in absteigender Reihenfolge.
C:\PS> $a.getenumerator() | sort-object -property value -descending
Name Value
---- -----
Msg2 Der Pfadparameter ist erforderlich.
Msg3 Der Alias von Get-Command ist gcm.
Msg1 Geben Sie Ihr Kennwort ein.
ConvertFrom-StringData
Mit dem Cmdlet "ConvertFrom-StringData" wird eine Zeichenfolge
oder here-Zeichenfolge von Name-Wert-Paaren in eine Hashtabelle
konvertiert. Das Cmdlet "ConvertFrom-StringData" können Sie im
Data-Abschnitt eines Skripts sicher verwenden, und Sie können
es mit dem Cmdlet "Import-LocalizedData" verwenden, um
Benutzermeldungen in der Benutzeroberflächenkultur des
aktuellen Benutzers anzuzeigen.
Here-Zeichenfolgen sind besonders nützlich, wenn die Werte in der
Hashtabelle Anführungszeichen enthalten. (Weitere Informationen zu
here-Zeichenfolgen finden Sie unter "about_Quoting_Rules".
Im folgenden Beispiel wird gezeigt, wie Sie eine here-Zeichenfol
ge der Benutzermeldungen im obigen Beispiel erstellen und diese
mit ConvertFrom-StringData aus einer Zeichenfolge in eine
Hashtabelle konvertieren.
Mit dem folgenden Befehl erstellen Sie eine here-Zeichenfolge
der Name-Wert-Paare und speichern diese dann in der Variablen
"$string".
C:\PS> $string = @"
Msg1="Geben Sie Ihr Kennwort ein."
Msg2="Der Pfadparameter ist erforderlich."
Msg3="Der Alias von Get-Command ist gcm."
"@
In diesem Befehl wird das Cmdlet "ConvertFrom-StringData"
verwendet, um die here-Zeichenfolge in eine Hashtabelle zu
konvertieren.
C:\PS> convertfrom-stringdata $string
Name Value
---- -----
Msg3 "Der Alias von Get-Command ist gcm."
Msg2 "Der Pfadparameter ist erforderlich."
Msg1 "Geben Sie Ihr Kennwort ein."
SIEHE AUCH
about_Arrays
about_Quoting_Rules
about_Script_Internationalization
ConvertFrom-StringData
Import-LocalizedData