newbi2009
Goto Top

Powershell - Ausgabe von Inhalt meiner Variable

Hallo zusammen,
in meinem Programm fülle ich einige Variablen mit Werten (Variable-Name am Ende mit aufsteigender Ziffer). Diese möchte ich später ausgeben, ohne jede Variable einzelnd ("manuell") anzusprechen. Ich versuche den Variable-Namen in einer Schleife zu erzeugen und den Wert in der Variable zu verarbeiten/auszugeben.

Ich bekomme aber den Inhalt der Variable auf diesem Weg nicht ausgegeben. Kann mir da wohl jemand auf die Sprünge helfen, wo mein Fehler liegt?

Hier ein Beispiel um zu veranschaulichen, was ich genau meine:

Ich möchte folgendes ausgegeben bekommen:

Durchgang 1
Die Farbe ist rot
Durchgang 2
Die Farbe ist blau
Durchgang 3
Die Farbe ist grün

Ich bekomme aber ausgegeben:

Durchgang 1
Die Farbe ist $Farbe1
Durchgang 2
Die Farbe ist $Farbe2
Durchgang 3
Die Farbe ist $Farbe3


das ist mein Code:

$Farbe1= 'rot'  
$Farbe2= 'blau'  
$Farbe2= 'grün'  

for ($counter=1;$counter -lt 4;$counter++) {
write-host Durchgang $counter
$Farbe=('$Farbe'+$counter).tostring()  
write-host Die Farbe ist $Farbe
}

Ich könnte mir vorstellen, das das Problem in dem .toString() liegt, mit dem ich die Variable fülle - ich wüsste aber nicht, wie ich das sonst machen sollte....

Vielen Dank
Holger

Content-Key: 3141087079

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

Printed on: April 16, 2024 at 11:04 o'clock

Member: TK1987
TK1987 Jun 22, 2022 updated at 07:04:07 (UTC)
Goto Top
Moin,

sowas erreicht man am einfachsten über eine Enumeration.

Dadurch wird der Farbe wirklich ihr entsprechender Wert zugewiesen - und du kannst jederzeit den Wert in den Namen der Farbe - oder umgekehrt den Namen der Farbe in ihren Wert konvertieren.
Enum Farbe {
  rot  = 1
  blau = 2
  grün = 3
}

1..3 | %{
  "Durchgang $_"  
  "Die Farbe ist " + [Farbe]$_  
}

Gruß Thomas

BTW: Schon einen Blick in unseren Powershell Leitfaden für Anfänger geworfen?
Member: newbi2009
newbi2009 Jun 22, 2022 at 07:20:06 (UTC)
Goto Top
Hallo Thomas,

danke für die Antwort - aber das kann ich so nicht machen..... Ich habe ein (ellenlanges) Programm, in dessen Verlauf ich die Variablen (hier nur beispielhaft $Farbe1 - $Farbe3 genannt) bereits gefüllt habe. In Wahrheit gibt es wesentlich mehr "Farben" und diese sind auch nicht statisch gefüllt. Sprich die Variable "$Farbe1" hat mal den Wert grün und mal den Wert rot.....

Gruß
Holger
Member: TK1987
Solution TK1987 Jun 22, 2022 updated at 07:29:42 (UTC)
Goto Top
Moin Holger,

Zitat von @newbi2009:
In Wahrheit gibt es wesentlich mehr "Farben" und diese sind auch nicht statisch gefüllt. Sprich die Variable "$Farbe1" hat mal den Wert grün und mal den Wert rot.....
Das solltest du überdenken. Darüber hinaus lässt sich Enum auch mehrfach neu definieren - und du kannst natürlich beliebig Farben hinzufügen.

Aber um deine Frage zu beantworten:
$Farbe1= 'rot'  
$Farbe2= 'blau'  
$Farbe3= 'grün'  

1..3 | %{
  "Durchgang $_"  
  "Die Farbe ist " + (iex "`$Farbe$_")  
}
Zur Info: iex ist Alias für Invoke-Expression und führt einen Text als Code aus.

Gruß Thomas
Member: colinardo
Solution colinardo Jun 22, 2022 updated at 08:33:02 (UTC)
Goto Top
Servus.
Oder man nimmt eben ganz klassisch ein Array
$farben = 'rot','grün','blau'  
0..2 | %{
    $farben[$_]
}

Alternativ zu Invoke-Expression ginge es auch noch mittels Get-Variable
$farbe1 ='rot'  
$farbe2 ='grün'  
$farbe3 ='blau'  
1..3 | %{
    (get-variable -Name "farbe$_").Value  
}
Grüße Uwe
Member: newbi2009
newbi2009 Jun 22, 2022 at 10:32:32 (UTC)
Goto Top
sehr cool! Danke!!