Scripts/Disable-StaleAccounts.ps1

Import-Module ActiveDirectory

$SearchBase = Read-Host -Prompt 'Distinguished Name (OU Path in LDAP Format) to Scrub'
# $SearchBase = 'OU=Users,OU=HQ,OU=EvilCorp,DC=sky,DC=net'
$30_Days_Ago = (Get-Date).AddDays(-30)
$Filter = { LastLogonDate -le $30_Days_Ago }

$DomainRoot = $(Get-ADDomain).DistinguishedName
$DisabledUsersOu = "OU=Disabled Users," + $DomainRoot
$DisabledUsersOuExists = (Get-ADOrganizationalUnit -Filter *).DistinguishedName -eq $DisabledUsersOu
if (-not ($DisabledUsersOuExists)) {
    New-ADOrganizationalUnit -Name "Disabled Users" -Path $DomainRoot
}

$VipUsers = (Get-ADGroup -Identity 'VIP Users').Sid

Get-ADUser -Filter $Filter -SearchBase $SearchBase -Properties LastLogonDate,Description | 
Where-Object { $VipUsers -notcontains $_.Sid } |
foreach {
    if ($_.Enabled) {
        Set-ADUser $_.SamAccountName -Description $('Last Login - ' + $_.LastLogonDate)
        Disable-ADAccount $_.SamAccountName
    }

    Move-ADObject -Identity $_.DistinguishedName -TargetPath $DisabledUsersOu
}