Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

AD User anpassen mittels Powershell und Dateiquelle (CSV)

Mitglied: BastardOperatorfromHell

BastardOperatorfromHell (Level 1) - Jetzt verbinden

10.04.2018, aktualisiert 12.04.2018, 1281 Aufrufe, 13 Kommentare

Hallo Forum,

nach langer Zeit hab ich mal wieder eine Frage, die mich zum verzweifeln bringt. Google und Co hat mir bis jetzt leider nicht helfen können.

Folgender Sachverhalt: Ich habe aus dem AD eine CSV gezogen mit den aktuellen Userdaten und benötigten Feldern. Diese wurde dann von der Personalabteilung bearbeitet und soll jetzt korrigiert zurück ins AD. Die Dateiquelle ist eine CSV Datei, wie beim Export. Es sollen alle Felder im AD einfach überschrieben werden.

Folgendes Script hab ich erstellt:

01.

02.
$cv = Import-CSV c:\temp\test.csv -delimiter ';'
03.

04.
foreach ($User in $cv){
05.
Set-ADUser $User.name -Add @{title = $User.title; department = $User.department; mail = $User.mail; telephoneNumber = $User.telephoneNumber; facsimileTelephoneNumber = $User.facsimileTelephoneNumber; mobile = $User.mobile; company = $User.company; streetAddress = $User.streetAddress; postalCode = $User.postalCode}
06.
}
07.
Dieses generiert dann folgenden Fehler:

Set-ADUser : Unter "DC=XXX-dom,DC=XXXXX,DC=de" kann kein Objekt mit der ID "XXXXX" gefunden werden.

Der User existiert natürlich im AD, es gibt auch keinen Schreibfehler in der CSV Datei, mit anderen Usern erscheint die gleiche Fehlermeldung. Die Domäne in der er sucht ist auf jeden Fall die Richtige, die Powershell ISE führe ich als DomainAdmin aus.

Habt ihr ne Idee, woran es liegt? Vielen Dank im Voraus für die Hilfe.
Mitglied: 135799
10.04.2018, aktualisiert um 10:56 Uhr
$User.name
Nutze den SamAccountName statt dem Namen und statt -Add nutze besser -Replace und !Achtung! Wenn die Felder leer sein sollten bringen diese dir Fehler, die musst du dann mit dem Parameter -Clear behandeln!!

Gruß Schnuffi
Bitte warten ..
Mitglied: BastardOperatorfromHell
10.04.2018 um 10:58 Uhr
Hallo Schnuffi

In der CSV hab ich aber nur das Feld "name", ist der SammAccountName nicht ein anderes Feld im AD oder beinhaltet es den selben Wert?

Ich wollte -Add genau aus dem Grund nutzen, weil ich gelesen hab das es mit Replace bei leeren Feldern zu Problemen kommt. Wie funktioniert dann das -Replace genau im zusammenhang mit dem Befehl -Clear? Hast Du da ein Beispiel für mich?
Bitte warten ..
Mitglied: 135799
10.04.2018, aktualisiert um 11:02 Uhr
Zitat von BastardOperatorfromHell:
In der CSV hab ich aber nur das Feld "name", ist der SammAccountName nicht ein anderes Feld im AD oder beinhaltet es den selben Wert?
Nein das sind zwei unterschiedliche Felder!

Ich wollte -Add genau aus dem Grund nutzen, weil ich gelesen hab das es mit Replace bei leeren Feldern zu Problemen kommt. Wie funktioniert dann das -Replace genau im zusammenhang mit dem Befehl -Clear? Hast Du da ein Beispiel für mich?
Ich hol mir immer das Objekt mit Get-ADUser und dann setze ich die Eigenschaften im Objekt um es zum Schluss dann mit
Set-ADUser -Instance $obj
zurückzuschreiben. Simple but effective .
Bitte warten ..
Mitglied: it-frosch
10.04.2018, aktualisiert um 11:11 Uhr
Hallo BOfH,

In der CSV hab ich aber nur das Feld "name", ist der SammAccountName nicht ein anderes Feld im AD oder beinhaltet es den selben Wert?
Lies dir doch mal für einen ADUser alle Felder aus dem AD aus, ich denke dann findest du die Antwort.

01.
get-aduser SAMAccountName Properties *
Der name ist nur eine Eigenschaft des SAMAccountName.

grüße from it-frosch
Bitte warten ..
Mitglied: BastardOperatorfromHell
10.04.2018 um 11:51 Uhr
Ich hab jetzt nochmal die Daten aus dem AD gezogen, den samAccountName in der CSV ergänzt zum Name und das Skript dazu passend nochmal zusammengebaut, aus einem anderen Beitrag hier im Forum. Damit bekomme ich keine Fehlermeldung mehr, allerdings passiert auch nichts im AD. Muss da noch irgendwas mit rein? Gibt es die Möglichkeit, die Aktion in einer Logdatei zu protokollieren?

