Powershell/Bestellungen/Add_User.ps1
Alin bd27e39a0d Add_User.ps1
Neu erstellt.
2025-04-24 07:22:50 +00:00

407 lines
16 KiB
PowerShell
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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