Encontre usuários do AD que ficaram inativos por mais de 90 dias e que não foram criados nos últimos 90 dias

0

Estou trabalhando em um script de limpeza do AD, mas estou tendo problemas para fazer com que ele funcione corretamente. Os parâmetros que estou tentando encontrar são: O usuário não efetuou login nos últimos 90 dias e foi criado antes de 90 dias atrás. O problema é que ele está recebendo usuários que foram criados nos últimos 90 dias. Aqui está o script em que estou trabalhando:

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
}

Quando o script funcionar corretamente, adicionarei as seguintes linhas abaixo de $ CSV_USERS = $ CSV_USERS + $ USERS

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

Alguém pode me ajudar a descobrir por que os parâmetros "| Where" não estão funcionando para mim?

    
por Greg 05.01.2017 / 21:30

2 respostas

2

Acho que você está tornando isso um pouco mais complicado do que precisa ser. Não há necessidade de um loop para encontrar seus usuários. Abrace o poder do 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

Apenas tome cuidado com as armadilhas de usar LastLogonDate . O valor só é atualizado para qualquer usuário a cada 12 dias ou mais: link

    
por 06.01.2017 / 15:52
0

Não foi testado, mas isso deve motivá-lo.

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
}
    
por 06.01.2017 / 15:38