Populate and administer Active directory users with Powershell
Some days ago I have been working on some powershell scripts for a lab environment and now i have edited the handlescript to work better and with more functionality.
First i created a small script for populating some OU with student accounts.
# Script: Createusers.ps1
# Create users in AD
# Version: 0.1
# Niklas Akerlund /RTS
Import-Module Activedirectory
$OUs = "OU1","OU2","OU3","OU4","OU5","OU6"
foreach ($OU in $OUs){
$path = "OU=" + $OU + ",OU=lab,OU=Users,DC=demo,DC=local"
for ($i=1;$i -le 10;$i++){
$SAMid = $OU + "Student0" + $i
$Name = $OU + "Student0" + $i
New-ADUser -SamAccountName $SAMid -Name $Name -AccountPassword (ConvertTo-SecureString -AsPlainText "S0meP@ssw0rd" -Force) -Enabled $true -Path $path
}
}
Then i created with help from Jeffery Hicks post a script with a menu to enable or disable accounts in the different OU´s. As i described in a earlier post it is quite powerful to use Active Directory cmdlets and i have tried to take care of that by checking that when i enable/disable accounts i check that i really have something in my searchbase. Below are two screenshots of the script running. Update I have now updated the script with a check for the searchbase that actually works and also an extra menu option with the ability to set password on the accounts i enable!


