public/Get-InactiveAccounts.ps1

function Get-InactiveAccounts {
    
    [cmdletbinding(SupportsShouldProcess=$True)]

    Param(
        [int] $DaysInactive = 30,
        [Parameter(Mandatory)]  
        [ValidateSet('Users','Computers')]
        $Object,
        [switch]
        $Disable
        )

    $domain = (Get-ADDomain).DistinguishedName
    $oucheckname = "_DISABLED"
    $oucheck = [adsi]::Exists("LDAP://OU=$oucheckname,$domain")

    if ($oucheck -eq $false) {
        New-ADOrganizationalUnit -Name _DISABLED
    }

    $DisabledOU = (Get-ADOrganizationalUnit -Filter 'Name -Like "*_DISABLED*"').DistinguishedName

    if ($Object -eq 'Users') {
        
        $InactiveObjects = Search-ADAccount -UsersOnly -AccountInactive -TimeSpan "$DaysInactive.00:00:00" | Where Enabled -eq $true
        $InactiveObjects | Sort-Object LastLogonDate | Select-Object Name,LastLogonDate

        if ($Disable) {

            foreach ($Item in $InactiveObjects) {
            
                Set-ADUser -Identity $Item.DistinguishedName -Description "Account Disabled on $(Get-Date)" -Enabled $false
                Move-ADObject -Identity $Item.DistinguishedName -TargetPath $DisabledOU
                Write-Verbose "Successfully disabled $($Item.Name)"

            }

        }

    }


    if ($Object -eq 'Computers') {
        
        $InactiveObjects = Search-ADAccount -ComputersOnly -AccountInactive -TimeSpan "$DaysInactive.00:00:00"  | Where Enabled -eq $true
        $InactiveObjects | Sort-Object LastLogonDate | Select-Object Name,LastLogonDate

        if ($Disable) {

            foreach ($Item in $InactiveObjects) {
            
                Set-ADComputer -Identity $Item.DistinguishedName -Description "Computer Disabled on $(Get-Date)" -Enabled $false
                Move-ADObject -Identity $Item.DistinguishedName -TargetPath $DisabledOU
                Write-Verbose "Successfully disabled $($Item.Name)"
                

            }

        }

    }


}