Benutzername auf Namenskonvention prüfen – Powershell

Erläuterung

Das Skript prüft folgende Richtlinie: Nachname 6 Zeichen, Vorname 2 Zeichen. Es generiert aus Vor- und Nachname einen Benutzernamen und prüft diesen auf Richtlinienkonformität (vergleicht den aktuellen SamAccountName). Durch das Verändern der Variablen intLaengestrVorname und intLaengestrNachname kann Einfluss auf die Generierung genommen werden.

Anzupassen!
DOMAINCONTROLLER, ORAGANISATIONSEINHEIT, DOMÄNE und PFAD müssen noch angepasst werden!

Sie können die Ausgabe in eine Datei speichern. Entfernen Sie die # bei „Out-File“ im unteren drittel.

Skript

<#

Author: Jan Weis
Version: 0.1
Version History:

Purpose: Vergleicht den Benutzernamen mit einer Namenskonvention ( 6 Buchstaben Nachname, 2 Buchstaben Vorname )

#>

#requires -Version 1 -Modules ActiveDirectory
# Deklaration
[String]$strKonvention = ''
[String]$strVorname = ''
[String]$strNachname = ''
[String]$SamAccountName = ''
[Int]$MissigChars = 0
[Int]$intLaengestrVorname = 2
[Int]$intLaengestrNachname = 6


# Abfrage der AD-Benutzer
Write-Host -Object '[+] Informationen werden abgerufen. Bitte warten...'
try
{
    $ADUser = Get-ADUser -Filter { Name -like '*'} -Properties SamAccountName -AuthType Negotiate -Server 'HS2A' -ErrorAction SilentlyContinue -SearchBase 'OU=People,DC=hs-kempten,DC=local'
    Write-Host -Object '[OK!]' -ForegroundColor Green
}
catch
{
    Write-Host -Object "[ERROR] Fehler in der AD-Abfrage!`n$_" -ForegroundColor Red
    Exit
}

# Objektverarbeitung
foreach ($User in $ADUser)
{
    try
    {
        # Füllen der Variablen
        $strVorname = $User.GivenName
        $strNachname = $User.Surname
        $SamAccountName = $User.SamAccountName

        # Benutzernamen generieren
        If ( $strNachname.Length -ge $intLaengestrNachname )
        {
            # generiere
            $strKonvention = $strNachname.SubString(0,$intLaengestrNachname) + $strVorname.Substring(0,$intLaengestrVorname)
        }

        # Benutzernamen generieren
        If ( $strNachname.Length -lt $intLaengestrNachname )
        {
            # Berechne fehlende Zeichen
            $MissigChars = $intLaengestrNachname - ($strNachname.length)
            
            # generiere
            $strKonvention = $strNachname + ($strVorname.Substring(0,($intLaengestrVorname+$MissigChars)))
        }
    
        # Vergleiche die strKonvention mit dem Benutzerobjekt
        if ($SamAccountName -notlike $strKonvention)
        {
            Write-Host -Object "[!!] Unstimmigkeit gefunden! Vorname:'$strVorname', Nachname:'$strNachname', Erwartet:$strKonvention, Vorhanden:$SamAccountName" -ForegroundColor Yellow
            #Out-File -FilePath 'PFAD' -Append -InputObject "[!!] Unstimmigkeit gefunden! Vorname:'$strVorname', Nachname:'$strNachname', Erwartet:$strKonvention, Vorhanden:$SamAccountName"
        }
    }
    catch
    {
        Write-Host -Object "[ERROR] $_"
    }
}