derhoeppi
Goto Top

PowerShell Daten aus Array mit Daten aus Hashtable verknüpfen

Hallo,

ich habe ein Array mit Informationen. In diesem Array gibt es einen nummerischen Wert. Weil ich mit dem nummerischen Wert nichts anfangen kann, habe ich eine Hashtable aufgebaut, die als Translator dienen soll. Quasi 1 steht für Test und 2 für Produktiv. In Array steht aber nur 1 oder 2. In einem Output möchte ich aber den Inhalt des Array erhalten bei dem 1 und 2 durch Test und Produktiv ersetzt wird. Gerne kann das ganze auch in ein neues Array / Hashtable geschrieben werden.

Bisher habe ich nur den Fall gehabt, dass ich aus dem Array einen Wert genommen habe, diesen mit dem Wert in der Hashtable vergleiche und den dazugehörigen Content aus der Hashtabelle in eine neue Variable schreibe. Für den jetzigen Fall habe ich jedoch noch keinen so richtigen Ansatz.

Sollte ich das Array durchitterieren und alle Werte in ein neues Array schreiben oder gibt es einen Einzeiler, der mir den Content vom Array und dem Hashtable Wert ausgibt?

Content-ID: 309688

Url: https://administrator.de/contentid/309688

Ausgedruckt am: 24.11.2024 um 02:11 Uhr

129813
Lösung 129813 13.07.2016 aktualisiert um 12:12:14 Uhr
Goto Top
$array = @()
$ht = @{1="Test";2="Produktiv"}  
$array += New-Object PSObject -Property @{Mode=1;Column2="BlaBla"}  
$array += New-Object PSObject -Property @{Mode=2;Column2="BlaBla2"}  
$array | select @{n="Mode";e={$ht[$_.Mode]}},Column2  
or
$array = @()
$ht = @{1="Test";2="Produktiv"}  
$array += New-Object PSObject -Property @{Mode=1;Column2="BlaBla"}  
$array += New-Object PSObject -Property @{Mode=2;Column2="BlaBla2"}  
$array | %{$_.Mode = $ht[$_.Mode]}
$array
Regards
colinardo
colinardo 13.07.2016 aktualisiert um 13:00:28 Uhr
Goto Top
Hallo derhoeppi,
so wie @129813 schreibt kann man es machen. Üblicherweise macht man sowas über Enumerations (enums) weil objektorientierter face-wink und wandelt dann gleich die entsprechende Spalte in diesen Enum um dann hat man immer beides verfügbar:
Add-Type -TypeDefinition 'public enum mode{Test=1,Produktiv=2};'  
# demo object erstellen
$array = @()
$array += New-Object PSObject -Property @{Mode=1;Column2="BlaBla"}  
$array += New-Object PSObject -Property @{Mode=2;Column2="BlaBla2"}  
# spalte 'mode' in passende Enums umwandeln  
$array | %{$_.Mode = [mode]$_.Mode}
Enums lassen sich dann z.B. so ansprechen:
[mode]::Test
[mode]::Produktiv
Diese lassen sich auch direkt in Vergleichen verwenden (im Hintergrund wird der INT-Wert verglichen)
if ($var -eq [mode]::Produktiv){ #........ }
Will man den entsprechenden Wert eines enums (hier INT-Wert) direkt anzeigen lassen:
[mode]::Produktiv.value__
# oder
[int][mode]::Produktiv
Hier noch was zum lesen über enums:
http://social.technet.microsoft.com/wiki/contents/articles/26436.how-to ...

Grüße Uwe