Limpiar lista de equipos

22/01/2009 - 17:04 por fmopet | Informe spam
Hola a todos,

Hace poco se me presentado una necesidad, cuando se saca un equipo del
dominio no se elimina de la lista de equipos que se tienen en el
dominio.

Hay alguna forma para la lista de equipos que se registran en
Directorio Activo se actualice cuando se saca un equipo del dominio??

Muchas Gracias!!

Preguntas similare

Leer las respuestas

#1 Fernando Reyes [MS MVP]
23/01/2009 - 08:35 | Informe spam
Éste es un mensaje de varias partes en formato MIME.
=_NextPart_000_004F_01C97D35.92270820

Lo que puedes hacer es sacar un listado de equipos y su última conexión al dominio, de esa manera, deshabilitas las cuentas de los equipos que no se conectan desde hace mucho y pasado un tiempo en el que nadie se queje borrarlas. Otra posibilidad, mejor que esta, es sacar de forma adecuada el equipo del dominio, con un usuario al que se le delegue la capacidad de eliminar estas cuentas.

Este script te permite listar los equipos del dominio, si sus cuentas están habilitadas o no, su propiedad LastLogonTimeStamp y el nombre distinguido. La propiedad LastLogonTimeStamp muestra la última vez que el equipo se conectó, pero actualizándola cada catorce días; es decir, si el valor de esa propiedad es 12/01/2009 y el equipo se está conectando todos los días, no será actualizada esta propiedad hasta el día 26/01/2009. Este es el código del script VBScript:

Const ADS_SCOPE_SUBTREE = 2

Const ADS_UF_ACCOUNTDISABLE = 2

Dim int_UAC
Dim str_Linea

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"


Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = _
"Select Name, distinguishedName, LastLogonTimeStamp,userAccountControl from 'LDAP://" & f_NombreDominio & "' " _
& "Where objectClass='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Dim fso
Set fso = CreateObject("scripting.filesystemobject")
Dim obj_TS

Set obj_TS = fso.CreateTextFile(WScript.Arguments.Named("S"), True)

obj_TS.WriteLine "Nombre" & vbTab & "Habilitado" & vbTab & "LLTS" & vbTab & "distinguishedName"

Do Until objRecordSet.EOF

str_Linea = objRecordSet.Fields("Name").Value & vbTab

int_UAC = objRecordSet.Fields("userAccountControl").Value

If Not(int_UAC And ADS_UF_ACCOUNTDISABLE) Then

str_Linea = str_Linea & "Sí" & vbTab & objRecordSet.Fields("distinguishedName").Value

Else

str_Linea = str_Linea & "No" & vbTab & objRecordSet.Fields("distinguishedName").Value

End If

str_Linea = str_Linea & _
objRecordSet.Fields("distinguishedName").Value & vbTab & _
f_LLTS(objRecordSet.Fields("LastLogonTimeStamp").Value)

obj_TS.WriteLine str_Linea

objRecordSet.MoveNext

Loop

Function f_LLTS(obj_LLTS)

On Error Resume Next
Set objDate = obj_LLTS
If (Err.Number <> 0) Then
On Error GoTo 0
f_LLTS = #1/1/1601 0:1:0#
Else
On Error GoTo 0
lngHigh = objDate.HighPart
lngLow = objDate.LowPart
If (lngLow < 0) Then
lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0 ) Then
f_LLTS = #1/1/1601#
Else
f_LLTS = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
+ lngLow)/600000000 - lngBias)/1440
End If
End If


End Function

Function f_NombreDominio()
'Esta función devuelve el nombre distinguido del dominio en el que se ejecuta

Dim obj_RDSE

'Obtenemos el contexto de configuración del dominio a partir
'del objeto RootDSE
Set obj_RDSE = GetObject("LDAP://RootDSE")
WScript.Echo obj_RDSE.Get("defaultNamingContext")
f_NombreDominio = obj_RDSE.Get("defaultNamingContext")

Set obj_RDSE = Nothing

End Function


Respecto a la forma de delegar el derecho a eliminar objetos del dominio:

Best Practices for Delegating Active Directory Administration (Windows Server 2003)
http://technet.microsoft.com/en-us/...73318.aspx



Un saludo
Fernando Reyes [MS MVP]
MCSE Windows 2000 / 2003
MCSA Windows Server 2003
http://freyes.svetlian.com
http://urpiano.wordpress.com
RSS: http://urpiano.wordpress.com/feed
freyes.champú@champú.mvps.org
(Aclárate la cabeza si quieres escribirme)


"fmopet" escribió en el mensaje de noticias:
Hola a todos,

Hace poco se me presentado una necesidad, cuando se saca un equipo del
dominio no se elimina de la lista de equipos que se tienen en el
dominio.

Hay alguna forma para la lista de equipos que se registran en
Directorio Activo se actualice cuando se saca un equipo del dominio??

Muchas Gracias!!


=_NextPart_000_004F_01C97D35.92270820

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=unicode" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.7000.0"></HEAD>
<BODY style="PADDING-LEFT: 10px; PADDING-RIGHT: 10px; PADDING-TOP: 15px"
id=MailContainerBody leftMargin=0 topMargin=0 CanvasTabStop="true"
name="Compose message area">
<DIV>Lo que puedes hacer es sacar un listado de equipos y su última conexión al
dominio, de esa manera, deshabilitas las cuentas de los equipos que no se
conectan desde hace mucho y pasado un tiempo en el que nadie se queje borrarlas.
Otra posibilidad, mejor que esta, es sacar de forma adecuada&nbsp; el equipo del
dominio, con un usuario al que se le delegue la capacidad de eliminar estas
cuentas.<BR><BR>Este script te permite listar los equipos del dominio, si sus
cuentas están habilitadas o no, su propiedad LastLogonTimeStamp y el nombre
distinguido. La propiedad LastLogonTimeStamp muestra la última vez que el equipo
se conectó, pero actualizándola cada catorce días; es decir, si el valor de esa
propiedad es 12/01/2009 y el equipo se está conectando todos los días, no será
actualizada esta propiedad hasta el día 26/01/2009. Este es el código del script
VBScript:</DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=2 face=Courier>Const ADS_SCOPE_SUBTREE = 2</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Courier>Const ADS_UF_ACCOUNTDISABLE = 2</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Courier>Dim int_UAC<BR>Dim str_Linea</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV>
<DIV><FONT size=2 face=Courier>Set objConnection =
CreateObject("ADODB.Connection")<BR>Set objCommand =&nbsp;&nbsp;
CreateObject("ADODB.Command")<BR>objConnection.Provider =
"ADsDSOObject"<BR>objConnection.Open "Active Directory Provider"</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV><FONT size=2>
<DIV><BR><FONT face=Courier>Set objCOmmand.ActiveConnection =
objConnection<BR>objCommand.CommandText = _<BR>&nbsp;&nbsp;&nbsp; "Select Name,
distinguishedName, LastLogonTimeStamp,userAccountControl from 'LDAP://" &amp;
f_NombreDominio &amp; "' " _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;
"Where objectClass='computer'"&nbsp; <BR>objCommand.Properties("Page Size") =
1000<BR>objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE <BR>Set
objRecordSet = objCommand.Execute<BR>objRecordSet.MoveFirst<BR>Dim fso<BR>Set
fso = CreateObject("scripting.filesystemobject")<BR>Dim obj_TS</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV>
<DIV><FONT face=Courier>Set obj_TS =
fso.CreateTextFile(WScript.Arguments.Named("S"), True)</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV>
<DIV><FONT face=Courier>obj_TS.WriteLine "Nombre" &amp; vbTab &amp; "Habilitado"
&amp; vbTab &amp; "LLTS" &amp; vbTab &amp; "distinguishedName"</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV>
<DIV><FONT face=Courier>Do Until objRecordSet.EOF</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV>
<DIV><FONT face=Courier>&nbsp;&nbsp;&nbsp; str_Linea =
objRecordSet.Fields("Name").Value &amp; vbTab<BR>&nbsp;&nbsp;&nbsp;
<BR>&nbsp;&nbsp;&nbsp; int_UAC =
objRecordSet.Fields("userAccountControl").Value<BR>&nbsp;&nbsp;&nbsp;
<BR>&nbsp;&nbsp;&nbsp; If Not(int_UAC And ADS_UF_ACCOUNTDISABLE)
Then<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
str_Linea = str_Linea &amp; "Sí" &amp; vbTab &amp;
objRecordSet.Fields("distinguishedName").Value<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<BR>&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str_Linea = str_Linea &amp; "No"
&amp; vbTab &amp; objRecordSet.Fields("distinguishedName").Value</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV>
<DIV><FONT face=Courier>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp;
<BR>&nbsp;&nbsp;&nbsp; str_Linea = str_Linea &amp;
_<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
objRecordSet.Fields("distinguishedName").Value &amp; vbTab &amp;
_<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
f_LLTS(objRecordSet.Fields("LastLogonTimeStamp").Value)</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV>
<DIV><FONT face=Courier>&nbsp;&nbsp;&nbsp; obj_TS.WriteLine
str_Linea<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;
objRecordSet.MoveNext<BR>&nbsp;&nbsp;&nbsp; <BR>Loop</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV>
<DIV><FONT face=Courier>Function f_LLTS(obj_LLTS)</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV>
<DIV><FONT face=Courier>&nbsp;&nbsp;&nbsp; On Error Resume
Next<BR>&nbsp;&nbsp;&nbsp; Set objDate = obj_LLTS<BR>&nbsp;&nbsp;&nbsp; If
(Err.Number &lt;&gt; 0) Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; On
Error GoTo 0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f_LLTS = #1/1/1601
0:1:0#<BR>&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
On Error GoTo 0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lngHigh =
objDate.HighPart<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lngLow =
objDate.LowPart<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If (lngLow &lt; 0)
Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
lngHigh = lngHigh + 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End
If<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If (lngHigh = 0) And (lngLow =
0 ) Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
f_LLTS = #1/1/1601#<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
f_LLTS = #1/1/1601# + (((lngHigh * (2 ^ 32))
_<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ lngLow)/600000000 -
lngBias)/1440<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End
If<BR>&nbsp;&nbsp;&nbsp; End If</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV>
<DIV><BR><FONT face=Courier>End Function</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV>
<DIV><FONT face=Courier>Function f_NombreDominio()<BR>'Esta función devuelve el
nombre distinguido del dominio en el que se ejecuta</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV>
<DIV><FONT face=Courier>&nbsp;&nbsp;&nbsp; Dim obj_RDSE<BR>&nbsp;&nbsp;&nbsp;
<BR>&nbsp;&nbsp;&nbsp; 'Obtenemos el contexto de configuración del dominio a
partir<BR>&nbsp;&nbsp;&nbsp; 'del objeto RootDSE<BR>&nbsp;&nbsp;&nbsp; Set
obj_RDSE = GetObject("</FONT><A href="ldap://RootDSE"><FONT
face=Courier>LDAP://RootDSE</FONT></A><FONT
face=Courier>")<BR>&nbsp;&nbsp;&nbsp; WScript.Echo
obj_RDSE.Get("defaultNamingContext")<BR>&nbsp;&nbsp;&nbsp; f_NombreDominio =
obj_RDSE.Get("defaultNamingContext")</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV>
<DIV><FONT face=Courier>&nbsp;Set obj_RDSE = Nothing</FONT></DIV>
<DIV><FONT face=Courier></FONT>&nbsp;</DIV>
<DIV><FONT face=Courier>End Function</FONT></FONT><BR></DIV>
<DIV><FONT size=2 face=Arial></FONT>&nbsp;</DIV>
<DIV>Respecto a la forma de delegar el derecho a eliminar objetos del
dominio:</DIV>
<DIV>&nbsp;</DIV>
<DIV>Best Practices for Delegating Active Directory Administration (Windows
Server 2003)</DIV>
<DIV><FONT size=2 face=Arial><A
title="http://technet.microsoft.com/en-us/...p;#10;CTRL + clic para seguir el vínculo"
href="http://technet.microsoft.com/en-us/...t;>http://technet.microsoft.com/en-us/library/cc773318.aspx</A></FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>-- <BR><BR>Un saludo<BR>Fernando Reyes [MS MVP]<BR>MCSE Windows 2000 /
2003<BR>MCSA Windows Server
2003<BR>http://freyes.svetlian.com<BR>http://urpiano.wordpress.com<BR>RSS:
http://urpiano.wordpress.com/feed&l...mpú@champú.mvps.org<BR>(Aclárate
la cabeza si quieres escribirme)<BR><BR><BR>"fmopet" &lt;&gt;
escribió en el mensaje de
noticias:<BR>&gt;
Hola a todos,<BR>&gt; <BR>&gt; Hace poco se me presentado una necesidad, cuando
se saca un equipo del<BR>&gt; dominio no se elimina de la lista de equipos que
se tienen en el<BR>&gt; dominio.<BR>&gt; <BR>&gt; Hay alguna forma para la lista
de equipos que se registran en<BR>&gt; Directorio Activo se actualice cuando se
saca un equipo del dominio??<BR>&gt; <BR>&gt; Muchas
Gracias!!</DIV></BODY></HTML>

=_NextPart_000_004F_01C97D35.92270820--
Respuesta Responder a este mensaje
#2 Cesar Echeverria C.
19/02/2009 - 19:53 | Informe spam
Fernando trate de ejecutar este script y me genera error en la siguiente linea

Set obj_TS = fso.CreateTextFile(WScript.Arguments.Named("S"), True)

Error: Argumento o llamada de procedimiento no validos
Codigo: 800A0005


Gracias,
Respuesta Responder a este mensaje
#3 Cesar Echeverria C.
20/02/2009 - 00:29 | Informe spam
Gracias Fernando, ya encontre en que parte tenia mi error...
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida