Понадобилось проверить текущее время на всех контроллерах домена. Решил соорудить скрипт., использующий дополнительные командлеты для Active Directory от MS. Буду признателен, если в комментариях подскажут, как сделать список контроллеров домена без дополнительных командлетов.
UPD: Изменил скрипт по совету Васильева Александра. Теперь он не требует командлетов под AD.
Вот что из этого получилось:
$dc=Get-ADObject -LDAPFilter "(objectclass=computer)" -searchbase "ou=domain controllers,dc=holding,dc=com" | sort name
$dc = ([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).domaincontrollers | sort name
$i=0
$array=0..($dc.count-1) | %{
$obj = New-Object psobject
$obj | Add-Member -type noteproperty -name Name -Value $dc[$i].Name
$temp=(gwmi Win32_LocalTime -computer $dc[$i].Name)
$obj | Add-Member -type noteproperty -name Hour -Value $temp.hour
$obj | Add-Member -type noteproperty -name Minute -Value $temp.minute
$obj
$i=$i+1
}
$array | out-file c:\tmp\dc_time.txt
Результатом работы скрипта становится таблица, содержащая в строке имя контроллера и его текущее время. В результате работы скрипта нашлось два контроллера с неправильным часовым поясом и один контроллер, выключенный в прошлом году.
P.S. Напоминаю, что рассинхронизацию времени на контроллерах домена можно посмотреть с помощью команды w32tm /monitor
Правда, если контроллеров много, лучше перенаправлять ее вывод в файл, например так – w32tm /monitor >> dc_time.txt
.