michi.wtr
Goto Top

Filteroptionen für DataTable

Hey zusammen,

derzeit beschäftige ich mich mit PowerShell und SQL-Servern.
Ich baue mit PowerShell eine Verbindung zum SQL-Server auf, starte meine Abfrage (Query) und speichere das Ergebnis in eine Tabelle.

$table = New-Object System.Data.DataTable
$table.Load($query.ExecuteReader( ))

Soweit so gut. Ich kenne mich zwar mit SQL überhaupt nicht aus, jedoch sind die Abfragen die ich im Moment starte nicht sehr kompliziert und enthalten auch nur die Operanden (hoffentlich der richtige Begriff ;) ) SELECT, FROM und WHERE.
Somit kann ich dann die Einträge für Mitarbeiter einfach auslesen.

Nun stehe ich vor dem Problem, dass ich die Tabelle in PowerShell filtern möchte. Dies habe ich gelesen funktioniert wunderbar mit einem DataView Objekt für meine Tabelle. Um das zu vereinfachen gehen wir davon aus, die Spalten meiner Tabelle heißen nun Vorname, Nachname und MitarbeiterID

$tableFilter = New-Object System.Data.DataView($table)
$tableFilter.RowFilter = "Vorname = 'Josef'"  
$tableFilter.GetEnumerator( )

Das Ergebnis gibt mir nun auch wunderbar alle Mitarbeiter aus, die Josef heißen. Ab hier fängt es aber an, schwierig zu werden...

Ich beziehe die Namen die ich Filtern möchte aus dem AD, wobei hier aber die Namen zwar größtenteils übereinstimmen, bei einigen Mitarbeitern jedoch nur entweder im AD oder in der Datenbank der Volle Name steht (Zweitname etc.).
Ist nun in der Datenbank der Komplette Name eingetragen, so ist das kein Problem, da ich mit folgender Abfrage auch die Mitarbeiter mit weiterem Namen finde:

$tableFilter.RowFilter = "Vorname LIKE '$($ADUser.Vorname)%'"  

Die Struktur für den RowFilter habe ich durch etwas rumprobieren herausgefunden. Diese ähnelt sehr stark (oder ist vielleicht sogar dieselbe?) der Struktur der SQL. Jedoch funktioniert dies nicht mit CONTAINS o.ä., daher nun die Frage:
Wie bekomme ich den Mitarbeiter gefiltert, für den zwar im AD der volle Vorname steht (inklusive Zweitname), jedoch nicht in der Datenbank?
Da ich leider keinen Primary Key habe, mit welchem ich die Benutzer in der Datenbank identifizieren kann, ist der einfachste Weg dies über den Vor- + Nachname zu machen. (PK im AD: Email, PK in DB: MitarbeiterID)

Vergebliche versuche bisher waren:

$tableFilter.RowFilter = "Vorname + '%' LIKE '$($ADUser.Vorname)'"  
$tableFilter.RowFilter = "'$($ADUser.Vorname)' LIKE Vorname + '%'  

Ist die Sprache für DataView Filter überhaupt SQL? Denn ja ich beziehe meine Daten zwar über eine SQL-Datenbank, jedoch könnte ich diese auch von einer x-beliebigen Datenmenge beziehen...
Leider funktionieren aber die normalen Operatoren und Operanden der PowerShell hier nicht (-eq -and -gt -match ...)


Vielen lieben Dank schonmal im Voraus und schöne Feiertage,
Micha face-smile

Content-Key: 5056879341

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

Printed on: April 27, 2024 at 23:04 o'clock

Mitglied: 4863114660
Solution 4863114660 Dec 22, 2022 updated at 18:36:50 (UTC)
Goto Top
Wie bekomme ich den Mitarbeiter gefiltert, für den zwar im AD der volle Vorname steht (inklusive Zweitname), jedoch nicht in der Datenbank?
$table.Rows | ?{$aduser.Vorname -like "$($_.Vorname)*"}  
https://tio.run/##dc/PCoJAEAbwu0@xLAtqpG8QFUl0yaCoi0RM7lDW6srumoX17Lb98R ...

Hättest du ja eigentlich direkt in der SQL Query mit nem where-clause machen können, das ist schneller.

Die Struktur für den RowFilter habe ich durch etwas rumprobieren herausgefunden
Kannst du auch nachlesen
https://www.csharp-examples.net/dataview-rowfilter/

S.