01.
Import-Module ActiveDirectory
02.
$OU_ADUSER="OU=Benutzer,OU=Burg,DC=XXXX,DC=XXXX,DC=de"
03.
$userCSV="C:\temp\test.csv"
04.
Import-Csv $userCSV -delimiter ';' | %{ 
05.
  $csv_username = $_.SAMAccountName 
06.
  $user = Get-aduser -Filter * -SearchBase $OU_ADUSER | ?{$_.sAMAccountName -eq $csv_username} 
07.
  if ($user){ 
08.
        Set-Aduser -Identity $_.sAMAccountName -Replace @{title = $User.title; department = $User.department; mail = $User.mail; telephoneNumber = $User.telephoneNumber; facsimileTelephoneNumber = $User.facsimileTelephoneNumber; mobile = $User.mobile; company = $User.company; streetAddress = $User.streetAddress; postalCode = $User.postalCode 
09.
  }else{}}}
Bitte warten ..
Mitglied: 135799
10.04.2018, aktualisiert um 11:55 Uhr
Kein wunder das das nicht klappt ...wenn du die Eigenschaften des Objekts durch die des Objekts selbst ersetzt .
Hier findest du alles was du brauchst ...
https://www.administrator.de/forum/new-aduser-optional-parameter-322304. ...
Bitte warten ..
Mitglied: BastardOperatorfromHell
10.04.2018 um 12:49 Uhr
Ok, ich hab mir den Thread durchgelesen, bin aber scheinbar noch zu grün hinter den Ohren, um daraus die Lösung zu kreieren für meinen Fall. Den Schalter -Clear kann ich auf jeden Fall übernehmen, denn was in der CSV leer ist, soll es auch im AD Feld sein letztlich.
Ich denke auch ich hab verstanden das er sich den User aus dem AD nimmt und dann mit dem Daten aus dem AD ersetzt, denn ich ich frag den User ab in die Variable $User uns Replace aus der selber Variable. Jetzt dachte ich es müsste ja gehen wenn ich die Replacevariable ändere in die $userCSV, wo ja meine CSV Daten drin liegen, ändert aber nichts, ich bekomme keine Fehlermeldung und keine Änderung im AD. War die Änderung dann jetzt richtig oder ist es unnütz und der Fehler noch ganz woanders?
Bitte warten ..
Mitglied: 135799
10.04.2018, aktualisiert um 13:02 Uhr
@{title = $User.title;
Guck doch mal genau hin, du nimmst als Daten nicht die Eigenschaften der CSV sonder die des aktuellen Objekts im AD !
Noch kein Kaffee gehabt ?
Bitte warten ..
Mitglied: BastardOperatorfromHell
10.04.2018 um 13:15 Uhr
Ich trink gar keinen Kaffee, sollte es aber eventuell versuchen ;)

Wie schon geschrieben, hab ich genau die Stelle geändert nach deinem Tipp, Ergebnis bleibt aber das Gleiche. Hier nochmal der vollständige Code, hab ich noch etwas vergessen?

01.
Import-Module ActiveDirectory
02.
$OU_ADUSER="OU=Benutzer,OU=Burg,DC=XXXX,DC=XXXX,DC=de"
03.
$userCSV="C:\temp\test.csv"
04.
Import-Csv $userCSV -delimiter ';' | %{ 
05.
  $csv_username = $_.SAMAccountName 
06.
  $user = Get-aduser -Filter * -SearchBase $OU_ADUSER | ?{$_.sAMAccountName -eq $csv_username} 
07.
  if ($user){ 
08.
    # User wurde gefunden, ändere die Eigenschaften 
09.
    Set-Aduser -Identity $_.sAMAccountName -Replace @{title = $Usercsv.title; department = $Usercsv.department; mail = $Usercsv.mail; telephoneNumber = $Usercsv.telephoneNumber; facsimileTelephoneNumber = $Usercsv.facsimileTelephoneNumber; mobile = $Usercsv.mobile; company = $Usercsv.company; streetAddress = $Usercsv.streetAddress; postalCode = $Usercsv.postalCode 
10.
  }else{}}}
11.
Bitte warten ..
Mitglied: 135799
10.04.2018, aktualisiert um 13:30 Uhr
Wieder falsch, ein String hat keine Eigenschaften, die Eigenschaften der Schleife fragst du mit $_.Eigenschaft ab! Genau so steht es ja eigentlich auch in dem Beitrag wo du es kopiert hast!

Du siehst Copy n' Paste bringt dich nicht weiter.

Sorry das wird mir jetzt zu blöd, ich bin raus.

