# 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