LabSetup/AdminPC/Add-RandomUser.ps1
|
<#
.SYNOPSIS Creates a random Active Directory user using ADSI. .EXAMPLE .\Add-RandomUser.ps1 -Domain "corp.local" -TargetOU "OU=TestUsers,DC=corp,DC=local" .EXAMPLE .\Add-RandomUser.ps1 -Enabled #> [CmdletBinding()] param( [string]$Domain, [string]$TargetOU, [string]$Password = ( -join ((48..57) + (65..90) + (97..122) + (33, 35, 36, 37, 38, 42, 43, 45, 63) | Get-Random -Count 20 | ForEach-Object { [char]$_ }) ), [switch]$Enabled ) $ErrorActionPreference = 'Stop' # Get the current domain root. $rootDse = [ADSI]"LDAP://RootDSE" $defaultNamingContext = $rootDse.defaultNamingContext.Value if (-not $Domain) { $Domain = ($defaultNamingContext -split ',' | Where-Object { $_ -like 'DC=*' } | ForEach-Object { $_.Substring(3) }) -join '.' } if (-not $TargetOU) { $TargetOU = "CN=Users,$defaultNamingContext" } # Open the target container. try { $container = [ADSI]"LDAP://$TargetOU" $null = $container.psbase.NativeObject } catch { throw "Target container is unreachable or does not exist: $TargetOU" } $FirstNames = @( 'Max', 'Anna', 'Lukas', 'Emma', 'Felix', 'Mia', 'Jonas', 'Lena', 'Paul', 'Sophie', 'Noah', 'Marie', 'Elias', 'Clara', 'Leon', 'Hanna' ) $LastNames = @( 'Mueller', 'Schmidt', 'Weber', 'Wagner', 'Becker', 'Hoffmann', 'Schaefer', 'Koch', 'Richter', 'Klein', 'Wolf', 'Neumann' ) $firstName = Get-Random -InputObject $FirstNames $lastName = Get-Random -InputObject $LastNames $displayName = "$firstName $lastName" # Generate a unique SamAccountName. do { $suffix = Get-Random -Minimum 1000 -Maximum 9999 $samAccountName = ("{0}.{1}{2}" -f $firstName, $lastName, $suffix).ToLower() $samAccountName = $samAccountName.Substring(0, [Math]::Min(20, $samAccountName.Length)) $searcher = New-Object System.DirectoryServices.DirectorySearcher $searcher.Filter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=$samAccountName))" $searcher.SearchRoot = [ADSI]"LDAP://$defaultNamingContext" $existing = $searcher.FindOne() } while ($existing) $upn = "$samAccountName@$Domain" # Create the user object. $user = $container.Create('user', "CN=$displayName") $user.Put('sAMAccountName', $samAccountName) $user.Put('userPrincipalName', $upn) $user.Put('givenName', $firstName) $user.Put('sn', $lastName) $user.Put('displayName', $displayName) $user.Put('description', 'Automatically created test user') # Create the user as disabled. $user.Put('userAccountControl', 514) # 512 = enabled, 514 = disabled $user.SetInfo() # Set the password. $user.SetPassword($Password) # Optionally enable the user. if ($Enabled) { $user.Put('userAccountControl', 512) $user.SetInfo() } [PSCustomObject]@{ DistinguishedName = $user.distinguishedName.Value DisplayName = $displayName SamAccountName = $samAccountName UserPrincipalName = $upn Enabled = $Enabled.IsPresent InitialPassword = $Password } |