Viel Erfolg, ciao.
Bitte warten ..
Mitglied: BastardOperatorfromHell
10.04.2018 um 13:48 Uhr
Wie bereits 3 Beiträge weiter oben erwähnt hab ich das Skript aus dem Forum hier kopiert und angepasst, du scheinst immer nur die Hälfte der Beiträge zu lesen und deine Tipps bringen mich auch nicht weiter. Ich bin gerne bereit mir durch nachlesen etwas anzueignen, ich würde nur gerne konkret wissen an welcher Stelle. Vielleicht kann mir jemand anderes auf die Sprünge helfen bei dem Thema.
Bitte warten ..
Mitglied: fireblade09
10.04.2018 um 14:56 Uhr
Was schnuffi dir sagen wollte: $Usercsv.title , $Usercsv.department, $Usercsv.mail, etc. geht nicht, es muss $_.title , $_.department , $_.mail , etc. heissen
Bitte warten ..
Mitglied: BastardOperatorfromHell
11.04.2018 um 09:05 Uhr
Hi Fireblade09,

Danke, für die Info. Ich hab das im Skript angepasst, ändert aber nach wie vor nichts im AD. Ich denke ich frage immer noch die Daten zum ändern aus dem AD ab und nicht aus der CSV Datei da er ja sonst bei den leeren Feldern abbrechen müsste.

01.
$user = Get-aduser -Filter * -SearchBase $OU_ADUSER | ?{$_.sAMAccountName -eq $csv_username} 
02.
  if** ($user)**{ 
Eigentlich müsste ich doch an der Stelle nicht den Userstring, sondern die CSV Abfragen, oder? Wenn ich daraus aber $usercsv mache, bekomme ich den Fehler " ;Das Argument ist NULL".
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
PowerShell AD-User Export
gelöst Frage von newit1Batch & Shell7 Kommentare

Hallo, ich möchte User aus dem AD mit verschiedenen Eigenschaften in eine CSV exportieren Folgenden Befehl habe ich ausgetüftelt ...

Batch & Shell

AD-Felder für User mittels Powershell befüllen aus CSV-Datei

gelöst Frage von Alex94GBatch & Shell2 Kommentare

Hallo Admins, folgendes Szenario: Wir haben von der Personalabteilung eine CSV-Datei mit allen Usern bekommen, die ungefähr so aussieht: ...

Batch & Shell

Powershell: Import-Csv update AD attribute

gelöst Frage von lupoloBatch & Shell27 Kommentare

Hallo, ich würde gerene über das gesamte AD Werte wie z.B. Telefonnummer, Firma usw. gliech bzw. nach einer Richtlinie ...

Batch & Shell

AD User per PowerShell auslesen

gelöst Frage von AndreNBatch & Shell2 Kommentare

Hi zusammen, ich möchte gerne die AD User per Skript auslesen lassen und mir die Namen so wie einen ...

Neue Wissensbeiträge
Linux Tools
Dolibarr ERP CRM - Update Prozess
Anleitung von radiogugu vor 14 StundenLinux Tools

Hallo. Dies soll den kurzen Update Prozess der Software schildern. Zugrunde liegt eine Ubuntu Linux VM an der Stelle. ...

Linux Tools
Dolibarr ERP CRM - Überblick der Software
Anleitung von radiogugu vor 17 StundenLinux Tools

Hallo. Nach der Anleitung zur Einrichtung und Installation der Datenbank und des Webserver Dolibarr ERP CRM Installation möchte ich ...

Linux Tools

Dolibarr ERP CRM Installation der Datenbank und des Webserver

Anleitung von radiogugu vor 17 StundenLinux Tools

Hallo zusammen. Ich bin seit kurzem nebenberuflich selbstständig und suchte eine geeignete Software für die Auftragsverwaltung, CRM und ein ...

Sicherheit

Chrome 79 übermittelt eingegebene Kennwörter nach Hause

Information von DerWoWusste vor 1 TagSicherheit15 Kommentare

Ab sofort warnt Chrome standardmäßig Nutzer davor, wenn aus Leaks bekannte Passwörter zum Einsatz kommen. Beim Besuch einer Website, ...

Heiß diskutierte Inhalte
Netzwerke
Netzwerkstruktur für Zuhause 1Anschluss 2 Netze
Frage von chrishaefNetzwerke24 Kommentare

Hallo liebes Forum, Ich hätte da mal eine Frage an die Profis. Bei uns liegt ein DSL Anschluss im ...

Batch & Shell
Eingabeaufforderung macht Pause bei Datensicherung mit Robocopy auf DVD
Frage von anmelderBatch & Shell23 Kommentare

Hallo, ich sichere einige Daten per Robocopy auf DVD-RAM. Wenn ich nicht am Rechner sitze macht der Befehl nach ...

Server-Hardware
Server startet nach Debian Installation nicht mehr
Frage von RobertDServer-Hardware17 Kommentare

Hallo, ich habe heute zum ersten Mal auf meinen Server (selbst zusammengebaut) Linux installiert, ging auch alles ganz gut. ...

Windows 10
Windows 10 Herunterfahren - Funktioniert nach Upgrade von Windows 7 nicht mehr
Frage von krischeuWindows 1016 Kommentare

Hi, ich habe verschiedene PCs mit dem Upgrade Assistenten von Windows 7 Pro 64 Bit auf Windows 10 geupdatet. ...