域计算机账户什么时候需要更改密码?

域计算机账户什么时候需要更改密码?

我知道加入域的计算机在 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 天内设置了密码,它将不返回任何内容。

相关内容