# Alin Sennewald 28.11.2022 # letzte Änderung 25.01.2024 # Script für das erstellen PW,Homelaufwerk,verschieben und Rechte hinzufügen. Import-Module ActiveDirectory function creatpw{ param( [string]$Vorname, [string]$Nachname, [string]$user ) # Umlaute entfernen bzw. ersetzten $Vorname = $Vorname.Replace('ö','oe').Replace('ä','ae').Replace('ü','ue').Replace('ß','ss').Replace('Ö','Oe').Replace('Ü','Ue').Replace('Ä','Ae') $Nachname = $Nachname.Replace('ö','oe').Replace('ä','ae').Replace('ü','ue').Replace('ß','ss').Replace('Ö','Oe').Replace('Ü','Ue').Replace('Ä','Ae') # Alle Buchstaben in groß $Vorname = $Vorname.ToUpper() $Nachname = $Nachname.ToUpper() $VornameK = $Vorname.ToLower() $NachnameK = $Nachname.ToLower() # Jeweils 1 Zeichen und letztes Zeichen in Variable $CodeVorname = $Vorname[0] + $VornameK[-1] $CodeNachname = $Nachname[0] + $NachnameK[-1] # Länge Vorname bzw. Nachname $Vornameanzahl = $Vorname.Length $Nachnameanzahl = $Nachname.Length # Wenn länger als 9 Zeichnen, dann abschneinden bzw 9 setzten. if($Vornameanzahl -ge "9" ) {$Vornameanzahl = "9"} if($Nachnameanzahl -ge "9" ) {$Nachnameanzahl = "9"} # Passwort zusammen setzten und Globale Variable erstellen $Global:Codename = "##*" + $CodeVorname + $CodeNachname + $Vornameanzahl + $Nachnameanzahl + "*##" Set-ADAccountPassword $user -NewPassword (ConvertTo-SecureString -AsPlainText $Codename -Force) -Reset # User aktivieren Enable-ADAccount -Identity $user Set-ADUser -Identity $user -ChangePasswordAtLogon:$True Write-Host $user - $Vorname - $Nachname : $Codename "( Kennwort ist im Zwischenspeicher. )" Write-Host Bei light User Kennwört läuft nie ab + Haken raus nehmen Set-Clipboard $Codename } function homelaufwerk-erstellen{ param( [string]$BENUTZER ) $homeunc = "\\n-ad.n-ergie\daten\Homedir" $DIR = $homeunc + "\" + $BENUTZER.ToUpper() if (!(Test-Path -Path $DIR)) { $paramNewItem = @{ Path = $DIR ItemType = 'Directory' Force = $true } New-Item @paramNewItem } $acl = Get-Acl $DIR $Rights = [System.Security.AccessControl.FileSystemRights] "Modify, Synchronize" $Access= [System.Security.AccessControl.AccessControlType]::Allow $Inherit=[System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit $Prop= [System.Security.AccessControl.PropagationFlags]::InheritOnly $AccessRule = new-object System.Security.AccessControl.FileSystemAccessRule ($BENUTZER,$Rights,$Inherit,$Prop,$Access) $ACL.AddAccessRule($AccessRule) set-acl -AclObject $ACL -Path $DIR $Rights = [System.Security.AccessControl.FileSystemRights] "Write, ReadAndExecute, Synchronize" $Access= [System.Security.AccessControl.AccessControlType]::Allow $Inherit= [System.Security.AccessControl.InheritanceFlags]::none $Prop = [System.Security.AccessControl.PropagationFlags]::none $AccessRule = new-object System.Security.AccessControl.FileSystemAccessRule ($BENUTZER,$Rights,$Inherit,$Prop,$Access) $ACL.AddAccessRule($AccessRule) set-acl -AclObject $ACL -Path $DIR # Basisordner festlegen in AD Set-ADUser -Identity $BENUTZER -HomeDirectory $DIR -HomeDrive H; } function Show-CustomMenu { param ( [string]$menuname = 'AD User erstellen' ) Clear-Host Write-Host "================ $menuname ================" Write-host "" Write-Host "1: Wähle '1' Passwort erstellen/aktivieren/verschieben." Write-Host "2: Wähle '2' Homelaufwerk erstellen." Write-Host "3: Wähle '3' Abteilungslaufwerk und Rechte vergeben." Write-Host "4: Wähle '4' Rechtegruppen suchen/vergeben." Write-Host "5: Wähle '5' Abgleich Mail + Benutzername" Write-Host "Q: Wähle 'Q' Programm beenden." Write-Host "" Write-host "" } function Menu-anzeigen{ $auswahl = $null # Menue aufrufen und Titel uebergeben Show-CustomMenu –menuname 'AD User erstellen' # Eingabe /Auswahl des Benutzers $auswahl = Read-Host "Bitte die gewünschte Option wählen" # Optionen wählen switch ($auswahl){ '1' { cls Write-host "" $UserName = Read-Host "Username eingeben" $Userdescription = Read-Host "SD Nummer eingeben" $vorname1 = (get-aduser $UserName -Properties GivenName, Surname).Givenname $nachname1 = (get-aduser $UserName -Properties GivenName, Surname).Surname $title = "Passwort setzten" $question = "Soll das Passwort für den User $UserName - $vorname1 $nachname1 gesetzt werden?" $choices = '&Ja', '&Nein' $decision = $Host.UI.PromptForChoice($title, $question, $choices, 1) if ($decision -eq 0) { switch (Read-Host "Bitte (1) für intern, (2) für extern, (3) Wartung / Light "){ 1 { $Domainselect = Get-ADForest | ForEach-Object UPNSuffixes | Out-GridView -PassThru -Title "4. Domaine auswählen" $Vorname1 = $Vorname1.Replace('ö','oe').Replace('ä','ae').Replace('ü','ue').Replace('ß','ss').Replace('Ö','Oe').Replace('Ü','Ue').Replace('Ä','Ae') $Nachname1 = $Nachname1.Replace('ö','oe').Replace('ä','ae').Replace('ü','ue').Replace('ß','ss').Replace('Ö','Oe').Replace('Ü','Ue').Replace('Ä','Ae') $varforUserprin = $vorname1.ToLower() + "." + $nachname1.ToLower() + "@" + $Domainselect Get-aduser $UserName | Set-ADUser -UserPrincipalName $varforUserprin } 2 { $Domainselect = Get-ADForest | ForEach-Object UPNSuffixes | Out-GridView -PassThru -Title "4. Domaine auswählen" $Vorname1 = $Vorname1.Replace('ö','oe').Replace('ä','ae').Replace('ü','ue').Replace('ß','ss').Replace('Ö','Oe').Replace('Ü','Ue').Replace('Ä','Ae') $Nachname1 = $Nachname1.Replace('ö','oe').Replace('ä','ae').Replace('ü','ue').Replace('ß','ss').Replace('Ö','Oe').Replace('Ü','Ue').Replace('Ä','Ae') $varforUserprin = $vorname1.ToLower() + "." + $nachname1.ToLower() + ".extern" + "@" + $Domainselect Get-aduser $UserName | Set-ADUser -UserPrincipalName $varforUserprin } 3 { $Domainselect = Get-ADForest | ForEach-Object UPNSuffixes | Out-GridView -PassThru -Title "4. Domaine auswählen" $varforUserprin = $UserName + "@" + $Domainselect Get-aduser $UserName | Set-ADUser -UserPrincipalName $varforUserprin } } $MoveOuUser = Get-ADOrganizationalUnit -Filter * -SearchBase "OU=Users,OU=N-Tree,DC=n-ad,DC=n-ergie" -SearchScope OneLevel | ForEach-Object Name | Out-GridView -PassThru -Title "3. Organisationseinheit vom User auswählen" creatpw -Vorname $vorname1 -Nachname $nachname1 -user $UserName get-aduser $UserName | Move-ADObject -TargetPath (Get-ADOrganizationalUnit -Filter {name -eq $MoveOuUser} -SearchBase "OU=Users,OU=N-Tree,DC=n-ad,DC=n-ergie" -SearchScope OneLevel) Set-ADUser $UserName -Description "SD $Userdescription" Write-host "" Write-host "Passwort wurde gesetzt und User aktiviert/verschoben nach " $MoveOuUser Write-host "SD Aufrag wurde ins Beschreibungsfeld hinzugefügt: " $Userdescription Write-host "Text für Angaben in der Bestellung im Zwischenspeicher." -ForegroundColor Yellow Write-host "" $TagLOG = (Get-Date).tostring("dd.MM.yyyy") $AngabenBesteller = $TagLOG + " merk:" + "`n" + "1. User PW: " + $Codename + " erstellt." + "`n" + "2. User aktiviert." + "`n" + "3. User verschoben: " + $MoveOuUser + "`n" Set-Clipboard $AngabenBesteller Read-Host -Prompt "Um fortzufahren beliebige Taste drücken..." Menu-anzeigen } else { Write-host "Abruch durch Benutzer, Bitte Auswahl erneut ausführen." Write-host "" Read-Host -Prompt "Um fortzufahren beliebige Taste drücken..." Menu-anzeigen } } '2' { cls Write-host "Es wird der Homeordner erstellt und die Filerechte gesetzt." Write-host "Zusätzlich wird die Rechtegruppe dem User hinzugefügt." Write-host "" $HomeUser = Read-Host "Username eingeben" Write-host "" $HomeUser = $HomeUser.ToUpper() $usercheck = Get-ADUser $HomeUser if ($usercheck) { } else { Write-host "User: " + $HomeUser + " existiert nicht!" Write-host "" Read-Host -Prompt "Um fortzufahren beliebige Taste drücken..." Menu-anzeigen } homelaufwerk-erstellen -BENUTZER $HomeUser #CLS Write-host "" Write-host "Homelaufwerk wurde erstellt: \\n-ad.n-ergie\daten\HOME\HOME$HomeBuchstabe\$HomeUser" -ForegroundColor Yellow Write-host "" Write-host "Text für Angaben in der Bestellung im Zwischenspeicher." -ForegroundColor Yellow $AngabenBesteller2 = "4. Homelaufwerk wurde erstellt." + "`n" Set-Clipboard $AngabenBesteller2 Write-host "" Read-Host -Prompt "Um fortzufahren beliebige Taste drücken..." Menu-anzeigen } '3' { cls Write-host "Bitte die Abteilung aus der Bestellung eingeben." Write-host "Danach Bitte den Usernamen aus der Bestellung." Write-host "" $3abteilungusername = Read-Host "Bitte Username eingeben" Write-Host "" #$3abteilunguser = "f-*" #$3selectabt = get-adgroup -Filter {name -like "f-*" -or name -like "r-*"} -SearchBase "OU=Abteil,OU=Powerscale,OU=SystemGroups,OU=Resources,OU=N-Tree,DC=n-ad,DC=n-ergie" | select Name, DistinguishedName | Out-GridView -PassThru -Title "Folgende Gruppe wurde gefunden" # Definiere die Suchbereiche (SearchBase) $searchBases = @( "OU=Abteil,OU=Main,OU=Powerscale,OU=SystemGroups,OU=Resources,OU=N-Tree,DC=n-ad,DC=n-ergie", "OU=Organisation,OU=Groups,OU=N-Tree,DC=n-ad,DC=n-ergie" ) # Array zum Speichern der Ergebnisse erstellen $3selectabt = @() # Schleife durch die Suchbereiche und führe die Suche aus foreach ($searchBase in $searchBases) { $results = Get-ADGroup -SearchBase $searchBase -Filter {Name -like "f-*" -or Name -like "r-*"} | select Name, DistinguishedName | Out-GridView -PassThru -Title "Folgende Gruppe wurde gefunden" $3selectabt += $results } CLS Write-Host "================ Userart auswählen ================" Write-host "" Write-Host "1: Wähle '1' intern" Write-Host "2: Wähle '2' extern" Write-Host "3: Wähle '3' S4EVU-N" Write-Host "4: Wähle '4' WALLIX" Write-Host "5: Wähle '5' ADAMO" Write-Host "6: Wähle '6' ABDUL01" Write-Host "7: Wähle '7' light" Write-host "" # Eingabe /Auswahl des Benutzers $auswahl2 = Read-Host "Bitte die gewünschte Option wählen" switch ($auswahl2){ '1' { $gruppenauswahl2 = Import-Csv -Path H:\Sync\Dokumente\WindowsPowerShell\Bestellungen\intern.csv [System.Collections.ArrayList]$LogNamesList = $gruppenauswahl2.Gruppen foreach($3selectabtfirst in $3selectabt){ $LogNamesList.Add($3selectabtfirst.Name) } $auswahlintern = $LogNamesList | Out-GridView -PassThru -Title "Bitte alle Gruppen auswählen und mit Ok Bestätigen" $auswahlintern foreach($group in $auswahlintern){ Add-ADGroupMember -Identity $group -Members $3abteilungusername } } '2' { $gruppenauswahl2 = Import-Csv -Path H:\Sync\Dokumente\WindowsPowerShell\Bestellungen\extern.csv [System.Collections.ArrayList]$LogNamesList = $gruppenauswahl2.Gruppen foreach($3selectabtfirst in $3selectabt){ $LogNamesList.Add($3selectabtfirst.Name) } $auswahlextern = $LogNamesList | Out-GridView -PassThru -Title "Bitte alle Gruppen auswählen und mit Ok Bestätigen" $auswahlextern foreach($group in $auswahlextern){ Add-ADGroupMember -Identity $group -Members $3abteilungusername } } '3' { $gruppenauswahl2 = Import-Csv -Path H:\Sync\Dokumente\WindowsPowerShell\Bestellungen\s4evun.csv [System.Collections.ArrayList]$LogNamesList = $gruppenauswahl2.Gruppen foreach($3selectabtfirst in $3selectabt){ $LogNamesList.Add($3selectabtfirst.Name) } $auswahls4evun = $LogNamesList | Out-GridView -PassThru -Title "Bitte alle Gruppen auswählen und mit Ok Bestätigen" $auswahls4evun foreach($group in $auswahls4evun){ Add-ADGroupMember -Identity $group -Members $3abteilungusername } } '4' { $gruppenauswahl2 = Import-Csv -Path H:\Sync\Dokumente\WindowsPowerShell\Bestellungen\wallix.csv [System.Collections.ArrayList]$LogNamesList = $gruppenauswahl2.Gruppen foreach($3selectabtfirst in $3selectabt){ $LogNamesList.Add($3selectabtfirst.Name) } $auswahlwallix = $LogNamesList | Out-GridView -PassThru -Title "Bitte alle Gruppen auswählen und mit Ok Bestätigen" $auswahlwallix foreach($group in $auswahlwallix){ Add-ADGroupMember -Identity $group -Members $3abteilungusername } } '5' { $gruppenauswahl2 = Import-Csv -Path H:\Sync\Dokumente\WindowsPowerShell\Bestellungen\ADAMO.csv [System.Collections.ArrayList]$LogNamesList = $gruppenauswahl2.Gruppen foreach($3selectabtfirst in $3selectabt){ $LogNamesList.Add($3selectabtfirst.Name) } $auswahladamo = $LogNamesList | Out-GridView -PassThru -Title "Bitte alle Gruppen auswählen und mit Ok Bestätigen" $auswahladamo foreach($group in $auswahladamo){ Add-ADGroupMember -Identity $group -Members $3abteilungusername } } '6' { $gruppenauswahl2 = Import-Csv -Path H:\Sync\Dokumente\WindowsPowerShell\Bestellungen\ABDUL01.csv [System.Collections.ArrayList]$LogNamesList = $gruppenauswahl2.Gruppen foreach($3selectabtfirst in $3selectabt){ $LogNamesList.Add($3selectabtfirst.Name) } $auswahlabdul01 = $LogNamesList | Out-GridView -PassThru -Title "Bitte alle Gruppen auswählen und mit Ok Bestätigen" $auswahlabdul01 foreach($group in $auswahlabdul01){ Add-ADGroupMember -Identity $group -Members $3abteilungusername } } '7' { $gruppenauswahl2 = Import-Csv -Path H:\Sync\Dokumente\WindowsPowerShell\Bestellungen\light.csv [System.Collections.ArrayList]$LogNamesList = $gruppenauswahl2.Gruppen foreach($3selectabtfirst in $3selectabt){ $LogNamesList.Add($3selectabtfirst.Name) } $auswahllight = $LogNamesList | Out-GridView -PassThru -Title "Bitte alle Gruppen auswählen und mit Ok Bestätigen" $auswahllight foreach($group in $auswahllight){ Add-ADGroupMember -Identity $group -Members $3abteilungusername } # Setze das Passwort für den Benutzer "light", um nie abzulaufen $userLight = Get-ADUser -Identity "light" -Properties "PasswordNeverExpires" if ($userLight.PasswordNeverExpires -eq $false) { Set-ADUser -Identity "light" -PasswordNeverExpires $true Write-Host "Passwort für den Benutzer 'light' wurde auf 'nie ablaufen' gesetzt." -ForegroundColor Green } else { Write-Host "Passwort für den Benutzer 'light' ist bereits auf 'nie ablaufen' gesetzt." -ForegroundColor Yellow } } } Write-Host "" Write-host "Text für Angaben in der Bestellung im Zwischenspeicher." -ForegroundColor Yellow Write-Host "" $AngabenBesteller3 = "5. Rechte wurden hinzugefügt." + "`n" + $auswahllight Set-Clipboard $AngabenBesteller3 Read-Host -Prompt "Um fortzufahren beliebige Taste drücken..." Menu-anzeigen } '4' { $AngabenBestellerGruppen = $null cls Write-host "" $4RechtegruppenUser = Read-Host "Bitte Username eingeben" Write-Host "" $4selectabt = Get-ADGroup -Filter {name -like "f-Projekte*"} -SearchBase "OU=Projekte,OU=Powerscale,OU=SystemGroups,OU=Resources,OU=N-Tree,DC=n-ad,DC=n-ergie" | select Name, DistinguishedName | Out-GridView -PassThru -Title "Folgende Gruppe wurde gefunden" Write-Host "" foreach($group in $4selectabt.name){ Add-ADGroupMember -Identity $group -Members $4RechtegruppenUser $AngabenBestellerGruppen += $group + "`n" } Write-Host $AngabenBestellerGruppen Write-Host "" Write-host "Text für Angaben in der Bestellung im Zwischenspeicher." -ForegroundColor Yellow Write-Host "" $AngabenBesteller4 = "6. Folgende Rechtegruppen wurden hinzugefügt:" + "`n" + $AngabenBestellerGruppen Set-Clipboard $AngabenBesteller4 Read-Host -Prompt "Um fortzufahren beliebige Taste drücken..." Menu-anzeigen } '5' { $identity = Read-Host "Benutzername eingeben" Get-ADUser -Identity $identity -Properties mail,UserPrincipalName | Format-List mail, UserPrincipalName } 'q' {break} } } Menu-anzeigen