festus94
Goto Top

Anlegen von Usern mit PowerShell

Ich scheitere beim Versuch mittels PowerShell User im AD anzulegen, welche aus einer CSV-Datei stammen.

Guten Abend,

ich sitze nun schon einige Stunden vor einem PowerShell-Skript und werde aus den Fehlermeldungen einfach nicht schlau genug, um das Skript ans Laufen zu bringen.

Ich möchte mit PowerShell aus einer CSV-Datei User ins AD importieren, jedoch erhalte ich immer folgende Fehlermeldung:

Fehlender Ausdruck nach dem unären Operator "-".

Mein Skript sieht so aus:

Import-Module ActiveDirectory

while(Import-CSV users.csv){
New-ADUser
-SamAccountName $_.SamAccountName
-Surname $_.Surname
-GivenName $_.GivenName
-DisplayName $_.DisplayName
-Description $_.Description
-AccountPassword $_.AccountPassword
-ChangePasswordAtLogon: $true
-Enabled: $true
-PasswordNeverExpires: $true
-Path "LDAP:OU=OU1,OU=OU2,DC=DOMÄNE,DC=local"

Add-ADGroupMember
-Identity "LDAP:
CN=CN1,OU=OU1,OU=OU2,DC=DOMÄNE,DC=local"
-Members $_.SamAccountName
}

Meine CSV-Datei:

GivenName;Surname;SamAccountName;AccountPassword;Description;DisplayName;Path
Max;Mustermann;MMustermann;passwort;Test;"Max Mustermann";"OU:Users,DC=SCHULADMIN,DC=local"
Ellen;Bogen;EllenBogen;password;User;"Ellen Bogen";"OU:Users,DC=SCHULADMIN,DC=local"


Könnt Ihr mir helfen den Fehler zu finden ?


Vielen Dank im Vorraus !!!


tbnwadm

Content-ID: 185059

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

Ausgedruckt am: 24.11.2024 um 18:11 Uhr

lenny4me
lenny4me 16.05.2012 um 07:44:22 Uhr
Goto Top
Hallo,

sind die Zeilenumbrüche für bessere lesbarkeit oder sieht Dein Script wirklich so aus?
NeverEnds
NeverEnds 16.05.2012 um 07:54:14 Uhr
Goto Top
Moin,

schau dir das mal an.

http://gallery.technet.microsoft.com/scriptcenter/New-User-Creation-too ...

Ich habe zwar dieses Script noch nicht ausprobiert, aber ich nutze 2 andere von Rich Prescott. Der ist gut...


Ich sag immer warum das Rad neuerfinden.... face-wink


Gruß
Never!
mak-xxl
mak-xxl 16.05.2012 um 09:19:30 Uhr
Goto Top
Moin tbnwadm,

wenn Dein Script genauso aussieht, dann erscheint der Fehler bei der Option -ChangePasswordAtLogon und den folgenden - Doppelpunkte sind hier nicht vorgesehen.

Freundliche Grüße von der Insel - Mario
Festus94
Festus94 16.05.2012 um 13:02:54 Uhr
Goto Top
Hallo,

ja, mein Skript sieht exakt so aus.

@never: Danke für den Tipp, aber das sieht mir viel zu komoliziert aus. Ich würde mir das gerne so einfach wie möglich halten und nach Möglichkeit selbst zur Lösung kommen, um dabei auch was zu lernen. ;)

@mario: Danke, aber meine PS sagt, der Fehler liegt noch davor. Ich habe de Doppelpunkte entfernt.

Ich habe jetzt zur Sicherheit mal alle Leerzeichen aus dem Skript entfernt. Meine PS gibt mir folgenden Fehler:

Fehlender Ausdruck nach dem unären Operator "-".
Bei C:\Users\<Mein Benutzername>\Desktop\add.ps1:4 Zeichen:7

back-to-top- <<<< SamAccountName $_.SamAccountName

+ CategoryInfo : ParserError: (-:String) , ParseException
+ FullyQualifiedErrorId : MissingExpressionAfterOperator

Allerding sieht das für mich richtig aus. Habt Ihr eine Idee ?

Danke !!!


Gruß
tbnwadm


EDIT: Die eine Zeile steht da natürlich nicht so fett und groß, da beißt sich wohl was mit der Administrator.de-Syntax...
Goalie
Goalie 16.05.2012 um 14:06:04 Uhr
Goto Top
Hallo tbnwadm,

ich denke, dass die Werte nicht korrekt aus der CSV-Datei ausgelesen werden.

Ungetestet könnte es etwa so funktionieren (der "New-ADUser"-Teil fehlt noch):

Import-Csv .\users.csv -Delimiter ';' | ForEach-Object { New-ADUser ... }  

Gruß

Goalie
Festus94
Festus94 16.05.2012 um 14:18:46 Uhr
Goto Top
Hi Goalie,

danke für die Hilfe.
Ich habe es gerade jedoch soweit, dass ich nun die Fehlermeldung erhalte, dass das Kennwort nicht den Anforderungen der Domäne entspricht. Die einzige Vorraussetzung ist jedoch eine Länge von fünf Zeichen und das erfülle ich ja. Ich kann mein Passwort aber ebenfalls nicht ändern, da dort ebenfalls eine solche Fehlermeldung kommt. Per CMD geht's (net user ...).

Woran kann das liegen ? Es sind nirgendwo Kenwort-Einschränkungen bis auf die Mindestlänge gesetzt. Der Rest ist abgestellt.

Danke !


tbnwadm
Festus94
Festus94 16.05.2012 um 17:49:01 Uhr
Goto Top
Okay, ich bin nun schon deutlich weiter:

