marabunta
Goto Top

Powershell new variable foreach section in ini-File

Hallo,

ich nutze die Get-IniContent Funktion von hier:
https://gallery.technet.microsoft.com/scriptcenter/ea40c1ef-c856-434b-b8 ...
darin ist auch eigentlich alles drin nur regex ist mir noch zu kryptisch um den sektionsnamen rauszuziehen...

ich habe eine INI-Datei die so aussieht:

[Nummer1]
DATEN_SERVER=C:\Pfad

[Nummer2]
DATEN_SERVER=C:\Pfad

und im Skript folgendes:
$Nummer1_WKONFIG = $IniContentZENTRAL["Nummer1" ]["DATEN_SERVER"] + $Pfad_w
$Nummer2_WKONFIG = $IniContentZENTRAL["Nummer2"]["DATEN_SERVER"] + $Pfad_w
...

Für jede Nummer brauche ich noch eine extra Zeile. Wie schaffe ich es, die Sektionsnamen auszulesen und mit den Namen dann Variablen zu erzeugen?

#grundsätzliche idee
$a=Get-IniContent $ini
foreach($Sektion in $Sections) { # hier muss ich noch irgendwie den sektionsnamen (nummer1,nummer2...) herausfinden
[string]$nummerx= $_
$name=$nummerx + "_WKONFIG"
invoke-expression "$name" #jedenfalls den neuen zusammengesetzten namen als variable, ich denke das stimmt hier noch nicht
$name=$IniContentZENTRAL["$name"]["DATEN_SERVER"]
}

Damit hätte ich dann für jede Sektion auch gleich die Variable nach einem schema zur Verfügung ohne mehraufwand wenn die Ini-Datei erweitert wird.

Gibt es da etwas?

Content-Key: 256844

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

Ausgedruckt am: 29.03.2024 um 11:03 Uhr

Mitglied: colinardo
Lösung colinardo 05.12.2014 aktualisiert um 14:39:07 Uhr
Goto Top
Moin Marabunta,
$a = Get-IniContent $ini
$a.GetEnumerator() | %{New-Variable -Name $_.Name -Value $_.Value.DATEN_SERVER -Force}

# Beispiel-Ausgabe der Variablen
write-host $Nummer1
write-host $Nummer2
Aber in der zurückgelieferten Hashtable von get-IniContent kannst du ja bereits so die Werte zurückgeben
$a.Nummer1.DATEN_SERVER
Wozu dann noch neue Variablen ?

Zur Arbeit mit Hashtables empfehle ich dir folgenden Artikel:
http://technet.microsoft.com/en-us/library/ee692803.aspx

Grüße Uwe
Mitglied: Marabunta
Marabunta 05.12.2014 um 13:57:51 Uhr
Goto Top
Danke! Wer hätte gedacht, dass es auch einfach geht.
Mir gefallen die Möglichkeiten von Hashtables, auch in anderen Szenarien.
Noch sind meine Versuche mit selbst geschriebenen Hashtables oft fehlerhaft und doch verstehe ich es immer besser.

Spricht etwas dagegen Set-Variable zu verwenden? Beim wiederholen ohne die alten Variablen zu löschen meckert er dann nicht.
Mitglied: colinardo
colinardo 05.12.2014 aktualisiert um 14:01:09 Uhr
Goto Top
Zitat von @Marabunta:
Spricht etwas dagegen Set-Variable zu verwenden? Beim wiederholen ohne die alten Variablen zu löschen meckert er dann nicht.
nein, kannst du natürlich auch machen.
p.s. wenn du an New-Variable -Force anhängst geht's aber auch damit beim erneuten Aufruf in der selben Session face-smile
Mitglied: Marabunta
Marabunta 05.12.2014 um 14:10:13 Uhr
Goto Top
$a.Nummer1.DATEN_SERVER - ähnliches hatte ich so probiert:
$a[nummer1][...] funktionierte nicht. Später habe ich erst den fehler mit den Anführungszeichen festgestellt.
$a["nummer1"]["..."] wäre also richtig.
Aus dieser Historie und etwas herumprobieren hatte ich dann den Status quo mit neuen Variablen.
Jetzt kommst du und machst alles wieder einfach xD
Mitglied: colinardo
colinardo 05.12.2014 aktualisiert um 14:20:55 Uhr
Goto Top
Hashtable Werte lassen sich auf vielfältige Weise abfragen:
$a.Nummer1
$a.'Nummer1'  
$a['Nummer1']  
um ein neues Wertepaar einer Hastable hinzuzufügen kannst du auch einfach so schreiben
$a.NeuerWert = "BlaBla"

Hier sind auch noch nützliche Schnippsel für die Praxis:
Powershell Arrays deklarieren füllen abfragen ???