AD-Benutzer per Shell auslesen und vergleichen
Hallo,
ich habe von meinem Chef eine Aufgabe bekommen die mich als Powershell anfänger zum verzweifeln bringt.
Ich soll per Skript bei den AD-Usern etwas vergleichen.
Das Skript soll den eingegeben Namen im AD mit dem Anzeigenamen (Vor- und Nachnamen) vergleichen.
Anschließend sollen unterschiede wie in diesem Beispiel heraus geschrieben werden.
Eingegebener Name: Petra Müller
Anzeigename: Petra Mueller
Ich hatte irgendwie an eine If-Abrage gedacht, aber leider habe ich noch kaum Ahnung von der Shell.
Es wäre nett, wenn mir jemand bei diesem Problem helfen könnte.
Grüße
ich habe von meinem Chef eine Aufgabe bekommen die mich als Powershell anfänger zum verzweifeln bringt.
Ich soll per Skript bei den AD-Usern etwas vergleichen.
Das Skript soll den eingegeben Namen im AD mit dem Anzeigenamen (Vor- und Nachnamen) vergleichen.
Anschließend sollen unterschiede wie in diesem Beispiel heraus geschrieben werden.
Eingegebener Name: Petra Müller
Anzeigename: Petra Mueller
Ich hatte irgendwie an eine If-Abrage gedacht, aber leider habe ich noch kaum Ahnung von der Shell.
Es wäre nett, wenn mir jemand bei diesem Problem helfen könnte.
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 339519
Url: https://administrator.de/forum/ad-benutzer-per-shell-auslesen-und-vergleichen-339519.html
Ausgedruckt am: 16.02.2025 um 23:02 Uhr
8 Kommentare
Neuester Kommentar
Hallo,
noch als Ergänzung zu dem Link von H41mSh1C0R
Eine Übersicht möglicher Vergleichsoperatoren
Viele Grüße
Zitat von @H41mSh1C0R:
Grundlagen: https://www.windowspro.de/script/get-aduser-set-aduser-benutzer-anlegen- ...
Grundlagen: https://www.windowspro.de/script/get-aduser-set-aduser-benutzer-anlegen- ...
noch als Ergänzung zu dem Link von H41mSh1C0R
Eine Übersicht möglicher Vergleichsoperatoren
Viele Grüße
Servus,
gehe ich richtig in der Annahme das hier nach "Ähnlichen" Namen gesucht werden soll?! Denn deine oben geschilderte Änderung (Umlaut) wäre ja nur eine von vielen welche hier der Fall sein könnten.
In dem Fall könntest du eine Änlichkeitssuche durchführen bei der der eingegebene DisplayName mit dem der AD-User mit einer Näherungsfunktion verglichen wird bei der man angibt wieviele Stellen des Namens sich ändern dürfen damit ein Account als "ähnlich" erkannt werden soll.
Hier ein Beispiel wie sowas aussieht:
Es werden hier also alle Accounts zurückgegeben bei denen am DisplayName max. 4 Änderungen vorgenommen werden dürfen damit ein Name matcht.
Grüße Uwe
gehe ich richtig in der Annahme das hier nach "Ähnlichen" Namen gesucht werden soll?! Denn deine oben geschilderte Änderung (Umlaut) wäre ja nur eine von vielen welche hier der Fall sein könnten.
In dem Fall könntest du eine Änlichkeitssuche durchführen bei der der eingegebene DisplayName mit dem der AD-User mit einer Näherungsfunktion verglichen wird bei der man angibt wieviele Stellen des Namens sich ändern dürfen damit ein Account als "ähnlich" erkannt werden soll.
Hier ein Beispiel wie sowas aussieht:
Import-Module ActiveDirectory
# Funktion die die Anzahl an Änderungen an einem String zurückgibt um beide Strings aneinander anzugleichen
function Get-StringDifferences{
param([string] $first, [string] $second)
$l1 = $first.length
$l2 = $second.length
if($l1 -eq 0){return $l2}
if($l2 -eq 0){return $l1}
if($ignoreCase.IsPresent){
$first = $first.tolowerinvariant()
$second = $second.tolowerinvariant()
}
$distance = new-object -type 'int[,]' -arg ($l1+1),($l2+1)
0..$l1 | %{$distance[$_,0] = $_}
0..$l2 | %{$distance[0,$_] = $_}
$cost = 0
for($r = 1; $r -le $l1;$r++){
for($c = 1; $c -le $l2;$c++){
$cost = @{$true=0;$false=1}[($second[$c-1] -ceq $first[$r-1])]
$tmin = [System.Math]::Min(([int]$distance[($r-1),$c]+1) , ([int]$distance[$r,($c-1)]+1))
$distance[$r,$c] = [System.Math]::Min($tmin, ([int]$distance[($r-1),($c-1)] + $cost))
}
}
return $distance[$l1, $l2];
}
# Parameter der Bestimmt wie viele Änderungen (Löschungen/Hinzufügungen/etc) am Namen existieren dürfen damit er als gleich erkannt wird
$max_abweichung = 4
# Eingabe für dem Namen anfordern
$search = Read-Host "Please enter name to search for"
# AD User mit Funktion und Where-Object vergleichen und ähnliche Accounts ausgeben
Get-AdUser -Filter * -Properties DisplayName | ?{(Get-StringDifferences -first $search -second $_.DisplayName) -le $max_abweichung} | select SamAccountName,Name,DisplayName
Grüße Uwe