Назад | Перейти на главную страницу

Когда учетная запись компьютера домена должна изменить пароль?

Я понимаю, что компьютеры, присоединенные к домену, имеют учетные записи компьютеров в AD, и у этих учетных записей есть пароли, срок действия которых истекает (по-видимому, каждые 30 дней по умолчанию), и эти пароли автоматически меняются без вмешательства пользователя.

Учитывая, что это, как известно, вызывает проблемы при восстановлении моментальных снимков виртуальных машин, присоединенных к домену, можно ли запросить подключенный к домену компьютер или AD, чтобы определить, когда в следующий раз планируется изменить пароль учетной записи компьютера?

Для этого можно запросить домен, сценарий ниже сообщит вам, когда пароль домена конкретной машины был в последний раз сброшен.

'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 дней, если объект групповой политики вашего домена не будет его отменять, а ваша политика безопасности допускает такие вещи:

Нажмите кнопку Пуск, выберите команду Выполнить, введите Gpedit.msc и нажмите клавишу ВВОД.

Разверните Политика локального компьютера, Конфигурация компьютера, разверните Параметры Windows, разверните Параметры безопасности, разверните Локальные политики, а затем разверните Параметры безопасности.

Настройте следующие параметры:

  • Член домена: отключить изменение пароля учетной записи компьютера (включено)

  • Член домена: Максимальный срок действия пароля учетной записи компьютера (999 дней)

  • Контроллер домена: отказать в изменении пароля учетной записи компьютера (включено)

На DC или любом компьютере с RSAT вы можете запустить dsquery computer -name ComputerName -stalepwd x

ComputerName - это имя компьютера, который вы хотите проверить.
x - количество дней с момента последней установки пароля.

Если пароль не был установлен с x дней, он вернет имя и контейнеры компьютера. Если пароль был установлен в течение последних x дней, он ничего не вернет.