Powershell 2 DataTable Daten mergen
Hi in die Runde,
ich habe 2 DataTables, eine mit X Spalten und eine mit Y Spalten.
Der Inhalt von Spalte B in Tabelle 1 soll anhand eines Kriteriums in Spalte C von Tabelle 2.
Ich denke bestimmt wieder viiiiiiel zuviel um die Ecke, oder Kaffeemangel ^^.
Das Ganze unten ist der Versuch das herunterzubrechen.
Das holen der Info Name und Description aus dem AD läuft.
Das Verheiraten der Beschreibung mit der $global:table in die Spalte Beschreibung noch nicht.
Hat einer eine Idee?
Aktuell ist er der Meinung die Spalte Beschreibung existiert nicht.
VG
ich habe 2 DataTables, eine mit X Spalten und eine mit Y Spalten.
Der Inhalt von Spalte B in Tabelle 1 soll anhand eines Kriteriums in Spalte C von Tabelle 2.
Ich denke bestimmt wieder viiiiiiel zuviel um die Ecke, oder Kaffeemangel ^^.
Das Ganze unten ist der Versuch das herunterzubrechen.
$TableName = "DataTable"
$global:table = New-Object system.Data.DataTable "$TableName"
$col0 = New-Object system.Data.DataColumn Name, ([bool])
$col1 = New-Object system.Data.DataColumn Beschreibung, ([string])
$global:table.columns.add($col0)
$global:table.columns.add($col1)
$row = ($false, "xxx-W-CM19","","","")
$global:table.Rows.Add($row)
$row = ($false, "xxx-W-CM15","","","")
$global:table.Rows.Add($row)
$DC = ( Get-ADDomainController -Discover -DomainName <Domain>).HostName
$Servers = Get-ADComputer `
-Server $DC `
-Filter {(OperatingSystem -like '*Server*' -and Name -like '*-W-CM1*')}`
-Properties Name, Description
$global:ServerData = $Servers `
| Select -Property `
Name, `
Description `
| Sort Name
$global:ServerData | %{
$Name = $_.Name
$zwischen = $global:table.where({$_.ServerName -eq $Name })
$zwischen.Beschreibung = $_.Description
}
Das holen der Info Name und Description aus dem AD läuft.
Das Verheiraten der Beschreibung mit der $global:table in die Spalte Beschreibung noch nicht.
Hat einer eine Idee?
Aktuell ist er der Meinung die Spalte Beschreibung existiert nicht.
VG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 351413
Url: https://administrator.de/forum/powershell-2-datatable-daten-mergen-351413.html
Ausgedruckt am: 16.04.2025 um 10:04 Uhr
6 Kommentare
Neuester Kommentar

$_.ServerName
Die Spalte gibt es laut deinem Code in deiner Datatable nicht! So denn kann er auch nichts finden.p.s. es gibt die Datatable.Merge Methode um Datatables zu aktualisieren/ergänzen

Die Ausgabe ist für mich überhaupt nicht nachvollziehbar. Müsste er nicht ZWEI Ausgaben machen?
Nein, wenn du es hinterander auf der Konsole ausgibst fasst die Shell das in der Anzeige zusammen, wie auch bei anderen Objekten mit ähnlichen Eigenschaften. Trotzdem bleiben es zwei separate Objekte, die Ausgabe täuscht dir hier nur was vor weil es zwei Objekte des selben Typs sind!
Dein Code oben kann nicht funktionieren weil du die Row einer weiteren Variablen zuweist und damit nicht die Datatable selbst veränderst sondern nur die Eigenschaften innerhalb der Variablen! Jetzt klar ? Du musst die Datarow selbst direkt verändern.
Damit du siehst was ich meine hier ein kleines Beispiel
Stell dir dir Objekte im Speicher vor, die Variabel ist ein ganz neues Objekt und gehört nicht der Datatable an. Es wäre was anderes wenn hier ein Pointer wie in C verwendet werden würde.
Damit du siehst was ich meine hier ein kleines Beispiel
$dt = New-Object System.Data.DataTable
$dt.Columns.Add("Name") | out-null
$dt.Columns.Add("Alter")| out-null
$dt.Rows.Add(("Maria",55))| out-null
$dt.Rows.Add(("Max",39))| out-null
$dt.Columns.Add("Gehalt")| out-null
# Geht nicht weil du nur die Variable und nicht die Datarow veränderst!
$r = $dt.Rows.Where({$_.Name -eq "Max"})
$r.Gehalt = 10000
# Geht weil du dir Datarow direkt veränderst!
$dt.Rows.Where({$_.Name -eq "Max"}) | %{$_.Gehalt = 2500}
$dt.Rows
Stell dir dir Objekte im Speicher vor, die Variabel ist ein ganz neues Objekt und gehört nicht der Datatable an. Es wäre was anderes wenn hier ein Pointer wie in C verwendet werden würde.