查找超过 90 天处于不活动状态且在过去 90 天内未创建的 AD 用户

查找超过 90 天处于不活动状态且在过去 90 天内未创建的 AD 用户

我正在编写 AD 清理脚本,但无法使其正常工作。我试图满足的参数是用户在过去 90 天内未登录并且是在 90 天前创建的。问题是它获取的是过去 90 天内创建的用户。这是我正在编写的脚本:

Import-Module ActiveDirectory

$OU="ou=Users,ou=middle,ou=top,dc=contoso,dc=com"


$CSV_USERS=""


foreach ($x in $OU) {
$USERS=Search-ADAccount -AccountInactive -Timespan 90.00:00:00 -Searchbase $x | Where {$_.whenCreated -le ((Get-Date).AddDays(-90).toFileTime())}



if ($USERS) {
  $CSV_USERS=$CSV_USERS + $USERS
}
}

$date=Get-Date -Format "dMy"
$path="C:\Scripts\TestScript_disable_users_"+$date+".csv"
if($CSV_USERS) {
    Out-File -FilePath $path -InputObject $CSV_USERS
}

一旦脚本正常运行,我将在 $CSV_USERS=$CSV_USERS + $USERS 下添加以下几行

$USERS | Disable-AdAccount 
$USERS | Move-AdObject -TargetPath "OU=Inactive employees,dc=contoso,dc=com"

有人能帮我找出为什么“| Where”参数对我不起作用吗?

答案1

我认为你把这件事搞得比实际更复杂了。不需要 for 循环来查找你的用户。拥抱 PowerShell 的力量吧!

Import-Module Active Directory

$thresholdDate = (get-date).AddDays(-90)

$oldUsers = get-aduser -filter * -searchbase "ou=Users,ou=middle,ou=top,dc=contoso,dc=com" -properties whenCreated,LastLogonDate | 
where {$_.whenCreated -lt $thresholdDate -And $_.LastLogonDate -lt $thresholdDate}

$date=Get-Date -Format "dMy"
$path="C:\Scripts\TestScript_disable_users_$date.csv"

$oldUsers | export-CSV -notypeinformation $path

$oldUsers | DisableADAccount

只是要小心使用上次登录日期。该值仅每 12 天左右针对任何给定用户更新一次:http://windowsitpro.com/systems-management/use-get-aduser-find-inactive-ad-users

答案2

尚未测试,但这应该可以让你动起来。

Import-Module ActiveDirectory

$OU="ou=Users,ou=middle,ou=top,dc=contoso,dc=com"


$CSV_USERS=""
$OldUserAccts = ""

foreach ($x in $OU) {
    Search-ADAccount -AccountInactive -Timespan 90.00:00:00 -Searchbase $x | foreach {
        $user = get-aduser $_ -Properties whenCreated
        if ($user.whenCreated -le ((Get-Date).AddDays(-90).toFileTime())) { $oldUSerAccts = $oldUserAccts + $User}
    }            


if ($OldUserAccts) {
  $CSV_USERS=$CSV_USERS + $OldUserAccts
}
}

$date=Get-Date -Format "dMy"
$path="C:\Scripts\TestScript_disable_users_"+$date+".csv"
if($CSV_USERS) {
    Out-File -FilePath $path -InputObject $CSV_USERS
}

相关内容