Here is the script that creates this, i have not yet come up with a better and more dynamic way to create the switch, maybe someone can give me some help there..
# Script: handleusers.ps1
# Version: 0.1
# Disable or enable lab account users
#
# Niklas Akerlund / RTS
# Menu code from Jeffery Hicks
Import-Module ActiveDirectory
Function Show-Menu {
Param(
[Parameter(Position=0,Mandatory=$True,HelpMessage="Enter your menu text")]
[ValidateNotNullOrEmpty()]
[string]$Menu,
[Parameter(Position=1)]
[ValidateNotNullOrEmpty()]
[string]$Title="Menu",
[switch]$ClearScreen
)
if ($ClearScreen) {Clear-Host}
#build the menu prompt
$menuPrompt=$title
#add a return
$menuprompt+="<code>n"
#add an underline
$menuprompt+="-"*$title.Length
$menuprompt+="</code>n"
#add the menu
$menuPrompt+=$menu
Read-Host -Prompt $menuprompt
} #end function
$menu="<code>n"
$ListOU = Get-ADOrganizationalUnit -filter * -Searchbase "OU=lab,OU=Users,DC=demo,DC=local" | where {$_.Name -ne "lab"} | Sort-Object $_.Name
$i = 1
foreach ($OU in $ListOU){
$menu+= [string]$i + " " + $OU.Name + "</code>n"
# write-host $menu
$i = $i+1
}
$menu+= "Q Quit"
$menu+= "<code>n"
# Menu 2
$menu2=@"
1 Disable accounts
2 Enable accounts
3 Set password and enable accounts
B Back to menu
"@
$menu2+= "</code>n"
#Keep looping and running the menu until the user selects Q (or q).
Do {
#use a Switch construct to take action depending on what menu choice
#is selected.
Switch (Show-Menu $menu "Get OU to handle" -clear ) {
"1" {
if ($ListOU[0].DistinguishedName -ne $null){
$menutext = "Handle " + $ListOU[0].Name + " users to disable/enable "
$Users = Get-ADUser -filter * -searchbase $ListOU[0].DistinguishedName
Switch (Show-Menu $menu2 $menutext -clear ) {
"1" {
$Users | Set-ADUser -Enabled $false
}
"2" {
$Users | Set-ADUser -Enabled $true
}
"3" {
$newPassword = (Read-Host -Prompt "Provide New Password" -AsSecureString)
$Users | Set-ADUser -Enabled $true
$Users | Set-ADAccountPassword -NewPassword $newPassword -Reset
}
"B" {
Write-Host "Back to menu" -ForegroundColor Cyan
}
Default {Write-Warning "Invalid Choice. Try again."
sleep -milliseconds 750}
}
}
}
"2" {
if ($ListOU[1].DistinguishedName -ne $null){
$menutext = "Handle " + $ListOU[1].Name + " users to disable/enable "
$Users = Get-ADUser -filter * -searchbase $ListOU[1].DistinguishedName
Switch (Show-Menu $menu2 $menutext -clear ) {
"1" {
$Users | Set-ADUser -Enabled $false
}
"2" {
$Users | Set-ADUser -Enabled $true
}
"3" {
$newPassword = (Read-Host -Prompt "Provide New Password" -AsSecureString)
$Users | Set-ADUser -Enabled $true
$Users | Set-ADAccountPassword -NewPassword $newPassword -Reset
}
"B" {
Write-Host "Back to menu" -ForegroundColor Cyan
}
Default {Write-Warning "Invalid Choice. Try again."
sleep -milliseconds 750}
}
}
}
"3" {
if ($ListOU[2].DistinguishedName -ne $null){
$menutext = "Handle " + $ListOU[2].Name + " users to disable/enable "
$Users = Get-ADUser -filter * -searchbase $ListOU[2].DistinguishedName
Switch (Show-Menu $menu2 $menutext -clear ) {
"1" {
$Users | Set-ADUser -Enabled $false
}
"2" {
$Users | Set-ADUser -Enabled $true
}
"3" {
$newPassword = (Read-Host -Prompt "Provide New Password" -AsSecureString)
$Users | Set-ADUser -Enabled $true
$Users | Set-ADAccountPassword -NewPassword $newPassword -Reset
}
"B" {
Write-Host "Back to menu" -ForegroundColor Cyan
}
Default {Write-Warning "Invalid Choice. Try again."
sleep -milliseconds 750}
}
}
}
"4" {
if ($ListOU[3].DistinguishedName -ne $null){
$menutext = "Handle " + $ListOU[3].Name + " users to disable/enable "
$Users = Get-ADUser -filter * -searchbase $ListOU[3].DistinguishedName
Switch (Show-Menu $menu2 $menutext -clear ) {
"1" {
$Users | Set-ADUser -Enabled $false
}
"2" {
$Users | Set-ADUser -Enabled $true
}
"3" {
$newPassword = (Read-Host -Prompt "Provide New Password" -AsSecureString)
$Users | Set-ADUser -Enabled $true
$Users | Set-ADAccountPassword -NewPassword $newPassword -Reset
}
"B" {
Write-Host "Back to menu" -ForegroundColor Cyan
}
Default {Write-Warning "Invalid Choice. Try again."
sleep -milliseconds 750}
}
}
}
"5" {
if ($ListOU[4].DistinguishedName -ne $null){
$menutext = "Handle " + $ListOU[4].Name + " users to disable/enable "
$Users = Get-ADUser -filter * -searchbase $ListOU[4].DistinguishedName
Switch (Show-Menu $menu2 $menutext -clear ) {
"1" {
$Users | Set-ADUser -Enabled $false
}
"2" {
$Users | Set-ADUser -Enabled $true
}
"3" {
$newPassword = (Read-Host -Prompt "Provide New Password" -AsSecureString)
$Users | Set-ADUser -Enabled $true
$Users | Set-ADAccountPassword -NewPassword $newPassword -Reset
}
"B" {
Write-Host "Back to menu" -ForegroundColor Cyan
}
Default {Write-Warning "Invalid Choice. Try again."
sleep -milliseconds 750}
}
}
}
"6" {
if ($ListOU[5].DistinguishedName -ne $null){
$menutext = "Handle " + $ListOU[5].Name + " users to disable/enable "
$Users = Get-ADUser -filter * -searchbase $ListOU[5].DistinguishedNam
Switch (Show-Menu $menu2 $menutext -clear ) {
"1" {
$Users | Set-ADUser -Enabled $false
}
"2" {
$Users | Set-ADUser -Enabled $true
}
"3" {
$newPassword = (Read-Host -Prompt "Provide New Password" -AsSecureString)
$Users | Set-ADUser -Enabled $true
$Users | Set-ADAccountPassword -NewPassword $newPassword -Reset
}
"B" {
Write-Host "Back to menu" -ForegroundColor Cyan
}
Default {Write-Warning "Invalid Choice. Try again."
sleep -milliseconds 750}
}
}
}
"Q" {Write-Host "Goodbye" -ForegroundColor Cyan
Return
}
Default {Write-Warning "Invalid Choice. Try again."
sleep -milliseconds 750}
} #switch
} While ($True)