Powershell / Abfragen von Ad Contact mit dazugehöriger Mail / vergleich von Exellisten ergebnissen

Timons

Cadet 4th Year
Registriert
Feb. 2018
Beiträge
88
Guten Abend meine lieben Nerds ;)

Folgenes Szenario: Ich habe eine Liste mit Usern -gegeben Name und Mail und möchte diese mit Usern und Kontrakten in einer bestimmten OU abgleichen.

$user1 = Get-ADUser -Filter * -Properties Mail -SearchBase $OUpath | select name, givenname, surname, SID, mail | Export-Csv '$path -Delimiter ';' -NoTypeInformation

$user2 = Get-contact -OrganizationalUnit $OUpath2 | Select name, mail

bei Get user klappt das ganz gut, aber beim Contact tu ich mir schwer

Und falls einer ne Idee hat wie ich die beiden Exellisten dann auf Matches bzw nicht Matches vergleiche -> immer her mit den Tipps :D


Danke fürs Lesen!
LG Timon
Ergänzung ()

Achja das Problem ist momentan: ich bekomme keine Mail zurück bei get-contact ^^ ich Dussel
 
Wär das nicht unter Programmieren besser aufgehoben? :confused_alt:

Du berufst Dich auf die Operatoren -in / -contains. Damit kann man unter PS Mengenoperationen abbilden, in dem Fall hier INTERSECT:

Beispiel:
PowerShell:
$intersection = $liste1 | % { $_ -in $liste2 }

wobei natürlich zu bedenken ist, daß die übergebenen Mengen nur bekanntermaßen übereinstimm*bare* Elemente beinhalten, also zB nur die SID oder nur die ObjectGUID. (SID, Mail) einerseits und (SID, Name) andererseits wird nichts brauchbares liefern können.

Bei PS kann man dazu freundlicherweise auf deren Mengenausrichtung zurückfallen. Einfach oben im Beispiel .SID an $liste1 und $liste2 anhängen. Erfordert nur, daß die Objekte in den Listen eine Eigenschaft mit diesem Namen haben und daß die SIDs denselben Personenstamm abbilden.


Option MERGE geht auch - einen gemeinsamen stabilen Schlüssel hernehmen (SID/ObjectGUID/Mailadresse/...), diesen jeweils in derselben Reihenfolge sortieren und dann die Listen abgleichen -- aber das ist unter PS unnötiger Extraaufwand.

Excel ist dafür nicht nötig. PowerShell kann das alles ohne externe Hilfsmittel.
 
  • Gefällt mir
Reaktionen: Timons
ich habe hier gerade keine funktionierende umgebung vor mir und ich kenne get-contact nicht, aber ungefähr so:

Get-aduser * | where {$_.name -eq (get-contact *).name}


edit: habe es gerade mal mit nem textfile getestet.

das txt file enthält nur anmeldekennungen von usern, dieser Befehl zeigt dir AD Konten bei denen als samaccoutname eine der im textfile enthaltenen Kennungen eingetragen ist.
get-aduser -filter * | where {(get-content .\users.txt) -contains $_.samaccountname}

Ich bin mir nciht ganz sicher was genau du mit abgleichen meinst.


edit2:
foreach ($u in (get-content .\users.txt)) {get-aduser -filter {samaccountname -eq $u}}

der is deutlich besser.
TotalMilliseconds : 3537,6938 vs TotalMilliseconds : 78,9863
 
Zuletzt bearbeitet:
Zurück
Oben