Up 0 Down 0

Bulk change AD passwords

Also see: Generate Random Passwords.

Change Password for users with specific UPN-suffix:

$upnSuffix = "@domain.com"

# Importeer de Active Directory-module
Import-Module ActiveDirectory

# Functie om random wachtwoorden te genereren die voldoen aan de vereisten
function Generate-RandomPassword {
    $consonants = "bcdfghjklmnpqrstvwxyz"
    $vowels = "aeiou"
    $numbers = 0..9 | ForEach-Object { "$_" }
    $specialChar = "!"
    
    # Eerste karakter is een hoofdletter medeklinker
    $password = (Get-Random -InputObject $consonants.ToCharArray() -Count 1).ToString().ToUpper()
    
    # Vervolgkarakters zijn afwisselend kleine medeklinkers en klinkers
    for ($i = 0; $i -lt 3; $i++) {
        $password += (Get-Random -InputObject $vowels.ToCharArray() -Count 1)
		$password += (Get-Random -InputObject $consonants.ToCharArray() -Count 1)
        
    }
    
    # Voeg 6 willekeurige cijfers toe
    $password += (Get-Random -InputObject $numbers -Count 6) -join ''
    
    # Voeg het speciale teken toe
    $password += $specialChar
    
    return $password
}

# Haal alle gebruikers op
$users = Get-ADUser -Filter * -Properties UserPrincipalName

# Filter de gebruikers die eindigen op het specifieke UPN-suffix
$filteredUsers = $users | Where-Object { $_.UserPrincipalName -like "*$upnSuffix" }

# Lijst om gegenereerde wachtwoorden op te slaan
$generatedPasswords = @()

# Loop door elk gebruikersaccount en reset het wachtwoord
foreach ($user in $filteredUsers) {
    # Genereer een nieuw wachtwoord met de Generate-RandomPassword functie
    $generatedPassword = Generate-RandomPassword
    
    # Stel het wachtwoord in voor het huidige gebruikersaccount
    Set-ADAccountPassword -Identity $user -Reset -NewPassword (ConvertTo-SecureString -AsPlainText $generatedPassword -Force)
    
    # Voeg het gebruikersaccount en het gegenereerde wachtwoord toe aan de lijst
    $generatedPasswords += [PSCustomObject]@{
        User = $user.UserPrincipalName
        Password = $generatedPassword
    }
}

# Exporteer de gebruikersaccounts en gegenereerde wachtwoorden naar een CSV-bestand
$DateFolder = (Get-Date).ToString("yyyyMMdd")
$generatedPasswords | Export-Csv -Path "C:\Wachtwoorden-$DateFolder.csv" -NoTypeInformation
Write-Output "Wachtwoorden zijn gereset en geƫxporteerd naar C:\Wachtwoorden-$DateFolder.csv."

Change Password for specified users:

$upnList = @(
    "User@domain.tld",
    "User2@domain.tld"
)

# Importeer de Active Directory-module
Import-Module ActiveDirectory

# Functie om random wachtwoorden te genereren die voldoen aan de vereisten
function Generate-RandomPassword {
    $consonants = "bcdfghjklmnpqrstvwxyz"
    $vowels = "aeiou"
    $numbers = 0..9 | ForEach-Object { "$_" }
    $specialChar = "!"
    
    # Eerste karakter is een hoofdletter medeklinker
    $password = (Get-Random -InputObject $consonants.ToCharArray() -Count 1).ToString().ToUpper()
    
    # Vervolgkarakters zijn afwisselend kleine medeklinkers en klinkers
    for ($i = 0; $i -lt 3; $i++) {
        $password += (Get-Random -InputObject $vowels.ToCharArray() -Count 1)
        $password += (Get-Random -InputObject $consonants.ToCharArray() -Count 1)
    }
    
    # Voeg 6 willekeurige cijfers toe
    $password += (Get-Random -InputObject $numbers -Count 6) -join ''
    
    # Voeg het speciale teken toe
    $password += $specialChar
    
    return $password
}

# Lijst om gegenereerde wachtwoorden op te slaan
$generatedPasswords = @()

# Loop door elke UPN en reset het wachtwoord
foreach ($upn in $upnList) {
    try {
        # Zoek de gebruiker op basis van UPN
        $user = Get-ADUser -Filter "UserPrincipalName -eq '$upn'" -Properties UserPrincipalName
        
        if ($user) {
            # Genereer een nieuw wachtwoord met de Generate-RandomPassword functie
            $generatedPassword = Generate-RandomPassword
            
            # Stel het wachtwoord in voor het huidige gebruikersaccount
            Set-ADAccountPassword -Identity $user -Reset -NewPassword (ConvertTo-SecureString -AsPlainText $generatedPassword -Force)
            
            # Voeg het gebruikersaccount en het gegenereerde wachtwoord toe aan de lijst
            $generatedPasswords += [PSCustomObject]@{
                User = $user.UserPrincipalName
                Password = $generatedPassword
            }
            
            Write-Output "Wachtwoord gereset voor: $upn"
        } else {
            Write-Warning "Gebruiker niet gevonden: $upn"
        }
    } catch {
        Write-Error "Fout bij het resetten van wachtwoord voor $upn : $_"
    }
}

# Exporteer de gebruikersaccounts en gegenereerde wachtwoorden naar een CSV-bestand
$DateFolder = (Get-Date).ToString("yyyyMMdd")
$generatedPasswords | Export-Csv -Path "C:\Wachtwoorden-$DateFolder.csv" -NoTypeInformation -Encoding UTF8

Write-Output "Wachtwoorden zijn gereset en geƫxporteerd naar C:\Wachtwoorden-$DateFolder.csv."