The script below generates a random password that contains at least ONE uppercase/lowercase/number and special character. This may be useful for admin that wishes to generate a temporary or permanent password to user/device that meets password policy requirement.
# Get current password policy from windows AD
$passwordpolicy = Get-ADDefaultDomainPasswordPolicy -Server red929.com
############################################
# Create characters and numeric set(array):
# This creates capital letters A-Z
$UpperCaseSet = (65..90) | foreach{[char]$_}
# This creates lower case letters a-z
$lowerCaseSet = (97..122) | foreach{[char]$_}
# Creates number set (0-9)
$numericSet = (48..57) | foreach{[char]$_}
# Creates special character set (!#$&()* ,etc..)
$SpecialSet = (33..42) | foreach{[char]$_}
# Grab Single unique Count from array. Generated password MUST require at least one value from array.
$UniqueUpperCaseSet = $UpperCaseSet| Get-Random -Count 1
$UniquelowerCaseSet = $lowerCaseSet| Get-Random -Count 1
$UniquenumericSet = $numericSet| Get-Random -Count 1
$UniqueSpecialSet = $SpecialSet| Get-Random -Count 1
################################################
# General pool of characters
$charset = $UpperCaseSet + $lowerCaseSet + $numericSet + $SpecialSet
# Unique pool of characters - single count
$UniqueValues = $UniqueUpperCaseSet + $UniquelowerCaseSet + $UniquenumericSet + $UniqueSpecialSet
##################################################
# Mix the general pool and unique pool of characters into an array.
$ArrayPool = ((Get-Random -InputObject $charset -Count $passwordpolicy.MinPasswordLength)) + ($UniqueValues.ToCharArray())
# Then trigger get-random from a pool of limited number of characters
$RandomPassword = -join (get-random -InputObject $ArrayPool -Count $($passwordpolicy.MinPasswordLength + 4))
return $RandomPassword
Results – at least 12 characters containing at least ONE uppercase/lowercase/number and special character

