highspeed1
Goto Top

PowerShell - Get-Variable mit multiplen Suffix

Hallo Forum.

Ich habe in einer Variable den Namen einer anderen Variable stehen.

$VarDescription = "`$Test_1.Test_11.Test_111"  

Diese hat jedoch mehrere Stufen.

$Test_1.Test_11.Test_111

Jetzt muss ich den Wert den diese Variable hat auslesen. Hierfür habe ich dieses Versuchsprogramm geschrieben.

Versuch 1-4 funktionieren.
Versuch 5: Im Gegensatz zu Versuch 4 hat hier das Suffix einen "." drinstehen. ==> Kein Ergebnis
Versuch 6: Das Suffix wir in zwei Teile zerteilt. ==> funktioniert
Versuch 7: Das Suffix wird automatisch in mehrere Teile zerteilt. Jedoch muss ich die Einzelnen Variablen noch manuell hintereinander setzen.

(Get-Variable $VarName).Value.$Suffix_01.$Suffix_02

Wie kann man das automatisch machen, egal wie viele Suffix es gibt?

cls

$Test_1 = [ordered]@{}
$Test_1.Test_11 = [ordered]@{}
$Test_1.Test_12 = "Text 12"  

$Test_1.Test_11.Test_111 = "Text 111"  


Write-Host "`nVersuch 1" -f Green  
Write-Host "=========" -f Green  
Write-Host "Var-Wert von `$Test_1.Test_12:          " $Test_1.Test_12 -f Green  
Write-Host "Var-Wert von `$Test_1.Test_11.Test_111: " $Test_1.Test_11.Test_111 -f Green  

Write-Host `n=======================================================================================================================================================

Write-Host "`nVersuch 2" -f Cyan  
Write-Host "=========" -f Cyan  
Write-Host "Var-Wert von `$Test_1.Test_12:          " (Get-Variable Test_1).Value.Test_12 -f Cyan  

Write-Host `n=======================================================================================================================================================

Write-Host "Versuch 3" -f Magenta  
Write-Host "=========" -f Magenta  
Write-Host "Var-Wert von `$Test_1.Test_11.Test_111: " (Get-Variable Test_1).Value.Test_11.Test_111-f Magenta  

Write-Host `n=======================================================================================================================================================

Write-Host "`nVersuch 4" -f Yellow  
Write-Host "=========" -f Yellow  
Write-Host "`nGet-Variable mit VarName und einem Suffix`n"  

$VarDescription = "`$Test_1.Test_12"  

$FullVarName = $VarDescription.Substring(1) # nur $-Zeichen abschneiden
$VarName     = $FullVarName.Split('.')[0]   # Alle Zeichen vor dem "."  
$Suffix      = $FullVarName.Split('.')[1]   # Alle Zeichen hinter dem "."  

Write-Host "FullVarName: " $FullVarName -f Yellow  
Write-Host "VarName:     " $VarName     -f Yellow  
Write-Host "Suffix:      " $Suffix      -f Yellow  
Write-Host "Var-Wert von `$Test_1.Test_12: " (Get-Variable $VarName).Value.$Suffix -f Yellow  

Write-Host `n=======================================================================================================================================================

Write-Host "`nVersuch 5" -f Red  
Write-Host "=========" -f Red  
Write-Host "`nGet-Variable mit VarName und mehreren Suffix in einer Variable`n"  

$VarDescription = "`$Test_1.Test_11.Test_111"  

$FullVarName = $VarDescription.Substring(1)              # nur $-Zeichen abschneiden
$VarName     = $FullVarName.Split('.')[0]                # Alle Zeichen vor dem ersten "."  
$Suffix      = $FullVarName.Substring($VarName.Length+1) # Alle Zeichen hinter dem ersten "." 

Write-Host "FullVarName: " $FullVarName -f Red  
Write-Host "VarName:     " $VarName     -f Red  
Write-Host "Suffix:      " $Suffix      -f Red  
Write-Host "Var-Wert von `$Test_1.Test_11.Test_111: " (Get-Variable $VarName).Value.$Suffix -f Red  

Write-Host `n=======================================================================================================================================================

Write-Host "`nVersuch 6" -f Green  
Write-Host "=========" -f Green  
Write-Host "`nGet-Variable mit VarName und geteiltem Suffix`n"  

$Suffix_1 = $Suffix.Split('.')[0]  
$Suffix_2 = $Suffix.Split('.')[1]  

Write-Host "Var-Wert von `$Test_1.Test_11.Test_111: " (Get-Variable $VarName).Value.$Suffix_1.$Suffix_2 -f Green  

Write-Host `n=======================================================================================================================================================

Write-Host "`nVersuch 7" -f Yellow  
Write-Host "=========" -f Yellow  
Write-Host "`nGet-Variable mit VarName und geteiltem Suffix in Variablen SuffixNamen`n"  

