Я работаю над сценарием очистки 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"

Может ли кто-нибудь помочь мне выяснить, почему параметры «| Где» не работают для меня?

2 ответа2

2

Я думаю, вы делаете это немного сложнее, чем нужно. Нет необходимости в цикле 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

Просто остерегайтесь ловушек использования LastLogonDate. Значение обновляется только для любого данного пользователя каждые 12 дней или около того: http://windowsitpro.com/systems-management/use-get-aduser-find-inactive-ad-users

0

Не проверено, но это должно заставить вас двигаться.

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
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .