
Entiendo que las computadoras unidas a un dominio tienen cuentas de máquina en AD y estas cuentas tienen contraseñas que caducan (aparentemente cada 30 días de forma predeterminada) y esas contraseñas se cambian automáticamente sin intervención del usuario.
Dado que se sabe que esto causa problemas al restaurar instantáneas de máquinas virtuales unidas a un dominio, ¿es posible consultar la computadora unida al dominio o AD para determinar cuándo está programado el próximo cambio de contraseña de la cuenta de la máquina?
Respuesta1
Es posible consultar el dominio para esto; el siguiente script le indicará cuándo se restableció por última vez la contraseña del dominio de una máquina en particular.
'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
(Me encantaría dar crédito por el guión anterior, pero se pasó de persona a persona y se modificó de varias maneras, no tengo idea de dónde vino originalmente)
Guarde esto como algo así como MachinePasswordDate.vbs, al hacer doble clic en el archivo en Windows debería aparecer un cuadro en el que puede ingresar un nombre de máquina, que luego debería consultar el dominio y decirle cuándo se cambió por última vez la contraseña de esa máquina.
Si restaura regularmente instantáneas de máquinas virtuales, puede que valga la pena echar un vistazo a las políticas de seguridad de esas máquinas antes de guardar una imagen. Puede cambiar el intervalo de restablecimiento de contraseña de la máquina hasta 999 días con bastante facilidad, suponiendo que los GPO de su dominio no lo anulen y su política de seguridad permita este tipo de cosas:
Haga clic en Inicio, haga clic en Ejecutar, escriba Gpedit.msc y luego presione ENTRAR.
Expanda Política de computadora local, Configuración de computadora, expanda Configuración de Windows, expanda Configuración de seguridad, expanda Políticas locales y luego expanda Opciones de seguridad.
Configure los siguientes ajustes:
Miembro del dominio: deshabilitar los cambios de contraseña de la cuenta de la máquina (habilitado)
Miembro del dominio: antigüedad máxima de la contraseña de la cuenta de la máquina (999 días)
Controlador de dominio: rechazar cambios de contraseña de cuenta de máquina (habilitado)
Respuesta2
En el DC o en cualquier computadora con RSAT puedes ejecutardsquery computer -name ComputerName -stalepwd x
ComputerName es el nombre de la computadora que desea verificar
x es la cantidad de días desde que se estableció la contraseña por última vez.
Si la contraseña no se ha establecido desde x días, devolverá el nombre y los contenedores de la computadora. Si la contraseña se ha establecido en los últimos x días, no devolverá nada.