itenton
Goto Top

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
  1. globale Informationen
$Benutzerliste = Import-CSV "C:\Anlegen_Benutzer\Anlegen_benutzer.csv.csv" -Delimiter ";" -Encoding Default
$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

back-to-topNew-ADUser @paramt

back-to-top~~~~~~~~~~~~~~~~~~

+ 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

back-to-top$Benutzer | Export-Csv $ExportPfad -NoTypeInformation

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ 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

Content-ID: 1345630836

Url: https://administrator.de/forum/powershell-script-bulk-create-fehlermeldungen-1345630836.html

Ausgedruckt am: 22.04.2025 um 04:04 Uhr

erikro
erikro 05.10.2021 um 09:17:38 Uhr
Goto Top
Moin,

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


> 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
ITEnton
ITEnton 05.10.2021 um 15:03:52 Uhr
Goto Top
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.


Im zweiten Teil:

Zitat von @erikro:

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.

Also Prinzipiell Die CSV Datei nach folgendem Vorbild aufbauen:
Benutzer;Name;Vorname;Passwort;Abteilung;Telefon;Email

Kann ich trotzdem eine IF Abfrage erstellen die, die Liste abarbeitet?

Vielen Dank für deine Hilfe!
erikro
Lösung erikro 05.10.2021 um 15:18:52 Uhr
Goto Top
Moin,

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.

Schön.

Zitat von @erikro:

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.

Also Prinzipiell Die CSV Datei nach folgendem Vorbild aufbauen:
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