PowerShell Objekt Properties ersetzen - hinzufügen - ergänzen
Hallo zusammen,
vielleicht könnt ihr mir weiterhelfen. Ich glaube, ich habe mir gerade einen Knoten in den Kopf gedacht und bekomme ihn aktuell nicht entfernt.
Folgendes Szenario:
Ich habe zwei CSV-Dateien, die ich jeweils in eine Variable lade. ($ApplicationData & $WorkerGroupData).
In $ApplicationData habe ich unter anderem die Properties "Servers" und "WorkerGroups".
In $WorkerGroupData habe ich unter anderem die Properties "WorkerGroupName" und "ServerName".
Ich möchte jetzt für jeden Eintrag in $ApplicationData prüfen, ob "Servers" leer ist, wenn "Servers" leer ist, soll überprüft werden, ob "WorkerGroups" auch leer ist. Ist "WorkerGroups" nicht leer, soll der Inhalt aus "WorkerGroups" mit dem Inhalt aus $WorkerGroupData.WorkerGroupName" verglichen werden. Wenn das identisch ist, sollen alle gelieferten "$WorkerGroupData.ServerName" in "$ApplicationData.Servers" eingetragen möglich. Mehrere "Servers" pro "$ApplicationData"-Datensatz sind möglich.
Habt ihr einen Lösungsansatz für mich?
Beste Grüße,
die PoShNiete
vielleicht könnt ihr mir weiterhelfen. Ich glaube, ich habe mir gerade einen Knoten in den Kopf gedacht und bekomme ihn aktuell nicht entfernt.
Folgendes Szenario:
Ich habe zwei CSV-Dateien, die ich jeweils in eine Variable lade. ($ApplicationData & $WorkerGroupData).
In $ApplicationData habe ich unter anderem die Properties "Servers" und "WorkerGroups".
In $WorkerGroupData habe ich unter anderem die Properties "WorkerGroupName" und "ServerName".
Ich möchte jetzt für jeden Eintrag in $ApplicationData prüfen, ob "Servers" leer ist, wenn "Servers" leer ist, soll überprüft werden, ob "WorkerGroups" auch leer ist. Ist "WorkerGroups" nicht leer, soll der Inhalt aus "WorkerGroups" mit dem Inhalt aus $WorkerGroupData.WorkerGroupName" verglichen werden. Wenn das identisch ist, sollen alle gelieferten "$WorkerGroupData.ServerName" in "$ApplicationData.Servers" eingetragen möglich. Mehrere "Servers" pro "$ApplicationData"-Datensatz sind möglich.
Habt ihr einen Lösungsansatz für mich?
Beste Grüße,
die PoShNiete
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-Key: 280086
Url: https://administrator.de/contentid/280086
Ausgedruckt am: 29.03.2024 um 11:03 Uhr
10 Kommentare
Neuester Kommentar
Vermutlich sowas ala
Grüße,
Tiberius
Edit: Hab mal kurz gebastelt
Ist zwar vermutlich umständlich, hilft aber evtl. als Ansatz
$a = Get-Content .\Desktop\graph.csv
$b = Get-Content .\Desktop\graph2.csv
$comp = Compare-Object $a $b | ?{$_.Sideindicator -eq "<="} | select -ExpandProperty SideIndicator
Grüße,
Tiberius
Edit: Hab mal kurz gebastelt
clear-host
$ApplicationDatacsv = gc ".\Desktop\applicationdata.csv"
$WorkerGroupDatacsv = gc ".\Desktop\workergroupdata.csv"
$app=@()
$Work = @()
foreach($w in $WorkerGroupDatacsv){
$w=$w.split(";")
$Work += $w[1]
}
$i=0
foreach($a in $ApplicationDatacsv){
$a = $a.Split(";")
if ($a -eq ""){
$a = $Work[$i]
}
$i++
$app += $a
}
$app
Ist zwar vermutlich umständlich, hilft aber evtl. als Ansatz
Zitat von @PoShNiete:
Hi Tiberius,
vielen Dank für deine Antwort! Bislang sah mein Ansatz eher so aus:
[code]
...Hi Tiberius,
vielen Dank für deine Antwort! Bislang sah mein Ansatz eher so aus:
[code]
[/code]
Code-Tags funktionieren mit < >Das funktioniert aber noch nicht ganz. *am Kopf kratz*
wenn ich den Code übernehme funktioniert da nichts
clear-host
#Pfade der csv-Dateien
$ApplicationDatacsv = gc ".\Desktop\applicationdata.csv"
$WorkerGroupDatacsv = gc ".\Desktop\workergroupdata.csv"
#Erstellung leerer Arrays
$app=@()
$Work = @()
#Nimmt den Inhalt der CSV-Dateie(Workergroup), spaltet die Strings bei ; und legt sie in ein Array
foreach($w in $WorkerGroupDatacsv){
$w=$w.split(";")
$Work += $w[1]
}
#Counter
$i=0
#Nimmt den Inhalt der CSV-Dateie(Appdata), spaltet die Strings bei ;
foreach($a in $ApplicationDatacsv){
$a = $a.Split(";")
#Wenn $a(Serverspalte(zumindestens bei mir)) ohne Eintrag dann setze $a mit der entsprechenden Stelle aus $workerkeroup gleich
if ($a -eq ""){
$a = $Work[$i]
}
#hochzählen des Counters
$i++
<#Hier müssen die restlichen Spalten angefügt werden#>
#Fügt Spalte a(Servername) und Spalte b (Anwendung) zusammen
$app += $a+";"+$a[1]
}
#Erstelle eine 2. text-Datei, in der die aktualisierten Daten liegen
$app | out-file .\Desktop\applicationdata_2.csv
Damit sollte es funktionieren.
P.S. Wobei mich @114757 ´s Ansatz auch interessieren würde, da er vermutlich einfacher ist.
Edit: Beschreibungen
Ich hab das so interpretiert...
Die zwei Variablen hab ich nur mal zur Funktionsdemo mit Daten gefüllt
und nach der Behandlung:
Gruß jodel32
Die zwei Variablen hab ich nur mal zur Funktionsdemo mit Daten gefüllt
$ApplicationData = @'
Servers;WorkerGroups
Server01;Gruppe1
Server02;Gruppe2
;Gruppe22
Server05;Gruppe5
'@ | ConvertFrom-CSV -Delimiter ";"
$WorkerGroupData = @'
WorkergroupName;ServerName
Gruppe22;Server22
Gruppe22;Server23
GruppeX;Server33
GruppeY;ServerY
GruppeZ;ServerZ
'@ | ConvertFrom-CSV -Delimiter ";"
$ApplicationData | ?{$_.Servers -eq "" -and $_.WorkerGroups -ne ""} | %{
$wGroup = $_.WorkerGroups
$_.Servers += $WorkerGroupData | ?{$_.WorkerGroupName -eq $wGroup} | select -Expand ServerName
}
$ApplicationData
$ApplicationData vor der "Behandlung"
Servers WorkerGroups
------- ------------
Server01 Gruppe1
Server02 Gruppe2
Gruppe22
Server05 Gruppe5
Servers WorkerGroups
------- ------------
Server01 Gruppe1
Server02 Gruppe2
Server22 Server23 Gruppe22
Server05 Gruppe5