New-ADUser -SamAccountName $_.SamAccountName -Name "$_.DisplayName" -Surname $_.Surname -GivenName $_.GivenName -DisplayName $_.DisplayName -Description $_.Description -AccountPassword (ConvertTo-SecureString "$_.AccountPassword" -AsPlainText –Force) -ChangePasswordAtLogon $true -Enabled $true -Path "OU=OU1,OU=OU2,DC=DOMÄNE,DC=local" -ProfilePath "\\SERVER\Profiles$\$_.Name"

Meine Fehlermeldung heißt so:

New-ADUser : Ein Wert für das Attribut befindet sich nicht im zulässigen Bereich

Habt Ihr eine Idee, was das noch sein kann ? Das Problem soll bei Zeichen 13 liegen, aber das macht keinen Sinn.


Grüße
tbnwadm
mak-xxl
mak-xxl 16.05.2012 um 18:03:54 Uhr
Goto Top
Moin tbnwadm,

Zitat von @Festus94:
... Das Problem soll bei Zeichen 13 liegen, aber das macht keinen Sinn.

Doch, das ist schon eine sinnvoller Hinweis - bei Zeichen 13 beginnt der Parameter 'SamAccountName' - Du solltest den Inhalt von '$_.SamAccountName' mal ausgeben lassen und kontrollieren. Und bevor das nächste, ähnliche Problem auftaucht - am besten alle Variablen lokal ausgeben und kontrollieren (Leerzeichen?).

Einen schönen Feiertag wünscht mit freundlichen Grüßen von der Insel - Mario
Festus94
Festus94 16.05.2012 um 18:10:35 Uhr
Goto Top
Hi Mario,

die Ausgabe bringt mir "MMustermann" (ohne Anführungszeichen). Das ist auch richtig so. Ich habe auch $_.DisplayName ausprobiert, wo korrekt "Max Mustermann" rauskommt, dazu $_.Surname und $_.GivenName. Alles problemlos. Nur bei $_.DisplayName ist also ein Leerzeichen vorhanden.

Meine CSV:

GivenName;Surname;SamAccountName;AccountPassword;Description;DisplayName
Max;Mustermann;MMustermann;passwort;Test;"Max Mustermann"
Ellen;Bogen;EllenBogen;Pa$$w0rd;User;"Ellen Bogen"

Sehe ich den Wald vor lauter Bäumen nicht ?

Dir auch einen schönen Feiertag !

Viele Grüße
tbnwadm
mak-xxl
mak-xxl 16.05.2012 um 18:30:51 Uhr
Goto Top
Moin tbnwadm,

ich sehe auch nur Wald und keinen Fehler - überprüfe doch nochmals akribisch die einzelnen Attribute für die Parameter, so wie es lt. obigem Link sein soll. Und beachte doppelte Literale, wenn Du in der csv-Datei schon welche setzt - besser ausschließlich die Variable in solche ...

Viel Erfolg und freundliche Grüße von der Insel - Mario
Festus94
Festus94 16.05.2012 um 22:42:44 Uhr
Goto Top
Ich habe es jetzt nochmals geprüft und bin bei folgendem Ergebnis:

Import-Module ActiveDirectory

Import-CSV users.csv -Delimiter ";" | ForEach-Object{
New-ADUser -SamAccountName "$_.SamAccountName" -UserPrincipalName "$_.SamAccountName@SCHULADMIN.local" -Name "$_.DisplayName" -Surname "$_.Surname" -GivenName "$_.GivenName" -DisplayName "$_.DisplayName" -Description "$_.Description" -AccountPassword (ConvertTo-SecureString "$_.AccountPassword" -AsPlainText –Force) -ChangePasswordAtLogon $true -Enabled $true -Path "OU=Schüler,OU=Schule,DC=SCHULADMIN,DC=local" -ProfilePath "\\SRVDC\Profiles$\$_.SamAccountName"

Add-ADGroupMember -Identity $_.Typ -Members $_.SamAccountName
}

Meine CSV sieht so aus:

GivenName;Surname;DisplayName;SamAccountName;AccountPassword;Description
Maximilian;Mustermann;Maximilian Mustermann;MMustermann;passwort123;Schüler

Fehlermeldung:

New-ADUser : Der angegebene Name hat ein falsches Format für einen Kontennamen

Testweise habe ich schon -SamAccountName und -UserPrincipalName weggelassen, aber das hat nicht geholfen. face-sad


Viele Grüße
tbnwadm
Festus94
Festus94 01.06.2012 um 23:00:02 Uhr
Goto Top
Ich habe das Skript nun soweit, dass es wunderbar funktioniert.
Hier meine funktionierende Lösung:

Import-Module ActiveDirectory

Import-CSV users.csv -Delimiter ";" | ForEach-Object{
$sUPN = -join ($_.UserPrincipalName, "@", "<DOMÄNEN-NAME>")
$sPath = -join ("OU=", $_.Typ, ",OU=<OU>,DC=<DC-TEIL 1>,DC=<DC-TEIL 2>")
$sProfilePath = -join ("<FREIGABE-PFAD>", $_.SamAccountName)

New-ADUser -Name $_.DisplayName -SamAccountName $_.SamAccountName -UserPrincipalName $sUPN -Surname $_.Surname -GivenName $_.GivenName -DisplayName $_.DisplayName -Description $_.Description -AccountPassword (ConvertTo-SecureString $_.AccountPassword -AsPlainText –Force) -ChangePasswordAtLogon $true -Enabled $true -Path $sPath -ProfilePath $sProfilePath

$sIdentity = -join ("CN=", $_.Typ, ",OU=<OU>,DC=<DC-TEIL 1>,DC=<DC-TEIL 2>")

Add-ADGroupMember -Identity $sIdentity -Members $_.SamAccountName
}


Ich danke Euch für Eure Hilfe !


Viele Grüße
tbnwadm