Powershell Hashtable Key False
Aloa,
Hashtable
Jetzt wird gesucht ob "ad_test" vorhanden ist:
--> False
Wenn ich aber die Keys durchlaufe findet er ihn natürlich.
Warum liefert ContainsKey ein False?
VG
Hashtable
$alldata
Name Value
---- -----
@{serviceName=TRAINING {Count, Status, Ordered, Modified...}
@{serviceName=TRN {Count, Status, Ordered, Modified...}
@{serviceName=ad_test {Count, Status, Ordered, Modified...}
Jetzt wird gesucht ob "ad_test" vorhanden ist:
$alldata.ContainsKey("ad_test")
--> False
$alldata.Keys | %{
write-host $_.serviceName
if ($_.serviceName -like "ad_test"){
write-host "enthält"
}else{
write-host "enthält NICHT"
}
}
Warum liefert ContainsKey ein False?
VG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 667951
Url: https://administrator.de/forum/powershell-hashtable-key-false-667951.html
Ausgedruckt am: 26.12.2024 um 15:12 Uhr
17 Kommentare
Neuester Kommentar
Warum liefert ContainsKey ein False?
Weil deine Keys in sich selbst schonHashtables sind und keine Strings, denn der String den du suchst ist in der Key-Hashtable unter "ServiceName" verzeichnet...sieht man ja schon am ersten Beispiel deiner Ausgabe.
Du hast unnötigerweise doppelt gemoppelt verschachtelt.
Da gab es noch einen der das mal so auf sein Cover gepresst hat 😂. Die billige Kopie von Freddy Quinn
https://www.discogs.com/de/release/1183730-Freddy-Breck-Halli-Hallo-Aloa ...
Zitat von @H41mSh1C0R:
Powershell New-Object meckert Property an, Verständnisfrage
In AllData sind Hashtables drin deren Values ich im nächsten Schritt befüllen möchte. Von jedem Service gibt es xyz Anzahlen an Instanzen und in AllData werden dann die Counter hochgezählt. Nach Aktion, Status und Jahr. So der Plan.
Zitat von @Dani:
Moin,
möchtest du noch den Code posten, mit dem du die Variable $alldata erzeugt hast?
Gruß,
Dani
Moin,
möchtest du noch den Code posten, mit dem du die Variable $alldata erzeugt hast?
Gruß,
Dani
Powershell New-Object meckert Property an, Verständnisfrage
In AllData sind Hashtables drin deren Values ich im nächsten Schritt befüllen möchte. Von jedem Service gibt es xyz Anzahlen an Instanzen und in AllData werden dann die Counter hochgezählt. Nach Aktion, Status und Jahr. So der Plan.
Dann hast du es aber nicht so aufgebaut wie ich es gepostet habe denn damit geht es ja problemlos weil die Keys selbst ja normale Strings sind.
Guckst du
https://tio.run/##dVFBC4IwGL3vV4whWBCRVqcQDI8RHTxGh@W@aCCbbLMI8bfbzFxatN ...
Wenn du als Key selbst Hashtables verwendest dann bleibt dir nur das Filtern mit Where-Object, aber ich denke du hast da nur einen Umsetzungsfehler gemacht ...
Ändere die Zeile so, dann klappt das auch
Weil die Variable dann keine Properties mehr hat ...
Alternativ kannst du aber auch das hier in der Schleife schreiben wenn du Servicename vorher nicht expandieren willst
$ServiceOfferingsListe = $SubscriptionDetails | select -ExpandProperty servicename -Unique
Alternativ kannst du aber auch das hier in der Schleife schreiben wenn du Servicename vorher nicht expandieren willst
# ...
$alldata.($ServiceOffering.ServiceName) = [ordered]@{
Count=''
Status=$Status
Ordered=$years
Modified=$years
Cancelled=$years
}
# ...
Property "serviceName" cannot be found.
Dann dürfte deine Zeile auch schon nicht funktionieren wenn es die Property im Objekt nicht gibt. Wir kennen das Ausgangsobjekt SubscriptionDetails nicht ... Wenn das keine Property serviceName hat klappt das verständlicherweise nicht.
Wenn die Variable ne Hashtable ist und kein Custom-Object dann ist das klar dann hat das auch keine Property servicename sondern nur nen Key mit dem Namen ...
Immer dran Denken mit welchen Typen du arbeitest. => Get-Member und .gettype() sind deine Freunde.
Du siehst den Unterschied:
Immer dran Denken mit welchen Typen du arbeitest. => Get-Member und .gettype() sind deine Freunde.
Du siehst den Unterschied:
#Hashtable mit Fehler weil keine Property mit dem Namen ...
@{serviceName = "AB"} | select -Expand serviceName
# Object mit Property
[pscustomobject]@{serviceName = "AB"} | select -Expand serviceName