Powershell Script Bulk Create Fehlermeldungen
Guten Morgen liebe Leute,
Ich mache gerade mein Abschlussprojekt zum IT-Systemkaufmann (Umschulung) und habe da Probleme mit meinem Powershellscript.
Mein Powershell Script soll Benutzer aus einer CSV in der Active Directory anlegen. Dazu habe ich ein Script zusammengetragen und angepasst.
Jedoch komme ich momentan einfach nicht weiter. (Der Betrieb kann nicht helfen)
Das Script soll die Benutzer anlegen, sowie ein Zufallspasswort generieren und die Benutzer in die entsprechenden Gruppen einteilen und anschließend sollen die angelegten Dateien Exportiert werden.
Hoffe ihr könnt mir helfen. Vielen Dank schon einmal im Vorfeld!
Habe eine VM aufgesetzt und Active Directory fehlerfrei hinzugefügt, das ganze läuft auf Windows Server 2019
Die CSV Datei ist wie folgt aufgebaut:
Benutzer;Name;Vorname;Passwort;AdministratorIntern;Lager;Verkauf;Rechnungswesen;Telefon;Email
;Walter;Fritz;;;ja;;;123456;xy@gmai.com
(Der Benutzer(AnmeldeName) soll dann mit generiert werden)
(CSV Daten sind nur Beispielhaft)
Script:
Import-Module ActiveDirectory
$ExportPfad = "C:\Export_AD_Benutzer\Benutzer_fertig.csv.csv"
$Domain = "OU=Users,DC=test DC=projekt"
$ServerNameProfil = "WIN-EG0D6LAOGQU"
$ServerNameDateien = "WIN-EG0D6LAOGQU\daten"
$ProfilPfad = "\\"+$ServerNameProfil+"\profile\"
function Get-RandomPassword{
Param(
[Parameter(mandatory=$true)]
[int]$Length
)
Begin{
if($Length -lt 4){
End
}
$Numbers = 1..9
$LettersLower = "abcdefghijklmnopqrstuvwxyz".ToCharArray()
$LettersUpper = "ABCEDEFHIJKLMNOPQRSTUVWXYZ".ToCharArray()
$Special = "!@#$%^&*=+?".ToCharArray()
$N_Count = [math]::Round($Length*.2)
$L_Count = [math]::Round($Length*.4)
$U_Count = [math]::Round($Length*.2)
$S_Count = [math]::Round($Length*.2)
}
Process{
$Passwort = $LettersLower | Get-Random -Count $L_Count
$Passwort += $Numbers | Get-Random -Count $N_Count
$Passwort += $LettersUpper | Get-Random -Count $U_Count
$Passwort += $Special | Get-Random -Count $S_Count
if($Passwort.length -lt $Length){
$Passwort += $Special | Get-Random -Count ($Length - $Passwort.length)
}
$Passwort = ($Passwort | Get-Random -Count $Length) -join ""
}
End{
$Passwort
}
}
Foreach ($Benutzer in $Benutzerliste) {
$Benutzer = $Benutzer.benutzer
$Benutzer = $Name+"."+$Vorname
$Name = $Benutzer.name
$Vorname = $Benutzer.vorname
$Passwort = Get-RandomPassword -length 8
$var_abt1 = $Benutzer.AdministratorIntern
$var_abt2 = $Benutzer.Lager
$var_abt3 = $Benutzer.Verkauf
$var_abt4 = $Benutzer.Rechnungswesen
$Telefon = $Benutzer.telefon
$Email = $Benutzer.email
$Anzeige = $Name+" "+$Vorname
$Anmeldung = $Benutzer + "@test.projekt"
$VerzPfad = "\\"+$ServerNameDateien+"\"+$Abteilung
$HomePfad = "\\"+$ServerNameDateien+"\"+$Abteilung+"\"+$Gruppe+"\"+$Benutzer
#Arbeitsbestätigung
Write-Host "Arbeite an $Anzeige..." -ForegroundColor Cyan
#neuen Benutzer anlegen
$Paramt=@{
Name= $Anzeige
SamAccountName= $Benutzer
UserPrincipalName= $Anmeldung
DisplayName= $Anzeige
Surname= $Name
givenName= $Vorname
AccountPassword= (ConvertTo-SecureString $Passwort -AsPlainText -Force)
Enabled= $true
ChangePasswordAtLogon= $true
Officephone= $Telefon
EmailAddress= $Email
profilepath= $ProfilPfad+$Benutzer
HomeDrive= "C:"
HomeDirectory= $VerzPfad
}
New-ADUser @paramt
$Benutzer | Add-Member -MemberType NoteProperty -Name "Passwort" -Value $Passwort -Force
if($var_abt1 -eq 'ja')
{
Add-ADGroupMember $var_abt1 -Members $Benutzer
}
if($var_abt2 -eq 'ja')
{
Add-ADGroupMember $var_abt2 -Members $Benutzer
}
if($var_abt3 -eq 'ja')
{
Add-ADGroupMember $var_abt3 -Members $Benutzer
}
if($var_abt4 -eq 'ja')
{
Add-ADGroupMember $var_abt4 -Members $Benutzer
}
}
#Abschlussbestätigung
Write-Host "Erfolgreich erstellt: $Anzeige" -ForegroundColor Green
#Export
$Benutzer | Export-Csv $ExportPfad -NoTypeInformation
Vollständige Fehlermeldungen:
1.
New-ADUser : Der angegebene Name hat ein falsches Format für einen Kontennamen
In Zeile:87 Zeichen:9
+ CategoryInfo : NotSpecified: (CN=\\ ,CN=Users,DC=test,DC=projekt:String) [New-ADUser], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:1315,Microsoft.ActiveDirectory.Management.Commands.NewADUser
2.
Export-Csv : Das Laufwerk wurde nicht gefunden. Ein Laufwerk mit dem Namen "C" ist nicht vorhanden.
In Zeile:114 Zeichen:13
+ CategoryInfo : ObjectNotFound: (C:String) [Export-Csv], DriveNotFoundException
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.ExportCsvCommand
Vielen für jeden der sich dies durchliest und mir Feedback bzw. Hilfestellung geben kann.
lg
Ich mache gerade mein Abschlussprojekt zum IT-Systemkaufmann (Umschulung) und habe da Probleme mit meinem Powershellscript.
Mein Powershell Script soll Benutzer aus einer CSV in der Active Directory anlegen. Dazu habe ich ein Script zusammengetragen und angepasst.
Jedoch komme ich momentan einfach nicht weiter. (Der Betrieb kann nicht helfen)
Das Script soll die Benutzer anlegen, sowie ein Zufallspasswort generieren und die Benutzer in die entsprechenden Gruppen einteilen und anschließend sollen die angelegten Dateien Exportiert werden.
Hoffe ihr könnt mir helfen. Vielen Dank schon einmal im Vorfeld!
Habe eine VM aufgesetzt und Active Directory fehlerfrei hinzugefügt, das ganze läuft auf Windows Server 2019
Die CSV Datei ist wie folgt aufgebaut:
Benutzer;Name;Vorname;Passwort;AdministratorIntern;Lager;Verkauf;Rechnungswesen;Telefon;Email
;Walter;Fritz;;;ja;;;123456;xy@gmai.com
(Der Benutzer(AnmeldeName) soll dann mit generiert werden)
(CSV Daten sind nur Beispielhaft)
Script:
Import-Module ActiveDirectory
- globale Informationen
$ExportPfad = "C:\Export_AD_Benutzer\Benutzer_fertig.csv.csv"
$Domain = "OU=Users,DC=test DC=projekt"
$ServerNameProfil = "WIN-EG0D6LAOGQU"
$ServerNameDateien = "WIN-EG0D6LAOGQU\daten"
$ProfilPfad = "\\"+$ServerNameProfil+"\profile\"
function Get-RandomPassword{
Param(
[Parameter(mandatory=$true)]
[int]$Length
)
Begin{
if($Length -lt 4){
End
}
$Numbers = 1..9
$LettersLower = "abcdefghijklmnopqrstuvwxyz".ToCharArray()
$LettersUpper = "ABCEDEFHIJKLMNOPQRSTUVWXYZ".ToCharArray()
$Special = "!@#$%^&*=+?".ToCharArray()
$N_Count = [math]::Round($Length*.2)
$L_Count = [math]::Round($Length*.4)
$U_Count = [math]::Round($Length*.2)
$S_Count = [math]::Round($Length*.2)
}
Process{
$Passwort = $LettersLower | Get-Random -Count $L_Count
$Passwort += $Numbers | Get-Random -Count $N_Count
$Passwort += $LettersUpper | Get-Random -Count $U_Count
$Passwort += $Special | Get-Random -Count $S_Count
if($Passwort.length -lt $Length){
$Passwort += $Special | Get-Random -Count ($Length - $Passwort.length)
}
$Passwort = ($Passwort | Get-Random -Count $Length) -join ""
}
End{
$Passwort
}
}
Foreach ($Benutzer in $Benutzerliste) {
$Benutzer = $Benutzer.benutzer
$Benutzer = $Name+"."+$Vorname
$Name = $Benutzer.name
$Vorname = $Benutzer.vorname
$Passwort = Get-RandomPassword -length 8
$var_abt1 = $Benutzer.AdministratorIntern
$var_abt2 = $Benutzer.Lager
$var_abt3 = $Benutzer.Verkauf
$var_abt4 = $Benutzer.Rechnungswesen
$Telefon = $Benutzer.telefon
$Email = $Benutzer.email
$Anzeige = $Name+" "+$Vorname
$Anmeldung = $Benutzer + "@test.projekt"
$VerzPfad = "\\"+$ServerNameDateien+"\"+$Abteilung
$HomePfad = "\\"+$ServerNameDateien+"\"+$Abteilung+"\"+$Gruppe+"\"+$Benutzer
#Arbeitsbestätigung
Write-Host "Arbeite an $Anzeige..." -ForegroundColor Cyan
#neuen Benutzer anlegen
$Paramt=@{
Name= $Anzeige
SamAccountName= $Benutzer
UserPrincipalName= $Anmeldung
DisplayName= $Anzeige
Surname= $Name
givenName= $Vorname
AccountPassword= (ConvertTo-SecureString $Passwort -AsPlainText -Force)
Enabled= $true
ChangePasswordAtLogon= $true
Officephone= $Telefon
EmailAddress= $Email
profilepath= $ProfilPfad+$Benutzer
HomeDrive= "C:"
HomeDirectory= $VerzPfad
}
New-ADUser @paramt
$Benutzer | Add-Member -MemberType NoteProperty -Name "Passwort" -Value $Passwort -Force
if($var_abt1 -eq 'ja')
{
Add-ADGroupMember $var_abt1 -Members $Benutzer
}
if($var_abt2 -eq 'ja')
{
Add-ADGroupMember $var_abt2 -Members $Benutzer
}
if($var_abt3 -eq 'ja')
{
Add-ADGroupMember $var_abt3 -Members $Benutzer
}
if($var_abt4 -eq 'ja')
{
Add-ADGroupMember $var_abt4 -Members $Benutzer
}
}
#Abschlussbestätigung
Write-Host "Erfolgreich erstellt: $Anzeige" -ForegroundColor Green
#Export
$Benutzer | Export-Csv $ExportPfad -NoTypeInformation
Vollständige Fehlermeldungen:
1.
New-ADUser : Der angegebene Name hat ein falsches Format für einen Kontennamen
In Zeile:87 Zeichen:9
New-ADUser @paramt
~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=\\ ,CN=Users,DC=test,DC=projekt:String) [New-ADUser], ADException+ FullyQualifiedErrorId : ActiveDirectoryServer:1315,Microsoft.ActiveDirectory.Management.Commands.NewADUser
2.
Export-Csv : Das Laufwerk wurde nicht gefunden. Ein Laufwerk mit dem Namen "C" ist nicht vorhanden.
In Zeile:114 Zeichen:13
$Benutzer | Export-Csv $ExportPfad -NoTypeInformation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:String) [Export-Csv], DriveNotFoundException+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.ExportCsvCommand
Vielen für jeden der sich dies durchliest und mir Feedback bzw. Hilfestellung geben kann.
lg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1345630836
Url: https://administrator.de/forum/powershell-script-bulk-create-fehlermeldungen-1345630836.html
Ausgedruckt am: 22.04.2025 um 04:04 Uhr
3 Kommentare
Neuester Kommentar
Moin,
das erste Problem:
Zwei Anmerkungen:
1. Bitte Code-Tags benutzen. Das liest sich wesentlich leichter.
2. Dafür kriegst Du von mir maximal eine vier:
Was machst Du, wenn eine Abteilung hinzu kommt. In Deiner Lösung musst Du dann alles umschreiben. Besser wäre, im CSV ein Feld "Abteilung", das Du ausliest und dann die Gruppe(n) auswählst.
Und das hier
käuft auch gegen die Wand. In den Variablen $var_abtx steht "ja". Und ich glaube kaum, dass die Gruppe "ja" heißen soll.
Liebe Grüße
Erik
das erste Problem:
Zitat von @ITEnton:
Die CSV Datei ist wie folgt aufgebaut:
Benutzer;Name;Vorname;Passwort;AdministratorIntern;Lager;Verkauf;Rechnungswesen;Telefon;Email
;Walter;Fritz;;;ja;;;123456;xy@gmai.com
Die CSV Datei ist wie folgt aufgebaut:
Benutzer;Name;Vorname;Passwort;AdministratorIntern;Lager;Verkauf;Rechnungswesen;Telefon;Email
;Walter;Fritz;;;ja;;;123456;xy@gmai.com
> Foreach ($Benutzer in $Benutzerliste) {
> # Schleifen Variable setzen
> $Benutzer = $Benutzer.benutzer
# Hier überschreibst Du Deine Schleifenvariable mit einem leeren Wert, da in der Spalte
# "Benutzer" im CSV nichts steht. Das soll ja noch generiert werden.
> $Benutzer = $Name+"."+$Vorname
# Damit ist auch das leer.
> [...]
> SamAccountName= $Benutzer
# Und damit logischweise das auch. Und leere Usernamen sind verboten. ;-)
# Merke: Nie die Schleifenvariable überschreiben.
> }
Zwei Anmerkungen:
1. Bitte Code-Tags benutzen. Das liest sich wesentlich leichter.
2. Dafür kriegst Du von mir maximal eine vier:
Benutzer;Name;Vorname;Passwort;AdministratorIntern;Lager;Verkauf;Rechnungswesen;Telefon;Email
[...]
$var_abt1 = $Benutzer.AdministratorIntern
$var_abt2 = $Benutzer.Lager
$var_abt3 = $Benutzer.Verkauf
$var_abt4 = $Benutzer.Rechnungswesen
Was machst Du, wenn eine Abteilung hinzu kommt. In Deiner Lösung musst Du dann alles umschreiben. Besser wäre, im CSV ein Feld "Abteilung", das Du ausliest und dann die Gruppe(n) auswählst.
Und das hier
if($var_abt1 -eq 'ja')
{
Add-ADGroupMember $var_abt1 -Members $Benutzer
}
if($var_abt2 -eq 'ja')
{
Add-ADGroupMember $var_abt2 -Members $Benutzer
}
if($var_abt3 -eq 'ja')
{
Add-ADGroupMember $var_abt3 -Members $Benutzer
}
if($var_abt4 -eq 'ja')
{
Add-ADGroupMember $var_abt4 -Members $Benutzer
}
käuft auch gegen die Wand. In den Variablen $var_abtx steht "ja". Und ich glaube kaum, dass die Gruppe "ja" heißen soll.
Liebe Grüße
Erik
Moin,
Schön.
Ist denn der User zwingend nur in der Gruppe seiner Abteilung? Oder könnten es nicht ein paar mehr sein? Ich persönlich tendiere ja auch zu dem Ziel pro User eine Gruppe. Aber das geht leider nicht immer. Daher baue ich sowas so auf:
Das CSV
Und dann im Skript:
Damit kannst Du beliebig viele Gruppen per CSV einem User zuweisen. Du musst nur darauf achten, dass sie mit Kommata getrennt werden. Es geht natürlich auch jedes andere Trennzeichen. Es muss nur im CSV und in der Split-Methode übereinstimmen.
Gerne.
Liebe Grüße
Erik
Zitat von @ITEnton:
Danke für die Rückmeldung, die Benutzer/User Anlegung funktioniert nun. Habe den Oberen Teil nochmal komplett neu aufgebaut und diesmal nicht die Schleifen Variablen überschrieben.
Danke für die Rückmeldung, die Benutzer/User Anlegung funktioniert nun. Habe den Oberen Teil nochmal komplett neu aufgebaut und diesmal nicht die Schleifen Variablen überschrieben.
Schön.
Zitat von @erikro:
2. Dafür kriegst Du von mir maximal eine vier:
Was machst Du, wenn eine Abteilung hinzu kommt. In Deiner Lösung musst Du dann alles umschreiben. Besser wäre, im CSV ein Feld "Abteilung", das Du ausliest und dann die Gruppe(n) auswählst.
Und das hier
käuft auch gegen die Wand. In den Variablen $var_abtx steht "ja". Und ich glaube kaum, dass die Gruppe "ja" heißen soll.
2. Dafür kriegst Du von mir maximal eine vier:
>> Benutzer;Name;Vorname;Passwort;AdministratorIntern;Lager;Verkauf;Rechnungswesen;Telefon;Email
>> [...]
>> $var_abt1 = $Benutzer.AdministratorIntern
>> $var_abt2 = $Benutzer.Lager
>> $var_abt3 = $Benutzer.Verkauf
>> $var_abt4 = $Benutzer.Rechnungswesen
>>
Was machst Du, wenn eine Abteilung hinzu kommt. In Deiner Lösung musst Du dann alles umschreiben. Besser wäre, im CSV ein Feld "Abteilung", das Du ausliest und dann die Gruppe(n) auswählst.
Und das hier
>> if($var_abt1 -eq 'ja')
>> {
>> Add-ADGroupMember $var_abt1 -Members $Benutzer
>> }
>> if($var_abt2 -eq 'ja')
>> {
>> Add-ADGroupMember $var_abt2 -Members $Benutzer
>> }
>> if($var_abt3 -eq 'ja')
>> {
>> Add-ADGroupMember $var_abt3 -Members $Benutzer
>> }
>> if($var_abt4 -eq 'ja')
>> {
>> Add-ADGroupMember $var_abt4 -Members $Benutzer
>> }
>>
Also Prinzipiell Die CSV Datei nach folgendem Vorbild aufbauen:
Kann ich trotzdem eine IF Abfrage erstellen die, die Liste abarbeitet?
Benutzer;Name;Vorname;Passwort;Abteilung;Telefon;Email
>
Kann ich trotzdem eine IF Abfrage erstellen die, die Liste abarbeitet?
Ist denn der User zwingend nur in der Gruppe seiner Abteilung? Oder könnten es nicht ein paar mehr sein? Ich persönlich tendiere ja auch zu dem Ziel pro User eine Gruppe. Aber das geht leider nicht immer. Daher baue ich sowas so auf:
Das CSV
Benutzer;Name;Vorname;Passwort;Gruppen;Telefon;Email
;"Meier";"Hans";;"g_verwaltung,g_leitung,v_intern,v_geschaeftsfuehrung";"04012345678";"hans.meier@acme.com"
Und dann im Skript:
$groups = $dataset.Gruppen.split(",")
# Jetzt hast Du ein Array $groups, in dem die Gruppen stehen.
# $dataset musst Du natürlich entsprechend Deiner Variablen ersetzen.
foreach($group in $groups){
Add-ADGroupMember $group -members $user
}
Damit kannst Du beliebig viele Gruppen per CSV einem User zuweisen. Du musst nur darauf achten, dass sie mit Kommata getrennt werden. Es geht natürlich auch jedes andere Trennzeichen. Es muss nur im CSV und in der Split-Methode übereinstimmen.
Vielen Dank für deine Hilfe!
Gerne.
Liebe Grüße
Erik