microme
Goto Top

Userliste (CSV) mit Get-Aduser prüfen

Hallo Zusammen,

ich bin neu hier und würde mich freuen, wenn Ihr mir helfen könnt.
Ich bin Anfänger im Bereich PowerShell und möchte folgendes "erledigen":

Ich habe eine Liste mit Userkonten als CSV-Datei vorliegen.
Nun möchte ich prüfen, ob die User bereits im AD existieren.

USERLISTE.CSV
mklein
dgross

Hier mein bisheriges "Script":
Import-Module ActiveDirectory
CLS
$Users = get-content C:\USERLISTE.csv
foreach ($user in $users) {
$PRUEFEN = Get-ADUser -Filter {(samaccountname -eq $user)} 
If ($PRUEFEN -eq $Null) {"$User User existiert nicht im AD"}  
Else {
$status = (get-aduser $User).enabled
if ($Status -ne 'true') {"$USER User ist inactive" } else {"$USER User ist active " }}  
} 

Das Problem ist folgendes: Der Output auf die Console funktioniert soweit.
Leider gelingt es mir aber nicht, die Ausgabe in eine CSV-Datei zu übernehmen.
Außerdem würde ich gerne die Original-Inputliste verwenden, die zusätzliche Informationen enthält. Leider konnte ich nicht herausbekommen, wie ich direkt die Werte der Spalte USERNAME ansprechen kann.

USERLISTE.CSV
username;plz;ort
mklein;10407;Berlin
dgross;20149;Hamburg

Als besonderes i-Tüpfelchen würde ich gerne alle in der Ausgabe-Liste eventuell vorhandenen Dubletten entfernen. face-wink face-smile face-wink

Vorab schon mal merci vielmals face-wink
Holger

Content-Key: 374618

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

Ausgedruckt am: 19.03.2024 um 06:03 Uhr

Mitglied: 136166
Lösung 136166 20.05.2018 aktualisiert um 21:23:05 Uhr
Goto Top
Import-Module ActiveDirectory
CLS
$Users = Import-CSV 'C:\USERLISTE.csv' -delimiter ";"  
$users | Add-Member -Membertype Noteproperty -Name Status -Value '' -Force  
foreach ($user in $users) {
    $result = Get-ADUser -LdapFilter "(samaccountname=$($user.username))"  
    If($result -ne $null){
        $user.Status = @{$true="Active";$false="Inactive"}[($result.Enabled)]  
    }else{
        $user.Status = "Benutzer existiert nicht im AD."  
    }
}
$users | export-csv 'C:\Userliste_neu.csv' -delimiter ";" -NoTypeinformation -Encoding UTF8  
Mitglied: MicroMe
MicroMe 20.05.2018 aktualisiert um 21:30:26 Uhr
Goto Top
Hallo Decathlon,

vielen Dank für Deine Unterstützung.

Ich erhalte die folgende Fehlermeldung:
Get-ADUser : Eigenschaft "username" wurde im Objekt vom Typ "System.Management.Automation.PSCustomObject" nicht gefunden.  
+     $result = Get-ADUser -Filter {(samaccountname -eq $user.username)}
+               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-ADUser], ArgumentException
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Commands.GetADUser
Das Update KB2928680 ist installiert.

In der Datei USERLISTE_NEU.CSV sind zwar Infos verfügbar, aber leider wird für alle Inhalte nur der ELSE-Zweig angesprochen obwohl ACTIVE und INACTIVE User in der Quell-Liste enthalten sind, da die obige Fehlermeldung generiert und deshalb die Variable $result nicht korrekt gefüllt wird.

Könntest Du bitte den nachfolgenden Part einmal etwas näher erläutern?
$user.Status = @{$true="Active";$false="Inactive"}[($result.Enabled)]

Gruß
Holger
Mitglied: MicroMe
MicroMe 20.05.2018 um 22:12:05 Uhr
Goto Top
Hallo Decathlon,

Danke! Nun funktioniert es.
Jetzt verstehe ich auch, warum es bei mir mit "-Filter" nicht funktioniert hat face-wink. LDAPFilter kannte ich bislang noch nicht.

Inzwischen habe ich ich auch zum Thema "Hashtable" eingelesen und kann das Script nun vollständig nachvollziehen.

Schöne Abend
Holger