fisicgn
Goto Top

Powershell Arrayvariable in Schleife füllen

Hallo zusammen,

ich möchte folgendes bewerkstelligen:

Ich habe eine Arrayvariable:
$store = @("Computer1_SN","Computer2_SN","Computer3_SN","Computer4_SN","Computer5_SN")
Nun durchlaufe ich bspw. dreimal eine Schleife:
for ($i=1; $i -le 3; $i++) {$store.ComputerX_SN = "Wert"}
Diese Schleife wird unterschiedlich oft durchlaufen (1 - 5 mal).
Ich möchte nun in meiner Arrayvariable das Feld "ComputerX_SN" dynamisch ansprechen.
Wie kann ich also das "X" als Variable angeben?

Ich hoffe, es ist verständlich und danke schon mal für die Antworten.

Danke & Grüße

Content-Key: 226316

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

Printed on: April 24, 2024 at 14:04 o'clock

Member: colinardo
colinardo Jan 10, 2014 updated at 12:21:32 (UTC)
Goto Top
Hallo fisicgn, Willkommen im Forum!
das was du vorhast hat keinen Sinn denn du kannst dem Array-Element so selber keinen zusätzlichen Wert zuordnen, höchstens den Array-Wert neu setzen. Du solltest hier stattdessen mit einer Hashtable arbeiten:
$store = @{"Computer1_SN"="";"Computer2_SN"="";"Computer3_SN"="";"Computer4_SN"="";"Computer5_SN"=""}  
for ($i=1; $i -le 3; $i++) {
    $store["Computer$($i)_SN"] = "Das ist Testwert $i"  
}
echo $store
Grüße Uwe
Member: fisicgn
fisicgn Jan 10, 2014 updated at 14:25:15 (UTC)
Goto Top
Hallo Uwe,

ich habe deinen Vorschlag jetzt noch nicht getestet, aber er klingt soweit ganz gut.
Nur fällt mir dazu ein, warum ich kein Hash-Table verwenden wollte:
Ich würde abschließend gerne die Variable $store in eine csv-Datei exportieren. Und das habe ich mit meinem Array irgendwie einfacher hinbekommen:
$Array = @(.....)
[.....]
$Array | Export-Csv "C:\Array.csv" -NoTypeInformation -Delimiter:";"

Grüße
Markus
Member: colinardo
colinardo Jan 10, 2014 updated at 14:30:16 (UTC)
Goto Top
Zitat von @fisicgn:
Ich würde abschließend gerne die Variable $store in eine csv-Datei exportieren. Und das habe ich mit meinem Array
irgendwie einfacher hinbekommen:
Hashtable Export in CSV, kein Problem:
$obj = New-Object PSObject -Property $store
$obj | Export-Csv "C:\Array.csv" -Delimiter ";" -NoTypeInformation  
Grüße Uwe
Member: fisicgn
fisicgn Jan 10, 2014 updated at 15:02:05 (UTC)
Goto Top
Hm, soweit auch ok...
ich brauche aber ein Table (Array oder Hash) in welchem ich auch mehrere Zeilen einspeichern kann. Also die Bezeichnungen "ComputerX_SN" sollen die Zeilentitel darstellen

Ich versuche mein Problem nochmal zu abstrahieren:
Ich gehe also bspw. in einer weiteren Schleife welche bspw. die Raumnummern darstellt

- Von Raumnummer 1 bis Raumnummer 10
- Schaue wie viele PCs im Raum sind (1-5) und erkenne die Seriennummern
- Jeder PC hat eine eigenständige Nummer (1-5) zusätzlich zur Seriennummer

- Raum 1 hat drei PCs; PC1, PC3 und PC5. PC2 und PC4 fehlen

- Nun soll eine Variable (Hash oder Array) gefüllt werden
Titelzeile: Computer1_SN;Computer2_SN,Computer3_SN,Computer4_SN,Computer5_SN,
1. Zeile (=1. Raum): Serial1;;Serial3;;Serial5
usw.

Grüße
Markus

PS:
Muss ich vielleicht einfach einmal das Hash-Table erstellen so wie du es geschrieben hast, und dann erstelle ich noch ein Array und hänge dann immer am Ende der Schleife den Hash-Table ins Array an:
$Array += $Hashtable
Member: colinardo
colinardo Jan 10, 2014 updated at 15:59:09 (UTC)
Goto Top
Zitat von @fisicgn:
$Array += $Hashtable
das ist schon der richtige Ansatz:
Du erstellst ein leeres Array, dann machst du aus einem Array in dem die Computernamen stehen ein PS-Objekt und hängst das an dein Array an. Das sind dann quasi die Überschriften. Für die Räume arbeitest du dann mit einer Hashtable und weist in dieser den Rechnern die Seriennummern zu machst daraus ein PS-Object und hängst dies dann wieder an das Array dran, usw.
$arr = @()
# Überschriften 
$arr += New-Object PSObject -Property @("Computer1_SN","Computer2_SN","Computer3_SN","Computer4_SN","Computer5_SN")  

for ($i=1; $i -le 10; $i++) {
    # Zeile mit entsprechender Zuordnung zum Array hinzufügen
    $arr += New-Object PSObject -Property @{"Computer1_SN"="Serial1";"Computer2_SN"="Serial2";"Computer3_SN"="Serial3";"Computer4_SN"="Serial4";"Computer5_SN"="Serial5"}  
}
# Exportieren
$arr | Export-Csv "C:\Temp\test.csv" -Delimiter ";" -NoTypeInformation  
denke jetzt sollte die Methode klar sein.

Grüße Uwe