
Насколько я понимаю, у компьютеров, подключенных к домену, есть учетные записи компьютеров в AD, и эти учетные записи имеют пароли, срок действия которых истекает (очевидно, каждые 30 дней по умолчанию), и эти пароли автоматически меняются без вмешательства пользователя.
Учитывая, что это, как известно, вызывает проблемы при восстановлении снимков виртуальных машин, присоединенных к домену, можно ли отправить запрос на присоединенный к домену компьютер или AD, чтобы определить, когда запланировано следующее изменение пароля учетной записи машины?
решение1
Для этого можно сделать запрос к домену, скрипт ниже сообщит вам, когда в последний раз был сброшен пароль домена конкретного компьютера.
'Replace "yourdom.com" with your domain name.
DomainName = "yourdom.com"
querymachine = UCase(inputbox("Enter full machine name"))
lngBias = 2
'****************Setup Log file******************************************************
Set fso = CreateObject("Scripting.FileSystemObject")
'The 8 in this line will append to an existing file, replace with a 2 to override
set txtStream = fso.OpenTextFile("System.txt", 8, True)
txtStream.WriteLine "Ran on " & Date & " *******************************"
'****************Setup ADSI connection and populate ADSI Collection******************
Set objADOconnADSI = CreateObject("ADODB.Connection")
objADOconnADSI.Open "Provider=ADsDSOObject;"
Set objCommandADSI = CreateObject("ADODB.Command")
objCommandADSI.ActiveConnection = objADOconnADSI
'there is a 1000 object default if these next 2 lines are omited.
objCommandADSI.Properties("Size Limit")= 100000
objCommandADSI.Properties("Page Size")= 100000
objCommandADSI.Properties("Sort on") = "sAMAccountName"
objCommandADSI.CommandText = "<LDAP://" & DomainName & ">;(objectClass=computer);sAMAccountName,pwdLastSet,name,distinguishedname,operatingSystem;subtree"
Set objRSADSI = objCommandADSI.Execute
'Loop through record set and compare machine name*************************************
do while NOT objRSADSI.EOF
if not isnull(objRSADSI.Fields("distinguishedname")) and objRSADSI.Fields("distinguishedname") <> "" then
objDate = objRSADSI.Fields("PwdLastSet")
'Go to function to make sense of the PwdLastSet value from AD for the machine account.
dtmPwdLastSet = Integer8Date(objDate, lngBias)
'calculate the current age of the password.
DiffADate = DateDiff("d", dtmPwdLastSet, Now)
'Is the machine the one we're looking for?
if UCase(objRSADSI.Fields("name")) = querymachine then
txtStream.WriteLine objRSADSI.Fields("name") & ";" & dtmPwdLastSet & ";" & DiffADate & ";" & objRSADSI.Fields("operatingSystem")
wscript.echo objRSADSI.Fields("name") & ", Last set: " & dtmPwdLastSet & ", Days since last change: " & DiffADate
end if
end if
objRSADSI.MoveNext
loop
wscript.echo "Done!"
Function Integer8Date(objDate, lngBias)
' Function to convert Integer8 (64-bit) value to a date, adjusted for
' local time zone bias.
Dim lngAdjust, lngDate, lngHigh, lngLow
lngAdjust = lngBias
lngHigh = objDate.HighPart
lngLow = objdate.LowPart
' Account for bug in IADslargeInteger property methods.
If lngLow < 0 Then
lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0) Then
lngAdjust = 0
End If
lngDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
+ lngLow) / 600000000 - lngAdjust) / 1440
Integer8Date = CDate(lngDate)
End Function
(Я бы с удовольствием указал авторство приведенного выше сценария, но он передавался из рук в руки и подвергался различным изменениям, так что я понятия не имею, откуда он изначально взялся)
Сохраните его как-то вроде MachinePasswordDate.vbs. Двойной щелчок по файлу в Windows должен открыть всплывающее окно, в которое можно ввести имя машины, после чего она должна будет запросить домен и сообщить, когда пароль этой машины был изменен в последний раз.
Если вы регулярно восстанавливаете снимки виртуальных машин, возможно, стоит взглянуть на политики безопасности на этих машинах, прежде чем сохранять образ. Вы можете довольно легко изменить интервал сброса пароля машины до 999 дней, предполагая, что ваши доменные GPO не будут его переопределять, а ваша политика безопасности позволяет делать такие вещи:
Нажмите «Пуск», выберите «Выполнить», введите Gpedit.msc и нажмите клавишу ENTER.
Разверните Политику локального компьютера, Конфигурацию компьютера, разверните Параметры Windows, разверните Параметры безопасности, разверните Локальные политики, а затем разверните Параметры безопасности.
Настройте следующие параметры:
Участник домена: отключить изменение пароля учетной записи компьютера (включено)
Участник домена: максимальный срок действия пароля учетной записи компьютера (999 дней)
Контроллер домена: Отклонить изменение пароля учетной записи компьютера (Включено)
решение2
На DC или любом компьютере с RSAT вы можете запуститьdsquery computer -name ComputerName -stalepwd x
ComputerName — имя компьютера, который вы хотите проверить,
x — количество дней с момента последней установки пароля.
Если пароль не был установлен в течение x дней, он вернет имя и контейнеры компьютера. Если пароль был установлен в течение последних x дней, он не вернет ничего.