$SuffixCounter =0
0..(($Suffix.Split('.').Count)-1) | foreach {  
    $SuffixCounter += 1
    $SuffixName     = "Suffix_0" + $SuffixCounter  
    $SuffixValue    = $Suffix.Split('.')[$SuffixCounter-1]  

    Set-Variable -Name $SuffixName -Value $SuffixValue

    Write-Host "SuffixCounter: " $SuffixCounter  
    Write-Host "SuffixName:    " $SuffixName  
    Write-Host "SuffixValue:   " $SuffixValue  
    Write-Host -----------------------------------------
}


Write-Host "Var-Wert von `$Test_1.Test_11.Test_111: " (Get-Variable $VarName).Value.$Suffix_01.$Suffix_02 -f Yellow  

Hat jemand eine Idee wie man sowas umsetzen kann?

Content-ID: 671416

Url: https://administrator.de/forum/powershell-get-variable-mit-multiplen-suffix-671416.html

Ausgedruckt am: 22.02.2025 um 16:02 Uhr

manuel-r
manuel-r 17.02.2025 um 11:49:10 Uhr
Goto Top
Hat jemand eine Idee wie man sowas umsetzen kann?

Am besten wohl mit einem multidimensionalen Array

Manuel
HighSpeed1
HighSpeed1 17.02.2025 um 12:17:36 Uhr
Goto Top
Hallo manuel-r.

Wie könnte so etwas aussehen?

cls

$Test_1 = [ordered]@{}
$Test_1.Test_11 = [ordered]@{}
$Test_1.Test_12 = "Text 12"  

$Test_1.Test_11.Test_111 = "Text 111"  
$Test_1.Test_11.Test_112 = "Text 112"  

# ======================================================================================================

$VarDescription = "`$Test_1.Test_11.Test_111"  

$FullVarName = $VarDescription.Substring(1)              # nur $-Zeichen abschneiden
$VarName     = $FullVarName.Split('.')[0]                # Alle Zeichen vor dem ersten "."  
$Suffix      = $FullVarName.Substring($VarName.Length+1) # Alle Zeichen hinter dem ersten "." 

$SuffixCounter =0
0..(($Suffix.Split('.').Count)-1) | foreach {  
    $SuffixCounter += 1
    $SuffixName     = "Suffix_0" + $SuffixCounter  
    $SuffixValue    = $Suffix.Split('.')[$SuffixCounter-1]  

    Set-Variable -Name $SuffixName -Value $SuffixValue

    Write-Host "SuffixCounter: " $SuffixCounter  
    Write-Host "SuffixName:    " $SuffixName  
    Write-Host "SuffixValue:   " $SuffixValue  
    Write-Host -----------------------------------------
}

((Get-Variable $VarName).Value)[$Suffix_01][$Suffix_02]

Mit diesem Ergebnis kann ich ja immer noch nichts anfangen. Irgendwie muss ich die Abfrage für den Wert automatisch zusammenbauen.

Also dieser Teile der letzten Zeile müsste sich automatisch generieren:

[$Suffix_01][$Suffix_02]
manuel-r
manuel-r 17.02.2025 um 14:08:21 Uhr
Goto Top
Hier ist eigentlich ziemlich einfach erklärt, wie es funktioniert: https://redmondmag.com/Articles/2019/01/28/Multi-Dimensional-PowerShell- ...
Habe ich mal schnell gegoogelt. Bestimmt gibt es noch unzählige andere Seiten wo es vielleicht sogar auf deutsch erklärt wird.
mediodia
Lösung mediodia 17.02.2025 aktualisiert um 15:21:05 Uhr
Goto Top
Jetzt muss ich den Wert den diese Variable hat auslesen.
Invoke-Expression ist dein Freund
$Test_1 = [ordered]@{
    Test_11 = [ordered]@{
        Test_111 = "Text 111"  
    }
}
$VarDescription = '$Test_1.Test_11.Test_111'  
Invoke-Expression $VarDescription
https://tio.run/##K8gvTy0qzkjNyfn/XyUktbgk3lDBViE6vygltSg1JdahmksBCCAS2G ...
Pjordorf
Pjordorf 17.02.2025 um 16:32:14 Uhr
Goto Top
Hallo,

Zitat von @HighSpeed1:
Diese hat jedoch mehrere Stufen.
Nö, ist nur längerer Text der nur für dich als Lesendes Individuum einen möglichen Sinn und Struktur ergibt. Ein Rechner sieht nur sehr viele 0en und 1en. Das Telefonbuch von München hat mehr Struktur.

Gruss,
Peter
HighSpeed1
HighSpeed1 19.02.2025 um 14:25:22 Uhr
Goto Top
Zitat von @mediodia:

Invoke-Expression ist dein Freund

Danke das ist die Lösung. Manchmal ist es soooo einfach.

Gruß Christoph