PowerShell Variablen-Definition
Problem bei der Initialisierung von Array-Variablen - Notation des Namens
Hallo in die Runde,
unter PowerShell 1.0 scheitere ich an folgender Aufgabe, hätte dazu gern Euren Rat:
Aus der folgenden Matrix will ich für jede Zeile eine GLOBALE Variable definieren und initialisieren, deren NAME sich aus den beiden ersten Feldern ableitet:
10;WINXP;Delta200710;D:;M:
11;WINXP;Echo200710;E:;N:
12;WINXP;Fox200710;F:;O:
13;WINXP;GExt200710;G:;G:
20;TRAINER;David200804;D:;S:
21;TRAINER;Esau200804;E:;T:
22;TRAINER;PShell;C:\PS;P:
Die Zeile (in einer FOR-Schleife) besteht aus den Elementen $zlstring[$j] bis $zlstring[$j][4], wobei 'j' die Zeilen-Nummer darstellt.
Die GLOBALE Variable mit dem Namen WINX10 (hier erste Zeile) soll wiederum ein Array mit den fünf Elementen 10, WINXP, Delta200710, D: und M: sein.
Um das Vorgehen klar zu gestalten bilde ich den (literalen) NAMEN der Variablen:
$literale = ($zlstring[$j][1]).Substring(0,4).ToString() + ($zlstring[$j]).ToString()
( ... in diesem Beispiel heißt sie 'WINX10')
Auch deren Definition ist klar:
set-variable -name "$literale" -scope global (Notation des Variablen-Namens in Anführungszeichen !)
Offenbar ist es aber ein PROBLEM, diesem Array Werte zuzuweisen:
1. Versuch:
${"$literale"} = $zlstring[$j][1], $zlstring[$j], zlstring[$j][2], $zlstring[$j][3], $zlstring[$j][4]
Dieser Befehl funktioniert im Script nur scheinbar, d.h. zunächst ohne Fehlermeldung. Aber der Erfolg bleibt aus: Nach Ende des Scripts stehen die GLOBALEN Variablen WINX10 bis WINX13 zur Verfügung, aber sie sind a.) keine Arrays und b.) leer.
2.Versuch
Auch folgende Notation - ergänzt für alle Felder -
${"$literale"} = $zlstring[$j][1]
${"$literale"[1]} = $zlstring[$j]
wird zwar nicht als fehlerhaft beanstandet, - bleibt aber auch ohne Erfolg, im übrigen wie oben.
Solange diese Art der Variablen-Definition nicht funktioniert, habe ich mir einen anderen Lösungsweg ausgedacht. Trotzdem wüßte ich gerne, wo das Problem liegt und wie es zu lösen wäre.
Danke im Voraus und beste Grüße
Jürgen
Hallo in die Runde,
unter PowerShell 1.0 scheitere ich an folgender Aufgabe, hätte dazu gern Euren Rat:
Aus der folgenden Matrix will ich für jede Zeile eine GLOBALE Variable definieren und initialisieren, deren NAME sich aus den beiden ersten Feldern ableitet:
10;WINXP;Delta200710;D:;M:
11;WINXP;Echo200710;E:;N:
12;WINXP;Fox200710;F:;O:
13;WINXP;GExt200710;G:;G:
20;TRAINER;David200804;D:;S:
21;TRAINER;Esau200804;E:;T:
22;TRAINER;PShell;C:\PS;P:
Die Zeile (in einer FOR-Schleife) besteht aus den Elementen $zlstring[$j] bis $zlstring[$j][4], wobei 'j' die Zeilen-Nummer darstellt.
Die GLOBALE Variable mit dem Namen WINX10 (hier erste Zeile) soll wiederum ein Array mit den fünf Elementen 10, WINXP, Delta200710, D: und M: sein.
Um das Vorgehen klar zu gestalten bilde ich den (literalen) NAMEN der Variablen:
$literale = ($zlstring[$j][1]).Substring(0,4).ToString() + ($zlstring[$j]).ToString()
( ... in diesem Beispiel heißt sie 'WINX10')
Auch deren Definition ist klar:
set-variable -name "$literale" -scope global (Notation des Variablen-Namens in Anführungszeichen !)
Offenbar ist es aber ein PROBLEM, diesem Array Werte zuzuweisen:
1. Versuch:
${"$literale"} = $zlstring[$j][1], $zlstring[$j], zlstring[$j][2], $zlstring[$j][3], $zlstring[$j][4]
Dieser Befehl funktioniert im Script nur scheinbar, d.h. zunächst ohne Fehlermeldung. Aber der Erfolg bleibt aus: Nach Ende des Scripts stehen die GLOBALEN Variablen WINX10 bis WINX13 zur Verfügung, aber sie sind a.) keine Arrays und b.) leer.
2.Versuch
Auch folgende Notation - ergänzt für alle Felder -
${"$literale"} = $zlstring[$j][1]
${"$literale"[1]} = $zlstring[$j]
wird zwar nicht als fehlerhaft beanstandet, - bleibt aber auch ohne Erfolg, im übrigen wie oben.
Solange diese Art der Variablen-Definition nicht funktioniert, habe ich mir einen anderen Lösungsweg ausgedacht. Trotzdem wüßte ich gerne, wo das Problem liegt und wie es zu lösen wäre.
Danke im Voraus und beste Grüße
Jürgen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 88040
Url: https://administrator.de/contentid/88040
Ausgedruckt am: 22.11.2024 um 19:11 Uhr