AD User Import CSV
Hi,
Ich wollte mir mal den Spaß machen und mir mein eigenes Script zum Importieren von Usern aus einer CSV fürs Active Directory schreiben. Ich erhalte jedoch immer folgenden Fehler. Ich weiß aber nicht, wo er liegt und wie er zu beheben ist. Könnt ihr mir weiterhelfen?
New-ADUser : The parameter is incorrect
At C:\Users\USERNAME\Desktop\New-ADUserFromCSV.ps1:32 char:5
+ FullyQualifiedErrorId : ActiveDirectoryServer:87,Microsoft.ActiveDirectory.Management.Commands.NewADUser
Ich wollte mir mal den Spaß machen und mir mein eigenes Script zum Importieren von Usern aus einer CSV fürs Active Directory schreiben. Ich erhalte jedoch immer folgenden Fehler. Ich weiß aber nicht, wo er liegt und wie er zu beheben ist. Könnt ihr mir weiterhelfen?
New-ADUser : The parameter is incorrect
At C:\Users\USERNAME\Desktop\New-ADUserFromCSV.ps1:32 char:5
New-ADUser -Name 'Name1' `
~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (CN=Name1,CN=Use...Domain,DC=de:String) [New-ADUser], ADInvalidOperationException+ FullyQualifiedErrorId : ActiveDirectoryServer:87,Microsoft.ActiveDirectory.Management.Commands.NewADUser
# CSV Datei zum Importieren
$Desktop = [Environment]::GetFolderPath([System.Environment+SpecialFolder]::Desktop).ToString()
$Datei = "$Desktop \NewUser.csv"
$ADDomain = 'domain.com'
$EMailDomain = 'emaildomain.de'
# Importieren der CSV Informationen
$CSVImport = Import-Csv $Datei -Delimiter ";" -Encoding Default
# Für jeden Datensatz im CSV
foreach ($Benutzer in $CSVImport)
{
New-ADUser -Name 'Name1' `
-SamAccountName "$CSVImport.GivenName + '.' + $CSVImport.Surname" `
-GivenName "$CSVImport.GivenName" `
-Surname "$CSVImport.Surname" `
-DisplayName "$CSVImport.GivenName $CSVImport.Surname" `
-UserPrincipalName "$CSVImport.SamAccountName + $ADDomain" `
-AccountPassword ("$CSVImport.AccountPassword" | ConvertTo-SecureString -AsPlainText -Force) `
-EmailAddress "$CSVImport.GivenName + '.' + $CSVImport.Surname + $EMailDomain" `
-MobilePhone "$CSVImport.MobilePhone" `
-Title "$CSVImport.Title" `
-PostalCode "$CSVImport.PostalCode" `
-City "$CSVImport.City" `
-State "$CSVImport.State" `
-StreetAddress "$CSVImport.StreetAddress" `
-Department "$CSVImport.Department" `
-Division "$CSVImport.Division" `
-Description "$CSVImport.Description" `
-AllowReversiblePasswordEncryption $false `
-Enabled $true `
-OtherAttributes @{'telephoneNumber'="$CSVImport.telephoneNumber";'co'="$CSVImport.co";'c'="$CSVImport.c";'countryCode'="$CSVImport.countryCode";'msDS-cloudExtensionAttribute1'="$CSVImport.extensionAttribute1";'msDS-cloudExtensionAttribute2'="$CSVImport.extensionAttribute2";'msDS-cloudExtensionAttribute3'="$CSVImport.extensionAttribute3";'msDS-cloudExtensionAttribute4'="$CSVImport.extensionAttribute4";'msDS-cloudExtensionAttribute5'="$CSVImport.extensionAttribute5";'msDS-cloudExtensionAttribute6'="$CSVImport.extensionAttribute6";'msDS-cloudExtensionAttribute7'="$CSVImport.extensionAttribute7";'msDS-cloudExtensionAttribute8'="$CSVImport.extensionAttribute8";'msDS-cloudExtensionAttribute9'="$CSVImport.extensionAttribute9";'msDS-cloudExtensionAttribute10'="$CSVImport.extensionAttribute10";'msDS-cloudExtensionAttribute11'="$CSVImport.extensionAttribute11";'msDS-cloudExtensionAttribute12'="$CSVImport.extensionAttribute12";'msDS-cloudExtensionAttribute13'="$CSVImport.extensionAttribute13";'msDS-cloudExtensionAttribute14'="$CSVImport.extensionAttribute14";'msDS-cloudExtensionAttribute15'="$CSVImport.extensionAttribute15";}
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 665047
Url: https://administrator.de/contentid/665047
Ausgedruckt am: 21.11.2024 um 15:11 Uhr
16 Kommentare
Neuester Kommentar
Moin.
Die Gründe:
Ergo: Sämtliche Parameter die sowas hier verwenden
Deswegen meckert die Shell auch weil dann die Parameter alle leer bzw. ungültige Werte haben !
Also nochmal ganz zurück ans Reißbrett, am besten vorher einen Kaffee schlürfen .
Gruß SK
Ich weiß aber nicht, wo er liegt und wie er zu beheben ist.
Sorry wenn ich dich jetzt enttäuschen muss, aber so ziemlich alle Parameter und Variablen sind fehlerhaft .Die Gründe:
- Der größte Fehler : Du verwendest innerhalb der Foreach Schleife die falsche Variable. $CSVImport statt richtigerweise $Benutzer !!
- Du fragst eine Property von einem Object innerhalb von Anführungszeichen ab, das geht aber nicht ohne Subexpression weil der Punkt schon kein Zeichen einer gültigen Variable ist. Außerdem ist sind die Anführungszeichen hier auch überflüssig.
Ergo: Sämtliche Parameter die sowas hier verwenden
"$CSVImport.GivenName"
sind fehlerhaft. Entweder du lässt die Anführungszeichen ganz weg weil eh überflüssig oder schreibst sie so wenn du unbedingt an den Anführungszeichen hängst so"$($Benutzer.GivenName)"
Deswegen meckert die Shell auch weil dann die Parameter alle leer bzw. ungültige Werte haben !
- Dann fehlen @ Zeichen im UPN usw.
- Des weiteren überprüfst du überhaupt nicht ob es einen User mit dem jeweiligen SamAccountName bereits gibt.
- Des weiteren gibst du jedem Nutzer den selben Namen = 'Name1' => ebenso Blödsinn.
Also nochmal ganz zurück ans Reißbrett, am besten vorher einen Kaffee schlürfen .
Gruß SK
Zitat von @IT-Pro:
Ich hatte mir die CSV mal importiert um die Autovervollständigung nutzen zu können. Unter der Variable $Benutzer fand er keines der Attribute, unter dem $CSVImport dann aber schon. Deshalb habe ich dann doch die $CSVImport genutzt.
Dann hast du die Datei falsch importiert (z.B. falsches Trennzeichen oder keine Header). Wenn nur ein User im Object ist dann geht das ansonsten => NEIN!Ich hatte mir die CSV mal importiert um die Autovervollständigung nutzen zu können. Unter der Variable $Benutzer fand er keines der Attribute, unter dem $CSVImport dann aber schon. Deshalb habe ich dann doch die $CSVImport genutzt.
Dann weiter:
- Du fragst eine Property von einem Object innerhalb von Anführungszeichen ab, das geht aber nicht ohne Subexpression weil der Punkt schon kein Zeichen einer gültigen Variable ist. Außerdem ist sind die Anführungszeichen hier auch überflüssig.
Ohne Anführungszeichen hatte der irgendein anderes Problem, dass ich (scheinbar) dadurch lösen konnte.
Nehme aber es aber gern mit auf, wenn du was hast, dass ich copy&paste einfügen kann.
$user = Get-ADUser -Filter {SamAccountName -eq ($Benutzer.GivenName + '.' + $Benutzer.Surname)}
if (!$user){
New-ADUser ................
}else{
write-warning "Benutzer mit dem Namen '$($benutzer.Name)' existiert schon."
}
* Des weiteren gibst du jedem Nutzer den selben Namen = 'Name1' => ebenso Blödsinn.
Ja. Ist dem ganzen geschuldet, dass ich hier nur mal was testen will und es nicht wichtig ist, dass jeder NAME1 heißt.Das Attribut sorgt aber für was? Das ist der Anzeigename im ADUC.mmc?
Das auch aber vor allem wird aus ihm der sogenannte DistinguishedName des Users gebildet und ist der CN = CommonName, ergo dieser muss eindeutig sein weil der DN eindeutig in einer Domäne ist.CN=Max Muster,OU=Marketing,DC=domain,DC=tld
Gruß SK
Moin,
Damit Du verstehst, was @schmitzkatze meint, hier ein Beispiel. Ich habe hier ein einfaches csv mit zwei Spalten Vorname und Name.
Das lese ich in eine Variable $personen ein.
Nun gebe ich diese Variable aus.
Die Variable enthält also die gesamte Tabelle inkl. Überschriften. Was ist das für ein Datentyp?
Es ist ein System.Array von Objekten. Und nun schauen wir mal, wie sich solche Objekte verhalten.
Aha, wenn ich also eine Eigenschaft der im Array enhaltenen Objekte an den Namen des Arrays mit Punkt getrennt anhänge, so erhalte ich die Werte dieser Eigenschaft eines jeden einzelnen Objekts.
Jetzt machen wir das Experiment mal mit Anführungszeichen.
Was ist jetzt los?
$personen ist jetzt plötzlich leer. Wie das? Das System.Array ist natürlich nicht leer, aber es wird nichts mehr zurückgegeben. Mit den Anführungszeichen zwingst Du die PS dazu, das Ergebnis als String auszugeben. Ein System.Array enhält aber nichts, was ein String wäre. Deshalb ist das Ergebnis leer. Kann man das umgehen? Nein. Auf dieser Ebenen nicht. Selbst eine Subexpression hilft da nicht weiter.
Ein System.Array enthält keinen String. Es kommt nichts zurück. Bei den Eigenschaften geht das sehr wohl.
Sieht bloß doof aus ohne Zeilenumbrüche. Ganz ohne Anführungszeichen war es schöner. Aber die Eigenschaft Name der Objekte enthält Strings und so kann man das auch als String ausgeben. Warum geht das hier?
Die Anführungszeichen haben noch einen anderen Effekt. Sie entheben den Punkt seiner besonderen Bedeutung. Ohne die Tüttelchen ist der Punkt das Trennzeichen zwischen einem Objekt und seinen Eigenschaften und ihren Untereigenschaften. Mit den Tüttelchen ist der Punkt einfach ein Punkt. Deshalb wird ohne die Subexpression so aufgelöst: Da steht ein $ also kommt ein Variablenname. p e r s o n . Halt! Ein Punkt ist im Variablennamen verboten. Also ist der Name zuende. Da ist kein String, also nix ausgeben. . n a m e ausgeben als .name. Fertig.
Mit Subexpression sieht das so aus:
Wieder wird mit dem $ eingeleitet, dass jetzt eine Variable kommt. Nun kommt aber die Klammer. Damit wird die PS angewiesen eine annonyme Varible anzulegen, die das Ergebnis der Subexpression enthält. Es wird also $personen.name aufgelöst. Das gibt, wie wir gesehen haben, die Liste der Namen aus. Das steht dann in der annonymen Variablen, die dann wieder auf der Konsole ausgegeben wird.
Noch lustiger wird es, wenn wir die Objekte selbst am Wickel haben.
Das war zu erwarten. Es werden die Namen ausgegeben. Wie Du siehst ganz ohne Tüttelchen. Einfach so $object.property. Und mit Tüttelchen?
Was wir hier sehen, ist die Art, wie die PS Objekte und ihre Eigenschaften speichert: Als hash table. Das ist insgesamt ein String, den man als solchen auch ausgeben kann. Dann kommt der Punkt, der ja nur ein Punkt ist. Am Ende steht wieder name. Hier kann man das mit der Subexpression wieder umgehen.
Das wäre aber ziemlich albern. Das macht nur so einen Sinn.
Und warum heißt das Subexpression? Weil man nicht nur eine Eigenschaft eines Objekts da reinschreiben kann, sondern ganze Subroutinen bzw. Funktionen, die diese enthalten. Ein kleines Beispiel:
Oder was für den Extremcoder:
Wenn Du das durchdringen willst, solltest Du Dich mit zwei Dingen beschäftigen:
1. Objektorientierung
Das Mantra ist ähnlich wie bei Linux nicht everything is a file, sondern everything is an object. Die PS ist wirklich streng objektorientiert. Deshalb ist es unbedingt notwendig, sich klar zu machen, was das heißt.
2. Datentypen
Hierbei muss man sich dann wieder an 1. erinnern und begreifen, dass es die klassischen Datentypen (String, Date, Integer, Decimal ...) nur auf der Ebenen der Eigenschaften gibt und nie auf der Ebenen des Objekts selbst. Selbst eine einfache Stringvariable ist ein Objekt mit einer annonymen Eigenschaft, die den String enthält. Wäre dem nicht so, könnte ich keine Methoden auf diese Variable anwenden, denn Methoden kann ich nur auf Objekte anwenden. Aber das geht:
Und außerdem hat so eine Stringvariable noch eine weitere Eigenschaft: die Länge des Strings.
Und da sieht man auch, dass die Eigenschaft des Inhalts des Strings annonym ist. Sonst hätte sie select * mit ausgegeben.
So, nun bin ich aber ins Schwätzen gekommen.
Liebe Grüße
Erik
P.S.: Nachdem ich jetzt Korrektur gelesen habe, frage ich mich und jetzt auch Euch, ob ich das nicht kopieren und in den Tutorials veröffentlichen sollte.
Zitat von @IT-Pro:
Ohne Anführungszeichen hatte der irgendein anderes Problem, dass ich (scheinbar) dadurch lösen konnte. Daher habe ich dann die "" angefügt. Wenn ich die weglassen kann, ist mir das lieber.
Dann weiter:
- Du fragst eine Property von einem Object innerhalb von Anführungszeichen ab, das geht aber nicht ohne Subexpression weil der Punkt schon kein Zeichen einer gültigen Variable ist. Außerdem ist sind die Anführungszeichen hier auch überflüssig.
Ohne Anführungszeichen hatte der irgendein anderes Problem, dass ich (scheinbar) dadurch lösen konnte. Daher habe ich dann die "" angefügt. Wenn ich die weglassen kann, ist mir das lieber.
Damit Du verstehst, was @schmitzkatze meint, hier ein Beispiel. Ich habe hier ein einfaches csv mit zwei Spalten Vorname und Name.
PS C:\data\test\csv> cat .\personen.csv
Vorname;Name
Hans;Meier
Frieda;Schulz
Carola;Müller
Das lese ich in eine Variable $personen ein.
PS C:\data\test\csv> $personen = Import-Csv .\personen.csv -Delimiter ";" -Encoding utf8
Nun gebe ich diese Variable aus.
PS C:\data\test\csv> $personen
Vorname Name
------- ----
Hans Meier
Frieda Schulz
Carola Müller
Die Variable enthält also die gesamte Tabelle inkl. Überschriften. Was ist das für ein Datentyp?
PS C:\data\test\csv> $personen.gettype()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object System.Array
Es ist ein System.Array von Objekten. Und nun schauen wir mal, wie sich solche Objekte verhalten.
PS C:\data\test\csv> $personen.name
Meier
Schulz
Müller
Aha, wenn ich also eine Eigenschaft der im Array enhaltenen Objekte an den Namen des Arrays mit Punkt getrennt anhänge, so erhalte ich die Werte dieser Eigenschaft eines jeden einzelnen Objekts.
Jetzt machen wir das Experiment mal mit Anführungszeichen.
PS C:\data\test\csv> "$personen.name"
.name
Was ist jetzt los?
PS C:\data\test\csv> "$personen"
PS C:\data\test\csv>
$personen ist jetzt plötzlich leer. Wie das? Das System.Array ist natürlich nicht leer, aber es wird nichts mehr zurückgegeben. Mit den Anführungszeichen zwingst Du die PS dazu, das Ergebnis als String auszugeben. Ein System.Array enhält aber nichts, was ein String wäre. Deshalb ist das Ergebnis leer. Kann man das umgehen? Nein. Auf dieser Ebenen nicht. Selbst eine Subexpression hilft da nicht weiter.
PS C:\data\test\csv> "$($personen)"
PS C:\data\test\csv>
Ein System.Array enthält keinen String. Es kommt nichts zurück. Bei den Eigenschaften geht das sehr wohl.
PS C:\data\test\csv> "$($personen.name)"
Meier Schulz Müller
Sieht bloß doof aus ohne Zeilenumbrüche. Ganz ohne Anführungszeichen war es schöner. Aber die Eigenschaft Name der Objekte enthält Strings und so kann man das auch als String ausgeben. Warum geht das hier?
Die Anführungszeichen haben noch einen anderen Effekt. Sie entheben den Punkt seiner besonderen Bedeutung. Ohne die Tüttelchen ist der Punkt das Trennzeichen zwischen einem Objekt und seinen Eigenschaften und ihren Untereigenschaften. Mit den Tüttelchen ist der Punkt einfach ein Punkt. Deshalb wird ohne die Subexpression so aufgelöst: Da steht ein $ also kommt ein Variablenname. p e r s o n . Halt! Ein Punkt ist im Variablennamen verboten. Also ist der Name zuende. Da ist kein String, also nix ausgeben. . n a m e ausgeben als .name. Fertig.
Mit Subexpression sieht das so aus:
Wieder wird mit dem $ eingeleitet, dass jetzt eine Variable kommt. Nun kommt aber die Klammer. Damit wird die PS angewiesen eine annonyme Varible anzulegen, die das Ergebnis der Subexpression enthält. Es wird also $personen.name aufgelöst. Das gibt, wie wir gesehen haben, die Liste der Namen aus. Das steht dann in der annonymen Variablen, die dann wieder auf der Konsole ausgegeben wird.
Noch lustiger wird es, wenn wir die Objekte selbst am Wickel haben.
PS C:\data\test\csv> foreach($person in $personen) {$person.name}
Meier
Schulz
Müller
Das war zu erwarten. Es werden die Namen ausgegeben. Wie Du siehst ganz ohne Tüttelchen. Einfach so $object.property. Und mit Tüttelchen?
PS C:\data\test\csv> foreach($person in $personen) {"$person.name"}
@{Vorname=Hans; Name=Meier}.name
@{Vorname=Frieda; Name=Schulz}.name
@{Vorname=Carola; Name=Müller}.name
Was wir hier sehen, ist die Art, wie die PS Objekte und ihre Eigenschaften speichert: Als hash table. Das ist insgesamt ein String, den man als solchen auch ausgeben kann. Dann kommt der Punkt, der ja nur ein Punkt ist. Am Ende steht wieder name. Hier kann man das mit der Subexpression wieder umgehen.
PS C:\data\test\csv> foreach($person in $personen) {"$($person.name)"}
Meier
Schulz
Müller
Das wäre aber ziemlich albern. Das macht nur so einen Sinn.
PS C:\data\test\csv> foreach($person in $personen) {"Hallo $($person.vorname)! Wie geht's?"}
Hallo Hans! Wie geht's?
Hallo Frieda! Wie geht's?
Hallo Carola! Wie geht's?
Und warum heißt das Subexpression? Weil man nicht nur eine Eigenschaft eines Objekts da reinschreiben kann, sondern ganze Subroutinen bzw. Funktionen, die diese enthalten. Ein kleines Beispiel:
PS C:\data\test\csv> "Es ist jetzt genau $(get-date -format HH:mm:ss)."
Es ist jetzt genau 22:05:53.
Oder was für den Extremcoder:
PS C:\data\test\csv> foreach($person in $personen) {"Hallo $(if($person.vorname -eq "Hans"){"Herr "} else{"Frau "})$($person.name)! Wie geht's?"}
Hallo Herr Meier! Wie geht's?
Hallo Frau Schulz! Wie geht's?
Hallo Frau Müller! Wie geht's?
Wenn Du das durchdringen willst, solltest Du Dich mit zwei Dingen beschäftigen:
1. Objektorientierung
Das Mantra ist ähnlich wie bei Linux nicht everything is a file, sondern everything is an object. Die PS ist wirklich streng objektorientiert. Deshalb ist es unbedingt notwendig, sich klar zu machen, was das heißt.
2. Datentypen
Hierbei muss man sich dann wieder an 1. erinnern und begreifen, dass es die klassischen Datentypen (String, Date, Integer, Decimal ...) nur auf der Ebenen der Eigenschaften gibt und nie auf der Ebenen des Objekts selbst. Selbst eine einfache Stringvariable ist ein Objekt mit einer annonymen Eigenschaft, die den String enthält. Wäre dem nicht so, könnte ich keine Methoden auf diese Variable anwenden, denn Methoden kann ich nur auf Objekte anwenden. Aber das geht:
PS C:\data\test\csv> $string="Das ist ja doof."
PS C:\data\test\csv> $string.replace("doof","toll")
Das ist ja toll.
Und außerdem hat so eine Stringvariable noch eine weitere Eigenschaft: die Länge des Strings.
PS C:\data\test\csv> $string | select *
Length
------
16
PS C:\data\test\csv> $string.Length
16
Und da sieht man auch, dass die Eigenschaft des Inhalts des Strings annonym ist. Sonst hätte sie select * mit ausgegeben.
So, nun bin ich aber ins Schwätzen gekommen.
Liebe Grüße
Erik
P.S.: Nachdem ich jetzt Korrektur gelesen habe, frage ich mich und jetzt auch Euch, ob ich das nicht kopieren und in den Tutorials veröffentlichen sollte.
Zitat von @IT-Pro:
Warum gibt es bei MS keine Dokumentation dafür, für was welches Attribut benutzt wird?
Die gibt es schon man muss nur mit den richtigen Begriffen suchen (Active Directory Schema Attributes)Warum gibt es bei MS keine Dokumentation dafür, für was welches Attribut benutzt wird?
https://docs.microsoft.com/en-us/windows/win32/adschema/attributes-all
http://www.selfadsi.de/user-attributes.htm
Ich hatte insbesondere bei den extensionAttribute1 bis 15 gesucht aber nichts gefunden.
Das sind Attribute die der User frei für sich belegen kann.
Klar geht das und sogar sehr gut! Wenn man natürlich die Punkte mit ins Skript übernimmt ist man selbst schuld so dämlich kann man ja dann doch nicht sein 🙃.
BTW. Musste ich hier und da doch wieder Anführungszeichen setzen. Bspw. beim Diesplayname oder sAMaccountname.
Wenn man mit weiteren Strings Kombiniert sicher, aber nicht zwingend! Es gibt mehrere Methoden das zu realisieren, mit Subexpression innerhalb von Anführungszeichen wie du oder als Kombination mittels +
Bitte dann noch nen Haken an den Post damit wir das hier abhaken können,Danke.
Die PowerShell prüft aber selbst auf existenz, von daher reicht die Fehlerroutine der powerShell.
Ganz schlechter Stil und fällt dir bestimmt irgendwann wieder auf die Füße.BTW. Musste ich hier und da doch wieder Anführungszeichen setzen. Bspw. beim Diesplayname oder sAMaccountname.
-SamAccountName "$($Benutzer.GivenName ).$($Benutzer.Surname)"
-SamAccountname ($Benutzer.GivenName + '.' + $Benutzer.Surname)
Zitat von @IT-Pro:
Nach dem hattest du ja auch nicht gefragt.^^Zitat von [user:
Das "extensionAttribute" oder msDS-cloudExtensionAttribute1 ist bei keinem deiner Links näher beschrieben.Die ms* Attribute sind
MS Anwendungs--/Applikationsspezifische Attribute und auf den jeweiligen Produktseiten, z.B. vom Exchange erläutert.
In einem AD kannst du auch selbst das Schema um benutzerdefinierte Attribute ergänzen, du wirst also nicht immer eine Erläuterung finden, aber in dem Fall ist es ein Attribut das im Zusammenhang mit der Azure Cloud genutzt wird
https://www.google.de/amp/s/ronnydejong.com/2015/09/14/use-custom-attrib ...
Man findet alles man muss sich nur etwas anstrengen und die richtigen Suchbegriffe benutzen. 😉
Moin,
da du mich per PN angeschrieben hast, ob ich hier unterstützen kann:
Testen kann ich dein Script nicht (habe keine Testumgebung zur Hand), aber wenn ich mir die Doku zum New-ADUser anschaue, fällt mir folgendes auf:
Zeile 34: da scheint ein Wert zu fehlen. Versuche mal
Ansonsten auch mal prüfen, was passiert, wenn ein Parameter nicht gefüllt wird. Also z.B. deine Spalte "Beschreibung" ist in der CSV leer. Wie verhält sich dann das Powershell-Script?
Gruß
em-pie
da du mich per PN angeschrieben hast, ob ich hier unterstützen kann:
Testen kann ich dein Script nicht (habe keine Testumgebung zur Hand), aber wenn ich mir die Doku zum New-ADUser anschaue, fällt mir folgendes auf:
Zeile 34: da scheint ein Wert zu fehlen. Versuche mal
-ChangePasswordAtLogon $True
Ansonsten auch mal prüfen, was passiert, wenn ein Parameter nicht gefüllt wird. Also z.B. deine Spalte "Beschreibung" ist in der CSV leer. Wie verhält sich dann das Powershell-Script?
Gruß
em-pie
Dann arbeite mal ein try... catch.. mit ein und schaue, was er genau ausspuckt.
https://www.reddit.com/r/PowerShell/comments/41sq2i/output_logs_for_batc ...
Alternativ schaue einfach mal, dass du den Befehl New-ADUser nicht ausführst, sondern mal als Aoutput irgendwo hinschreibst. Dann solltest du ggf. schon sehen, wo der Fehler steckt.
Ansonsten gehe ich davon aus, dass die Variablen in den Zeilen 5, 6, 7 gefüllt sind und es den OU-Path so auch im AD gibt!
Edit:
Ferner mal als ersten Parameter -WhatIf einbinden und alle anderen Zeilenweise auskommentieren.
Danach dann immer ausführen und Zeile für Zeile die Parameter mit rein nehmen und schauen, wie sich das dann verhält.
Kannst du ja auch alternativ in 5er Blöcken machen...
Edit2:
Dein AD hat aber auch einen Teil in der Azure-Cloud, oder?
Ich frage bzgl. der msDS-cloudExtensionAttribute1, die es erst im AD-Schema gibt, wenn ein Azure-Sync existiert.
https://www.reddit.com/r/PowerShell/comments/41sq2i/output_logs_for_batc ...
Alternativ schaue einfach mal, dass du den Befehl New-ADUser nicht ausführst, sondern mal als Aoutput irgendwo hinschreibst. Dann solltest du ggf. schon sehen, wo der Fehler steckt.
Ansonsten gehe ich davon aus, dass die Variablen in den Zeilen 5, 6, 7 gefüllt sind und es den OU-Path so auch im AD gibt!
Edit:
Ferner mal als ersten Parameter -WhatIf einbinden und alle anderen Zeilenweise auskommentieren.
Danach dann immer ausführen und Zeile für Zeile die Parameter mit rein nehmen und schauen, wie sich das dann verhält.
Kannst du ja auch alternativ in 5er Blöcken machen...
Edit2:
Dein AD hat aber auch einen Teil in der Azure-Cloud, oder?
Ich frage bzgl. der msDS-cloudExtensionAttribute1, die es erst im AD-Schema gibt, wenn ein Azure-Sync existiert.