Benutzer mit den meisten Antworten
RegEx / .contains()

Frage
-
Hallo zusammen,
ich habe ein Problem und komme einfach nicht voran egal wie ich es drehe und wende.
Ich habe variable1-x z.B. mit den Namen v_foo_123, v_bar_123, v_boop_123, v_boophoop_123, v_boophoop_234. In einer ForEach Schleife möchte ich den entsprechenden String Value aus einer Hashtabel haben, wenn mein Variabel Name mit dem Key Name im Hashtable übereinstimmt. Das klappt soweit mit einem Where-Object, nur bei v_boophoop_123 und v_boophoop_234 bekomme ich mit einem .contains($_.Key) immer String3 und String4, weil ja beides enthalten ist. Mit einem escaped Regex wo ich den Key einfüge dasselbe, da das wohl im Endeffekt auch die gleiche Funktion wie bei .contains() hat.
Ich habe keine Idee wie ich das z.B. mit nem RexEx Abfragen kann, da die Variabel Namen und Keys immer unterschiedlich sind.
Mein Code:
New-Variable -Name v_foo_123 -Value "Foo Test 123" -Force New-Variable -Name v_bar_123 -Value "Bar Test 123" -Force New-Variable -Name v_boop_123 -Value "Boop Test 123" -Force New-Variable -Name v_boophoop_123 -Value "BoopHoop Test 123" -Force New-Variable -Name v_boophoop_234 -Value "BoopHoop Test 234" -Force $hashtable =@{ foo = "String1" bar = "String2" boop = "String3" boophoop = "String4" } $variables = Get-Variable -Name v_* ForEach ($var in $variables) { #$String= ($hashtable.GetEnumerator() | Where-Object {$var.Name.Substring(2) -match [regex]::Escape($_.Key)}).Value $String= ($hashtable.GetEnumerator() | Where-Object {$var.Name.Substring(2).Contains($_.Key)}).Value Write-host $var.Name "->" $String }
Der $String ist dann bei v_boophoop_123 und v_boophoop_234 immer String3 und String4. Es sollte aber nur String4 sein, vielleicht kann mir jemand helfen, ich bin mit meinem Latein am Ende.
Danke und Gruß
André
Antworten
-
Hallo,
so aus dem blauen ...
New-Variable -Name v_foo_123 -Value "Foo Test 123" -Force New-Variable -Name v_bar_123 -Value "Bar Test 123" -Force New-Variable -Name v_boop_123 -Value "Boop Test 123" -Force New-Variable -Name v_boophoop_123 -Value "BoopHoop Test 123" -Force New-Variable -Name v_boophoop_234 -Value "BoopHoop Test 234" -Force $hashtable =@{ foo = "String1" bar = "String2" boop = "String3" boophoop = "String4" } $variables = Get-Variable -Name v_* ForEach ($var in $variables) { #$String= ($hashtable.GetEnumerator() | Where-Object {$var.Name.Substring(2) -match [regex]::Escape($_.Key)}).Value $String= ($hashtable.GetEnumerator() | Where-Object {$var.Name.Substring(2).Contains($_.Key + '_')}).Value Write-host $var.Name "->" $String }
Beste Gruesse
brima- Als Antwort markiert André König [DE] Dienstag, 5. November 2019 15:06
Alle Antworten
-
Hallo,
so aus dem blauen ...
New-Variable -Name v_foo_123 -Value "Foo Test 123" -Force New-Variable -Name v_bar_123 -Value "Bar Test 123" -Force New-Variable -Name v_boop_123 -Value "Boop Test 123" -Force New-Variable -Name v_boophoop_123 -Value "BoopHoop Test 123" -Force New-Variable -Name v_boophoop_234 -Value "BoopHoop Test 234" -Force $hashtable =@{ foo = "String1" bar = "String2" boop = "String3" boophoop = "String4" } $variables = Get-Variable -Name v_* ForEach ($var in $variables) { #$String= ($hashtable.GetEnumerator() | Where-Object {$var.Name.Substring(2) -match [regex]::Escape($_.Key)}).Value $String= ($hashtable.GetEnumerator() | Where-Object {$var.Name.Substring(2).Contains($_.Key + '_')}).Value Write-host $var.Name "->" $String }
Beste Gruesse
brima- Als Antwort markiert André König [DE] Dienstag, 5. November 2019 15:06
-
Hallo brima.
ins grüne, oder eher schwarze. Danke das hat das Problem in meinem Beispiel gelöst.
Leider hab ich scheinbar das Beispiel nicht ganz genau bedacht, denn in meinem echten Script sind die Variable Namen teilweise ohne folgendes _
Ich habe die aber einfach angepasst, sind eh nur temporäre, so geht es jetzt.
Vielen Dank Dir.