1 2 3 4 5 6 7 8 9 | Import-Module ActiveDirectory $lastCheckDays = 3 $filter = (get-date).AddDays(-$lastCheckDays).ToString("dd/MM/yyyy") get-adcomputer ` -filter "Passwordlastset -gt '$filter'" ` -properties * ` | Select name,passwordlastset,OperatingSystem |
Выполнять лучше на контроллере соответствующего домена
Если требуется собрать и свести в один файл информацию о комьютерах из разных доменов, можно использовать такой скрипт
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | Import-Module ActiveDirectory $tempfile = 'c:\temp\comp.csv.temp' $resultfile = 'c:\temp\comp.csv' function DoDomain($dc) { $lastCheckDays = 30 # Максимум дней с обновления пароля $filter = (get-date).AddDays(-$lastCheckDays).ToString("dd/MM/yyyy") $error.clear() try {Get-ADDomain -server "$dc" | Out-Null } # проверка доступности контроллера catch {"[Error] $dc" } if (!$error){ # если контроллер доступен - понеслась... # Вытаскиваем список живых компов, # экспортируем во временный файл, вырезая заголовки get-adcomputer ` -filter "Passwordlastset -gt '$filter'" ` -server "$dc"` -properties name,CanonicalName,passwordlastset,OperatingSystem ` | Select name,CanonicalName,passwordlastset,OperatingSystem ` | ConvertTo-Csv -NoTypeInformation ` | Select-Object -Skip 1 ` | Out-File "$tempfile" #импортируем временный файл с другими заголовками, $tmp = Import-Csv -Header Name,Domain,Date,OS $tempfile # из поля с указанием домена и OU компьютера вырезаем все кроме домена # для удобства фильтрации по домену например в экселе $tmp | ForEach-Object {$_.Domain = [regex]::replace($_.Domain,'/.*','') } # выбираем добавлять ли заголовок во временный файл. # Добавляем, если результирующий файл еще не был создан и, следовательно # это первый обработанный домен. Записываем временный файл if (Test-Path "$resultfile") { $tmp | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Out-File "$tempfile" } else { $tmp | ConvertTo-Csv -NoTypeInformation | Out-File "$tempfile" } # Добавляем временный файл в конец результирующего [System.IO.File]::ReadAllText("$tempfile") | Out-File "$resultfile" -Append # пробегаемся по результирующему файлу, удаляя пустые строки # (опять же важно для экселя, чтобы первую строку сделать фильром) [System.IO.File]::ReadAllText("$resultfile") -replace '\s+\r\n+', "`r`n" | Out-File "$resultfile" Remove-Item "$tempfile" } } Remove-Item "$resultfile" DoDomain("dc.domain1.local") DoDomain("dc.domain2.local") DoDomain("dc.domain3.local") |
Важно! На контроллерах доменов должна работать служба Active Directory Web Services.
Для контроллеров на Windows 2003, если данная служба не установлена, потребуется установить NET Framework 3.5 SP1, а также патч на фреймворк KB969166 (у микрософта доступен только через общение с саппортом так что выкладываю архив), ну и саму службу
Комментариев нет:
Отправить комментарий