1) Поиск мертвых компьютеров, на которые не логинилсись более года. По маске рабочих станций например "WKS". Ищем на разных контроллерах домена, для сравнения:
Connect-QADService -Service 'DC1.corp.local'
$date_with_offset= (Get-Date).AddDays(-360)
Get-ADComputer -Properties LastLogonDate -Filter {LastLogonDate -lt $date_with_offset -and Name -Like "*wks*" -and enabled -eq $true} | Sort LastLogonDate | FT Name -AutoSize | Out-File C:\posh\inactive_DC1.txt
Connect-QADService -Service 'DC2.corp.local'
$date_with_offset= (Get-Date).AddDays(-360)
Get-ADComputer -Properties LastLogonDate -Filter {LastLogonDate -lt $date_with_offset -and Name -Like "*wks*"
-and enabled -eq $true} | Sort LastLogonDate | FT Name -AutoSize | Out-File C:\posh\inactive_dc2.txt
2) Удаляем пробелы из текстового файла:
Get-Content C:\posh\inactive_DC1.txt | foreach-object {$_ -replace " "} > C:\posh\inactive_DC1_____.txt
3) Перемещаем объекты:
$PCs = gc "C:\posh\inactive_DC1_____.txt"
$TargetOU = "OU=Disable_Workstations,DC=corp,DC=local"
foreach ($PC in $PCs) {
Get-ADComputer -Identity $PC | Move-ADObject -TargetPath $TargetOU
}
4) Проверяем еще раз OU=Disable_Workstations, отключаем станции:
$PCs = gc "C:\posh\inactive_DC1_____.txt"
$TargetOU = "OU=Disable_Workstations,DC=corp,DC=local"
foreach ($PC in $PCs) {
Get-ADComputer -Identity $PC | Disable-ADAccount
}
Почему скрипт не единым целым массивом? Есть необходимость контролировать каждый шаг.