Active Directory automation scripts practical, ready-to-use examples
Active Directory (AD) automation scripts are typically written in PowerShell, since it integrates deeply with Windows Server and AD services. These scripts help automate repetitive admin tasks like user creation, group management, password resets, and reporting.
Before running any script: Make sure you are steps mentioned in below Link.
1.Import AD Module
Script:
Import-Module ActiveDirectory
Import-Module ActiveDirectory
2.Create Users in Bulk (from CSV)
CSV format (
users.csv)Name,GivenName,Surname,SamAccountName,UserPrincipalName,OU
John Doe,John,Doe,jdoe,jdoe@domain.com,"OU=Users,DC=domain,DC=com"
Script:
Import-Csv "C:\users.csv" | ForEach-Object {
New-ADUser `
-Name $_.Name `
-GivenName $_.GivenName `
-Surname $_.Surname `
-SamAccountName $_.SamAccountName `
-UserPrincipalName $_.UserPrincipalName `
-Path $_.OU `
-AccountPassword (ConvertTo-SecureString "P@ssw0rd123" -AsPlainText -Force) `
-Enabled $true
}
3.Reset Password for All Users in an OU
Script:
Get-ADUser -Filter * -SearchBase "OU=Users,DC=domain,DC=com" | ForEach-Object {
Set-ADAccountPassword -Identity $_ -Reset `
-NewPassword (ConvertTo-SecureString "NewP@ss123" -AsPlainText -Force)
}
4.Disable Inactive Users (e.g., 90 days)
Script:
$days = 90
$date = (Get-Date).AddDays(-$days)
Search-ADAccount -AccountInactive -UsersOnly -TimeSpan "$days.00:00:00" |
Disable-ADAccount
5.Add Users to Groups Automatically
Script:
Import-Csv "C:\groupusers.csv" | ForEach-Object {
Add-ADGroupMember -Identity $_.Group -Members $_.User
}
6.Export AD Users Report
Script:
Get-ADUser -Filter * -Property DisplayName,EmailAddress,LastLogonDate |
Select-Object DisplayName,EmailAddress,LastLogonDate |
Export-Csv "C:\ADUsersReport.csv" -NoTypeInformation
7.Unlock Locked Accounts
Script:
Search-ADAccount -LockedOut | Unlock-ADAccount
8.Move Users Between OUs
Script:
Get-ADUser -Filter * -SearchBase "OU=OldOU,DC=domain,DC=com" | ForEach-Object {
Move-ADObject -Identity $_.DistinguishedName `
-TargetPath "OU=NewOU,DC=domain,DC=com"
}
9.Find Expired User Accounts
Script:
Search-ADAccount -AccountExpired -UsersOnly |
Select Name,AccountExpirationDate
10.Set Account Expiry Date for Users
Script:
Get-ADUser -Filter * -SearchBase "OU=TempUsers,DC=domain,DC=com" | ForEach-Object {
Set-ADUser $_ -AccountExpirationDate (Get-Date).AddDays(30)
}
11.Remove Users from a Group (Bulk)
Script:
Import-Csv "C:\removeusers.csv" | ForEach-Object {
Remove-ADGroupMember -Identity $_.Group -Members $_.User -Confirm:$false
}
12.Get Users with Password Never Expires
Script:
Get-ADUser -Filter {PasswordNeverExpires -eq $true} -Properties PasswordNeverExpires |
Select Name,SamAccountName
13.Enable All Disabled Users in an OU
Script:
Search-ADAccount -AccountDisabled -UsersOnly -SearchBase "OU=Users,DC=domain,DC=com" |
Enable-ADAccount
14.Find Users Without Manager Assigned
Script:
Get-ADUser -Filter * -Properties Manager |
Where-Object { -not $_.Manager } |
Select Name,SamAccountName
15.Export Group Members to CSV
Script:
Get-ADGroupMember -Identity "HR Team" |
Select Name,SamAccountName |
Export-Csv "C:\HRTeamMembers.csv" -NoTypeInformation
16.Delete Inactive Computer Accounts (e.g., 60 days)
Script:
$days = 60
$time = (Get-Date).AddDays(-$days)
Get-ADComputer -Filter {LastLogonDate -lt $time} -Properties LastLogonDate |
Remove-ADComputer -Confirm:$false
17.Get Locked-Out User Details(Very Useful)
Script:
Search-ADAccount -LockedOut |
Select Name,SamAccountName,LastLogonDate
18.Get All Users in a Specific Group
Script:
Get-ADGroupMember -Identity "Domain Admins" | Select Name,SamAccountName
19.Find Empty AD Groups
Script:
Get-ADGroup -Filter * | Where-Object {
(Get-ADGroupMember $_.DistinguishedName -ErrorAction SilentlyContinue).Count -eq 0
} | Select Name
20.List Users Created in Last 7 Days
Script:
$days = 7
Get-ADUser -Filter * -Properties WhenCreated |
Where-Object { $_.WhenCreated -ge (Get-Date).AddDays(-$days) } |
Select Name,WhenCreated
21.Force Password Change at Next Logon
Script:
Get-ADUser -Filter * -SearchBase "OU=Users,DC=domain,DC=com" |
Set-ADUser -ChangePasswordAtLogon $true
22.Get All Computers in AD
Script:
Get-ADComputer -Filter * | Select Name,OperatingSystem
23.Find Computers Not Logged In (90 days)
Script:
$days = 90
Get-ADComputer -Filter * -Properties LastLogonDate |
Where-Object { $_.LastLogonDate -lt (Get-Date).AddDays(-$days) } |
Select Name,LastLogonDate
24.Add Description to All Users
Script:
Get-ADUser -Filter * | ForEach-Object {
Set-ADUser $_ -Description "Company Employee"
}
25.Rename AD User
Script:
Rename-ADObject -Identity "CN=OldName,OU=Users,DC=domain,DC=com" -NewName "NewName"
26.Get Users by Department
Script:
Get-ADUser -Filter {Department -eq "IT"} -Properties Department |
Select Name,Department
27.Update User Department (Bulk)
Script:
Import-Csv "C:\dept.csv" | ForEach-Object {
Set-ADUser $_.User -Department $_.Department
}
28.Find Duplicate User Names
Script:
Get-ADUser -Filter * | Group-Object Name | Where-Object { $_.Count -gt 1 }
29.Get Disabled Computers
Script:
Search-ADAccount -AccountDisabled -ComputersOnly | Select Name
30.Enable Computer Accounts
Script:
Search-ADAccount -AccountDisabled -ComputersOnly | Enable-ADAccount
31.List All OUs
Script:
Get-ADOrganizationalUnit -Filter * | Select Name,DistinguishedName
32.Create New OU
Script:
New-ADOrganizationalUnit -Name "NewOU" -Path "DC=domain,DC=com"
33.Delete Empty OUs
Script:
Get-ADOrganizationalUnit -Filter * | Where-Object {
(Get-ADObject -Filter * -SearchBase $_.DistinguishedName).Count -le 1
} | Remove-ADOrganizationalUnit -Confirm:$false
34.Get Users Without Email Address
Script:
Get-ADUser -Filter * -Properties EmailAddress |
Where-Object { -not $_.EmailAddress } |
Select Name
35.Set Email Address (Bulk)
Script:
Import-Csv "C:\emails.csv" | ForEach-Object {
Set-ADUser $_.User -EmailAddress $_.Email
}
36.Find Users with Expired Passwords
Script:
Search-ADAccount -PasswordExpired | Select Name
37.Get Last Logon of Specific User
Script:
Get-ADUser username -Properties LastLogonDate | Select Name,LastLogonDate
38.Add Users to OU Based on CSV
Script:
Import-Csv "C:\moveusers.csv" | ForEach-Object {
Move-ADObject -Identity $_.UserDN -TargetPath $_.TargetOU
}
39.Get Domain Controllers
Script:
Get-ADDomainController -Filter * | Select HostName,Site
40.Restart Remote Computer (from AD list)
Script:
Get-ADComputer -Filter * | ForEach-Object {
Restart-Computer -ComputerName $_.Name -Force
}
41.Find Stale Passwords (Not Changed in 180 Days)
Script:
$days = 180
Get-ADUser -Filter * -Properties PasswordLastSet |
Where-Object { $_.PasswordLastSet -lt (Get-Date).AddDays(-$days) } |
Select Name,PasswordLastSet
42.Get Group Membership of User
Script:
Get-ADUser username -Properties MemberOf | Select -ExpandProperty MemberOf
43.Copy Group Membership from One User to Another
Script:
$source = "user1"
$target = "user2"
Get-ADUser $source -Properties MemberOf | Select -Expand MemberOf | ForEach-Object {
Add-ADGroupMember -Identity $_ -Members $target
}
44.Remove All Group Memberships from User
Script:
Get-ADPrincipalGroupMembership username | Where-Object { $_.Name -ne "Domain Users" } |
ForEach-Object {
Remove-ADGroupMember -Identity $_ -Members username -Confirm:$false
}
45.Get GPO List
Script:
Get-GPO -All | Select DisplayName
46.Backup All GPOs
Script:
Backup-GPO -All -Path "C:\GPOBackup"
47.Find Users Logged On to Computer
Script:
Get-WmiObject -Class Win32_ComputerSystem -ComputerName PC1 | Select Username
48.Check AD Replication Status
Script:
Get-ADReplicationPartnerMetadata -Target * | Select Server,LastReplicationSuccess
49.Get FSMO Roles
Script:
Get-ADDomain | Select InfrastructureMaster,RIDMaster,PDCEmulator
Get-ADForest | Select SchemaMaster,DomainNamingMaster
50.List All Service Accounts
Script:
Get-ADUser -Filter {ServicePrincipalName -like "*"} -Properties ServicePrincipalName |
Select Name,ServicePrincipalName
Important Tips:
- Always test scripts in a lab before production.
- Use -WhatIf to simulate actions:
Disable-ADAccount -Identity user1 -WhatIf
- Use logging:
Script:
Start-Transcript -Path "C:\log.txt"

Comments
Post a Comment