Last month, i was given a cleanup project to locate all the Disable User account in Active Directory & move them into a specific OU. Below Script was created & it can be referred to accomplish this task.
<#Read Me !!
Script Usage
1. Useful in doing AD Cleanups. Firstly Identying all the disabled ID's.
2. Once identified, moving them from different location in a particular OU.
Note - Based on your environment, specify Destination OU path explicity at the first line of Script.
Also, since we have some Default & System account in AD, so i have excluded them in foreach loop.
(Examples - Krbtgt, Guest, Default account etc)
You will be getting two CSVs post execution. BeforeScriptOutput displays all the Disabled ID's & the DN before any operation.
AfterScriptOutput.csv displays all the ID's that were moved to Disabled OU's
*********************************************************************************#>
$disabledOU_DN = "OU=DisabledUsers,DC=Mari,DC=com" #***Provide DisabledOU DN***#
$userdetails = Get-ADUser -Filter{(Enabled -eq $false)} -Properties Displayname,Enabled,DistinguishedName,CN `
| Select-Object -Property Displayname,Samaccountname,DistinguishedName,@{n="AccountStatus";e={if($($_.Enabled) -eq $true){"Active"}else{"Disabled"}}},CN
$userdetails | Export-Csv ./BeforeScriptOutput.csv -NoTypeInformation
foreach($user in $userdetails)
{
$DN = "CN="+$($user.CN)+","+$($disabledOU_DN)
if(($user.DistinguishedName -eq $DN) -or ($user.Samaccountname -like "krbtgt*") -or ($user.Samaccountname -like "Guest*") -or ($user.Samaccountname -like "DefaultAccount*"))
{
continue
}
else
{
try{
Move-ADObject -Identity $user.DistinguishedName -TargetPath $disabledOU_DN
Write-Host "Moved $($user.Samaccountname)"
Get-ADUser -Identity $user.Samaccountname -Properties Displayname,DistinguishedName,Enabled,LastLogonDate,msDS-UserPasswordExpiryTimeComputed,PasswordExpired,`
Passwordlastset | Select-Object -Property Displayname,Samaccountname,DistinguishedName,@{n="AccountStatus";e={if($($_.Enabled) -eq $true){"Active"}else{"Disabled"}}},`
Passwordlastset,PasswordExpired,@{n="ExpiryDate";e={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}},`
@{n="DaysLeft";e={(New-TimeSpan -Start $(Get-Date) -End $([datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed"))).Days}},`
LastLogonDate | Export-Csv ./AfterScriptOutput.csv -NoTypeInformation -Append
}
catch
{
$user | Select @{n="Displayname";e={$user.Displayname}},@{n="Samaccountname";e={$user.Samaccountname}},@{n="DistinguishedName";e={"Error, unable to move"}}`
,@{n="AccountStatus";e={"NA"}},@{n="Passwordlastset";e={"NA"}},@{n="PasswordExpired";e={"NA"}},@{n="ExpiryDate";e={"NA"}},@{n="DaysLeft";e={"NA"}},@{n="LastLogonDate";e={"NA"}} `
| Export-Csv ./AfterScriptOutput.csv -NoTypeInformation -Append
}
}
}