Script VBScript Para Cambiar La Localización De Uno O Más Equipos En Active Directory
Publicado por urpiano en Martes 10 de Junio de 2008
Este script permite cambiar la propiedad localización de los equipos de Active Directory. Recibe una ruta más nombre de libro de Excel en el que tiene los datos del dominio al que pertenece el equipo, el nombre del equipo y la localización que se le debe establecer.
Permite cambiar la localización a equipos de distintos dominios, por lo que se debe tener en cuenta que para lanzar el script es necesario que el usuario tenga derechos suficientes para realizar estos cambios en todos los dominio en los que se haya de operar (digamos que debe ser administrador de empresa); es decir, el script debería ser lanzado desde una ventana de comandos que hubiera sido abierta con RunAs y la cuenta de un administrador de empresa. El script da la posibilidad de mostrar los resultados por pantalla o volcarlos a un fichero de valores separados por tabuladores.
Sintaxis
cscript [//nologo] localizacion-equipos.vbs /F:fichero [/E] [/L:fichero] [/?]
Siendo
| Etiqueta | Dato | ¿Requerido? | Descripción |
| F | fichero | Sí |
Libro Excel con la primera hoja en la que están los datos distribuidos, según columna, así:
A – Nombre NetBios al que pertenece el equipo. B – Nombre NetBios del equipo. C – Localización que se quiere establecer para ese equipo. |
| E | encabezados | No |
Modificador que si se pasa, considera que la hoja con los datos tiene encabezados, y por tanto no procesará la primera línea; en caso de no pasarse se procesará esta primera línea.
|
| L | fichero | No |
Nombre de fichero de valores separados por tabuladores en el que se guardará el log del proceso.
|
| ? | No |
Muestra la ayuda en línea.
|
Ejemplos:
- Cambia la localización de los equipos listados en el libro de Excel c:morialocalizacion-equipos.xls, empezando desde la línea 1 de la primera hoja:
cscript //nologo localizacion-equipos.vbs /F:c:morialocalizacion-equipos.xls
- Cambia la localización de los equipos listados en el libro de Excel c:morialocalizacion-equipos.xls, empezando desde la línea 2 de la primera hoja (pues la primera contiene encabezados) :
cscript //nologo localizacion-equipos.vbs /F:c:morialocalizacion-equipos.xls /E
- Cambia la localización de los equipos listados en el libro de Excel c:morialocalizacion-equipos.xls, empezando desde la línea 2 de la primera hoja (pues la primera contiene encabezados) . Los resultados del proceso se guardarán en el fichero de valores separado por tabuladores c:morialocalizacion-equipos.tsv:
cscript //nologo localizacion-equipos.vbs /F:c:morialocalizacion-equipos.xls /E /L:c:morialocalizacion-equipos.tsv
Este es el código del script
'*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
'*°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°*
'* localizacion-equipos.vbs *
'* *
'* Este script permite cambiar la propiedad localización de los *
'* equipos de Active Directory. Recibe una ruta más nombre de libro de *
'* Excel en el que tiene los datos del dominio al que pertenece el *
'* equipo, el nombre del equipo y la localización que se le debe *
'* establecer. *
'* Permite cambiar la localización a equipos de distintos dominios, *
'* por lo que se debe tener en cuenta que para lanzar el script es *
'* necesario que el usuario tenga derechos suficientes para realizar *
'* estos cambios en todos los dominio en los que se haya de operar *
'* (digamos que debe ser administrador de empresa); es decir, el *
'* script debería ser lanzado desde una ventana de comandos que *
'* hubiera sido abierta con RunAs y la cuenta de un administrador de *
'* empresa. El script da la posibilidad de mostrar los resultados por *
'* pantalla o volcarlos a un fichero de valores separados por *
'* tabuladores. *
'* *
'* Sintaxis *
'* *
'* cscript [//nologo] localizacion-equipos.vbs /F:fichero [/E] *
'* [/L:fichero] [/?] *
'* *
'* Siendo *
'* *
'* - /F: fichero (Requerido): *
'* Libro Excel con la primera hoja en la que están los datos *
'* distribuidos, según columna, así: *
'* A - Nombre NetBios al que pertenece el equipo. *
'* B - Nombre NetBios del equipo. *
'* C - Localización que se quiere establecer para *
'* ese equipo. *
'* *
'* - /E: encabezados (Opcional): *
'* Modificador que si se pasa, considera que la hoja con los *
'* datos tiene encabezados, y por tanto no procesará la *
'* primera línea; en caso de no pasarse se procesará esta *
'* primera línea. *
'* *
'* - /L: fichero (Opcional): *
'* Nombre de fichero de valores separados por tabuladores en *
'* el que se guardará el log del proceso. *
'* *
'* *
'* Ejemplos: *
'* *
'* - Cambia la localización de los equipos listados en el libro de *
'* Excel c:morialocalizacion-equipos.xls, empezando desde la línea 1 *
'* de la primera hoja: *
'* *
'* cscript //nologo localizacion-equipos.vbs *
'* /F:c:morialocalizacion-equipos.xls *
'* *
'* - Cambia la localización de los equipos listados en el libro de *
'* Excel c:morialocalizacion-equipos.xls, empezando desde la línea 2 *
'* de la primera hoja (pues la primera contiene encabezados) : *
'* *
'* cscript //nologo localizacion-equipos.vbs *
'* /F:c:morialocalizacion-equipos.xls /E *
'* *
'* - Cambia la localización de los equipos listados en el libro de *
'* Excel c:morialocalizacion-equipos.xls, empezando desde la línea 2 *
'* de la primera hoja (pues la primera contiene encabezados) . Los *
'* resultados del proceso se guardarán en el fichero de valores *
'* separado por tabuladores c:morialocalizacion-equipos.tsv: *
'* *
'* cscript //nologo localizacion-equipos.vbs *
'* /F:c:morialocalizacion-equipos.xls /E *
'* /L:c:morialocalizacion-equipos.tsv *
'* *
'* *
'* *
'* *
'* © Fernando Reyes *
'* Mayo De 2008 *
'*°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°*
'*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
'Exigimos la declaración de variables
Option Explicit
Dim str_Error 'As String
Dim int_Error 'As Integer
Dim str_Libro 'As String
Dim bol_Encabezados 'As Boolean
Dim str_FicheroTSV 'As String
Dim str_Resultados 'As String
Dim str_Echo 'As String
Dim obj_FS 'As Scripting.FileSystemObject
Dim obj_TS 'As Scripting.TextStream
bol_Encabezados = False
'Validando los argumentos y almacenando
'sus valores
If f_RevisarArgumentos( _
str_Error, _
int_Error) Then
Call s_Ayuda(str_Error)
WScript.Quit int_Error
End If
'Ponemos los encabezados al log
str_Resultados = "Dominio" & vbTab & _
"Equipo" & vbTab & _
"Resultado" & vbTab & _
"Localización Anterior" & vbTab & _
"Nueva Localización"
'Los mostramos por pantalla y subrayamos
WScript.Echo str_Resultados
WScript.Echo "=======" & vbTab & _
"======" & vbTab & _
"=========" & vbTab & _
"=====================" & vbTab & _
"=================="
'Añadimos un salto de línea a la salida a fichero
str_Resultados = str_Resultados & vbCrLf
Call s_ProcesaLibro
'Si hay que volcar información en el fichero
'de salida de ruta y nombre str_FicheroTSV
If Len(str_FicheroTSV) > 0 Then
'Creamos un objeto FileSystemObject
Set obj_FS = CreateObject("Scripting.FileSystemObject")
'Creamos el fichero de salida
Set obj_TS = obj_FS.CreateTextFile(str_FicheroTSV)
'Volcamos la información de salida en el fichero
obj_TS.Write str_Resultados
'Cerramos el fichero de salida
obj_TS.Close
'Limpieza de popa :-)
Set obj_TS = Nothing
Set obj_FS = Nothing
End If
Sub s_ProcesaLibro()
'***********************************************************************
'* Procedimiento: s_ProcesaLibro *
'* Tipo : Función *
'* Devolución : Booleana *
'* Fecha y Hora : 03/10/2007 11:31:46 *
'* Autor : Fernando Reyes *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito : Este método recibe la ruta más nombre de un Libro *
'* de Excel con los datos de los equipos a cambiar la *
'* localización. Abre el libro, lo recorre y procesa *
'* cada equipo. *
'***********************************************************************
Dim app_Excel 'As Excel.Application
Dim wb_Libro 'As Excel.Workbook
Dim ws_Hoja 'As Excel.Worksheet
Dim lng_Linea 'As Long
Dim lng_Inicio 'As Long
'Creamos un objeto aplicación Excel
Set app_Excel = CreateObject("Excel.Application")
'Abrimos el libro con los datos
Set wb_Libro = app_Excel.Workbooks.Open(str_Libro)
'Cargamos la primera hoja en la variable
Set ws_Hoja = wb_Libro.Worksheets(1)
'Empezaremos por la línea 1
lng_Inicio = 1
'Si hay encabezados lo haremos por la dos
If bol_Encabezados Then lng_Inicio = 2
'Recorremos las filas escritas
For lng_Linea = lng_Inicio To ws_Hoja.UsedRange.Rows.Count
'Llamamos al método que procesa cada equipo, pasando
'el nombre de dominio, el nombre de equipo y la nueva
'localización
Call s_ProcesaEquipo(ws_Hoja.Range("A" & lng_Linea).Value, _
ws_Hoja.Range("B" & lng_Linea).Value, _
ws_Hoja.Range("C" & lng_Linea).Value)
Next 'lng_Linea
'Cerramos y vaciamos variables
Set ws_Hoja = Nothing
wb_Libro.Close
Set wb_Libro = Nothing
app_Excel.Quit
Set app_Excel=Nothing
End Sub 's_ProcesaLibro
Sub s_ProcesaEquipo(str_Dominio, str_Equipo, str_Localizacion)
'***********************************************************************
'* Procedimiento: s_ProcesaEquipo *
'* Tipo : Función *
'* Devolución : Booleana *
'* Fecha y Hora : 03/10/2007 18:48:18 *
'* Autor : Fernando Reyes *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito : Este método recibe un nombre NetBios de dominio, un *
'* nombre NettBios de equipo y una cadena con la *
'* localización que el método establecerá para la *
'* cuenta del equipo en el dominio. *
'***********************************************************************
Dim obj_Equipo 'As IADsComputer
Dim str_AnteriorLocalizacion 'As String
'Ponemos en la salida por pantalla el nombre de dominio y de equipo
str_Echo = str_Dominio & vbTab & str_Equipo & vbTab
If f_EquipoResponde(str_Equipo) Then
'Establecemos control de errores
On Error Resume Next
'Obtenemos el objeto IADsComputer con el proveeror LDAP,
'para lo cual traducimos su nombre NetBios en el nombre
'LDAP; además, tenemos que añadir $ al final del nombre
'del equipo, pues así son los nombres NT de los equipos
'en Active Directory
Set obj_Equipo = GetObject("LDAP://" & _
f_NTaDN(str_Dominio & "" & _
str_Equipo & "$",""))
If Err.Number = 0 Then
'Todo a ido bien; guardamos la localización actual del
'equipo
str_AnteriorLocalizacion = obj_Equipo.Location
'Establecemos la nueva localización
obj_Equipo.Location = str_Localizacion
'Guardamos la nueva localización
obj_Equipo.SetInfo
If Err.Number = 0 Then
'Todo ha ido bien, guardamos los resultados para
'mostrar por pantalla
str_Echo = str_Echo & _
"Fue procesado con éxito" & vbTab & _
str_AnteriorLocalizacion & vbTab & _
str_Localizacion
Else
'Falló el cambio de localización, lo reflejamos en
'los resultados
str_Echo = str_Echo & _
"Falló al cambiar la localización" & _
": Error " & Err.Number & ", " & _
Err.Description
End If
Else
'Hubo un fallo al intentar optener el obeto IADsComputer
'del equipo, mostramos el fallo en los resultados
str_Echo = str_Echo & _
"Falló al tratar de obtener acceso a " & _
"la cuenta: Error " & Err.Number & _
", " & Err.Description
End If
'Devolvemos el control de los errores a CScript
On Error Goto 0
Else
'El equipo no respondía al Ping, lo mostramos en los
'resultados
str_Echo = str_Echo & "No se procesó, no responde al PING"
End If
'Añadimos los resultados de este equipo a la salida por fichero
str_Resultados = str_Resultados & str_Echo & vbCrLf
'Mostramos por pantalla los resultados de este equipo
WScript.Echo str_Echo
End Sub 's_ProcesaEquipo
Function f_RevisarArgumentos( _
str_Error, _
int_Error _
) 'As Boolean
'***********************************************************************
'* Procedimiento: f_RevisarArgumentos *
'* Tipo : Función *
'* Devolución : Booleana *
'* Fecha y Hora : 03/10/2007 11:23:55 *
'* Autor : Fernando Reyes *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito : Esta función revisa los argumentos recibidos, *
'* recogiendo los posibles fallos por falta de *
'* argumentos requeridos y almacenando en las *
'* variables correspondientes los argumentos *
'* recibidos. recibe dos parámetros cuyo fin es ser de *
'* salida: una cadena que almacenará los errores *
'* detectados y un entero que almacenará el código de *
'* los errores detectados. Hay cinco tipos de error; *
'* error 1 para los argumentos sin nombre requeridos y *
'* no encontrados, error 2 para los argumentos con *
'* nombre requeridos y no encontrados, por último, *
'* error 4 para los combos de argumentos opcionales *
'* (un combo de argumentos opcionales es aquel *
'* conjunto de argumentos opcionales que es requerido *
'* que se pase al menos uno de ellos y que si se pasa *
'* más de uno se ignorarán aquellos que estén detrás *
'* en la prioridad entre ellos; una característica *
'* clara de lo que es un combo de argumentos es cuando *
'* dos omás argumentos almacenan su valor en la misma *
'* variable), 8 en el caso de que el fichero entrado *
'* como parámetro /F no exista y 16 en el caso de que *
'* no exista la ruta especificada para el fichero de *
'* valores separados por tabuladores. En el caso de *
'* producirse más de un tipode error, el número de *
'* error será la suma de de los errores recibidos, es *
'* decir 3, 5, 6, etc. *
'***********************************************************************
Dim bol_Devolucion 'As Boolean
Dim bol_Error1 'As Boolean
Dim bol_Error2 'As Boolean
Dim bol_Error4 'As Boolean
Dim bol_Error8 'As Boolean
Dim bol_Error16 'As Boolean
Dim obj_FS 'As FileSystemObject
'Iniciamos los indicadores
bol_Devolucion = False
bol_Error1 = False
bol_Error2 = False
bol_Error4 = False
bol_Error8 = False
bol_Error16 = False
'Si hay que mostrar la ayuda, se muestra y
'termina el script
If WScript.Arguments.Named.Exists("?") Then
Call s_Ayuda("******************" & vbCrLf & _
"* AYUDA *" & vbCrLf & _
"******************")
WScript.Quit 0
End If
'Revisamos que esté el argumento requerido
'/F (fichero)
If WScript.Arguments.Named.Exists("F") Then
Set obj_FS = _
CreateObject("Scripting.FileSystemObject")
WScript.Echo "¿Existe?: " & obj_FS.FileExists(str_Libro)
If Not obj_FS.FileExists( _
WScript.Arguments.Named("F")) Then
str_Error = str_Error & vbCrLf & _
"Error 8, el libro de Excel " & _
"recibido como argumento /F " & _
"no existe en la ruta especi" & _
"ficada." & vbCrLf
bol_Error8 = True
Else
str_Libro = _
WScript.Arguments.Named("F")
End If
Set obj_FS = Nothing
Else
str_Error = str_Error & vbcrlf & _
"Error 2, falta argumento " & _
"requerido con nombre: " & _
"/F (fichero)" & vbCrLf
bol_Error2 = True
End If
'Revisamos que esté el argumento
'/E (encabezados)
If WScript.Arguments.Named.Exists("E") Then
bol_Encabezados = True
Else
bol_Encabezados = False
End If
'Revisamos que esté el argumento
'/L (fichero)
If WScript.Arguments.Named.Exists("L") Then
Set obj_FS = _
CreateObject("Scripting.FileSystemObject")
If Not obj_FS.FolderExists( _
obj_FS.GetParentFolderName( _
WScript.Arguments.Named("L"))) Then
str_Error = str_Error & vbCrLf & _
"Error 16, la carpeta donde se" & _
" ubica el fichero de valores " & _
"separados por tabuladores de " & _
"salida no existe."
bol_Error16 = True
Else
str_FicheroTSV = _
WScript.Arguments.Named("L")
End If
Set obj_FS = Nothing
End If
'Preparamos las variables de devolucion:
'el entero como suma de los posibles errores 1, 2, 4, 8 y 16
int_Error = Abs(bol_Error1) + _
(2 * Abs(bol_Error2)) + _
(4 * Abs(bol_Error4)) + _
(8 * Abs(bol_Error8)) + _
(16 * Abs(bol_Error16))
'La devolucion de la función será True en caso de
'haber alguno de los errores
bol_Devolucion = (bol_Error1 Or _
bol_Error2 Or _
bol_Error4 Or _
bol_Error8 Or _
bol_Error16)
'Hacemos la devolución de la función
f_RevisarArgumentos = bol_Devolucion
End Function 'f_RevisarArgumentos
Sub s_Ayuda(str_Error)
'***********************************************************************
'* Procedimiento: s_Ayuda *
'* Tipo : Sub *
'* Devolución : *
'* Fecha y Hora : 03/10/2007 11:23:55 *
'* Autor : Fernando Reyes *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito : Este procedimiento muestra la ayuda en línea. *
'* Recibe un parámetro de tipo cadena que si no viene *
'* será mostrado antes de la línea; pensado para que *
'* se muestre un error que se haya detectado. *
'***********************************************************************
'Si hay que mostrar algún texto previo a la ayuda, lo hacemos
If Len(str_Error) > 0 Then
WScript.Echo str_Error & vbCrLf & vbCrLf
End If
'A continuación, mostramos la ayuda por pantalla
WScript.Echo "Este script permite cambiar la propiedad localiza" & _
"ción de los equipos de Active"
WScript.Echo "Directory. Recibe una ruta más nombre de libro de" & _
" Excel en el que tiene los"
WScript.Echo "datos del dominio al que pertenece el equipo, el " & _
"nombre del equipo y la"
WScript.Echo "localización que se le debe establecer."
WScript.Echo "Permite cambiar la localización a equipos de dist" & _
"intos dominios, por lo que se"
WScript.Echo "debe tener en cuenta que para lanzar el script es" & _
" necesario que el usuario"
WScript.Echo "tenga derechos suficientes para realizar estos ca" & _
"mbios en todos los dominio en"
WScript.Echo "los que se haya de operar (digamos que debe ser a" & _
"dministrador de empresa); es"
WScript.Echo "decir, el script debería ser lanzado desde una ve" & _
"ntana de comandos que hubiera"
WScript.Echo "sido abierta con RunAs y la cuenta de un administ" & _
"rador de empresa. El script da"
WScript.Echo "la posibilidad de mostrar los resultados por pant" & _
"alla o volcarlos a un fichero"
WScript.Echo "de valores separados por tabuladores."
WScript.Echo ""
WScript.Echo "Sintaxis"
WScript.Echo ""
WScript.Echo "cscript [//nologo] localizacion-equipos.vbs /F:fi" & _
"chero [/E] [/L:fichero] [/?]"
WScript.Echo ""
WScript.Echo "Siendo"
WScript.Echo ""
WScript.Echo "- /F: fichero (Requerido):"
WScript.Echo "Libro Excel con la primera hoja en la que están l" & _
"os datos"
WScript.Echo "distribuidos, según columna, así:"
WScript.Echo " A - Nombre NetBios al que per" & _
"tenece el"
WScript.Echo " equipo."
WScript.Echo " B - Nombre NetBios del equipo."
WScript.Echo " C - Localización que se quiere" & _
" establecer"
WScript.Echo " para ese equipo."
WScript.Echo ""
WScript.Echo "- /E: encabezados (Opcional):"
WScript.Echo "Modificador que si se pasa, considera que la hoja" & _
" con los datos"
WScript.Echo "tiene encabezados, y por tanto no procesará la pr" & _
"imera línea;"
WScript.Echo "en caso de no pasarse se procesará esta primera l" & _
"ínea."
WScript.Echo ""
WScript.Echo "- /L: fichero (Opcional):"
WScript.Echo "Nombre de fichero de valores separados por tabula" & _
"dores en el"
WScript.Echo "que se guardará el log del proceso."
WScript.Echo ""
WScript.Echo ""
WScript.Echo "Ejemplos:"
WScript.Echo ""
WScript.Echo "- Cambia la localización de los equipos listados " & _
"en el libro de Excel"
WScript.Echo "c:morialocalizacion-equipos.xls, empezando desd" & _
"e la línea 1 de la primera"
WScript.Echo "hoja:"
WScript.Echo ""
WScript.Echo "cscript //nologo localizacion-equipos.vbs /F:c:m" & _
"orialocalizacion-equipos.xls"
WScript.Echo ""
WScript.Echo "- Cambia la localización de los equipos listados " & _
"en el libro de Excel"
WScript.Echo "c:morialocalizacion-equipos.xls, empezando desd" & _
"e la línea 2 de la primera"
WScript.Echo "hoja (pues la primera contiene encabezados) :"
WScript.Echo ""
WScript.Echo "cscript //nologo localizacion-equipos.vbs /F:c:m" & _
"orialocalizacion-equipos.xls"
WScript.Echo "/E"
WScript.Echo ""
WScript.Echo "- Cambia la localización de los equipos listados " & _
"en el libro de Excel"
WScript.Echo "c:morialocalizacion-equipos.xls, empezando desd" & _
"e la línea 2 de la primera"
WScript.Echo "hoja (pues la primera contiene encabezados) . Los" & _
" resultados del proceso se"
WScript.Echo "guardarán en el fichero de valores separado por t" & _
"abuladores"
WScript.Echo "c:morialocalizacion-equipos.tsv:"
WScript.Echo ""
WScript.Echo "cscript //nologo localizacion-equipos.vbs /F:c:m" & _
"orialocalizacion-equipos.xls"
WScript.Echo "/E /L:c:morialocalizacion-equipos.tsv"
WScript.Echo ""
WScript.Echo ""
WScript.Echo ""
End Sub 's_Ayuda
Function f_NTaDN(str_RutaNT, str_DN)
'***********************************************************************
'* Procedimiento: f_NTaDN *
'* Tipo : Función *
'* Devolución : Cadena *
'* Fecha y Hora : May 2007 *
'* Autor : Fernando Reyes *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito : Esta función recibe o bien el nombre NT *
'* ("dominionombre"), como primer parámetro, de un *
'* objeto de dominio y devuelve el nombre distinguido *
'* de ese objeto, o bien el nombre distinguido de un *
'* objeto, como segundo parámetro, y devuelve el *
'* nombre NT. *
'* Basada en el código de Richard Mueller, MVP de *
'* Scripting y ADSI (http://www.rlmueller.net) *
'***********************************************************************
'Constantes para el objeto NameTranslate
Const ADS_NAME_INITTYPE_GC = 3
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_TYPE_1779 = 1
Dim obj_TraductorDeNombres
Dim int_De, int_A,str_Nombre
If Len(str_RutaNT) > 0 Then
int_De = ADS_NAME_TYPE_NT4
int_A = ADS_NAME_TYPE_1779
str_Nombre = str_RutaNT
ElseIf Len(str_DN) > 0 Then
int_De = ADS_NAME_TYPE_1779
int_A = ADS_NAME_TYPE_NT4
str_Nombre = str_DN
Else
WScript.Echo "Error 1 en f_NTaDN: No se ha pasado " & _
"ningún nombre para traducir."
Exit Function
End If
'Creamos el objeto NameTranslate.
Set obj_TraductorDeNombres = CreateObject("NameTranslate")
' On Error Resume Next
'Lo iniciamos localizando el catálogo global
obj_TraductorDeNombres.Init ADS_NAME_INITTYPE_GC,""
'Establecemos el parámetro de nombre en el traductor de nombres
obj_TraductorDeNombres.Set int_De, str_Nombre
'Usamos el método Get del traductor de nombres para obtener el
'nombre traducido
f_NTaDN = obj_TraductorDeNombres.Get(int_A)
'Limpieza de kks :-)
Set obj_TraductorDeNombres = Nothing
' On Error GoTo 0
End Function 'f_NTaDN
Function f_EquipoResponde(str_Equipo) 'As Boolean
'***********************************************************************
'* Procedimiento: f_EquipoResponde *
'* Tipo : Función *
'* Devolución : Booleana *
'* Fecha y Hora : May 2007 *
'* Autor : Fernando Reyes *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito : Esta función recibe un nombre de equipo (ya sea *
'* nombre en sí o IP) y, por medio de PING, revisa si *
'* el equipo responde o no *
'***********************************************************************
'Objeto shell para ejecutar ping y
'enviar la salida a un fichero temporal
Dim obj_Shell 'As Object
'Objeto FileSystem para abrir y borrar
'el fichero temporal
Dim obj_FileSystem 'As Object
'Objeto TextStream para leer el fichero
'temporal
Dim obj_Fichero 'As Object
'Se volcará en esta variable el
'contenido del fichero temporal
Dim str_ContenidoFichero 'As String
'Sirve para establecer la ruta y
'nombre del fichero temporal
Dim str_FicheroTemporal 'As String
'Creamos los objetos FileSystem y Shell
Set obj_Shell = CreateObject("WScript.Shell")
Set obj_FileSystem = CreateObject("Scripting.FileSystemObject")
'Establecemos el fichero temporal en la ruta
'de este libro de Excel y con el nombre
'"temp.txt"
str_FicheroTemporal = _
obj_Shell.ExpandEnvironmentStrings( _
"%TEMP%temp.txt")
'Ejecutamos el ping volcando la salida en el
'fichero temporal. Sólo esperaremos un eco ("-n 1")
obj_Shell.Run "cmd /c ping -n 1 " & str_Equipo & " > """ & _
str_FicheroTemporal & """", 0, True
'Abrimos el fichero temporal sobre el objeto fichero
Set obj_Fichero = obj_FileSystem.OpenTextFile( _
str_FicheroTemporal, 1, False)
'Volcamos el contenido del fichero temporal
'en str_ContenidoFichero
str_ContenidoFichero = obj_Fichero.ReadAll
'Cerramos el fichero temporal y vaciamos su variable
obj_Fichero.Close
Set obj_Fichero = Nothing
'Borramos el fichero temporal y vaciamos
'los objetos Shell y FileSystem
obj_FileSystem.DeleteFile (str_FicheroTemporal)
Set obj_FileSystem = Nothing
Set obj_Shell = Nothing
'Si encontramos la cadena "TTL=" significa
'que el equipo respondió y por tanto la función
'devuelve True, en caso contrario significa que
'no respondió el equipo y por tanto devuelve
'False
If InStr(str_ContenidoFichero, "TTL=") > 0 Then
f_EquipoResponde = True
Else
f_EquipoResponde = False
End If
End Function 'f_EquipoResponde
Function f_IIf(bol_Expresion, _
var_Verdadero, _
var_Falso)
'***********************************************************************
'* Procedimiento: f_IIf *
'* Tipo : Función *
'* Devolución : Variant *
'* Fecha y Hora : Julio de 2007 *
'* Autor : Fernando Reyes *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito : Esta función emula la función Iif de VBA.Recibe una *
'* booleana, que será el resultado de una expresión *
'* que se ponga como parámetro al llamar la función, *
'* tal y como se hace en la función IIf de VBA, y *
'* devolverá lo que se pase como parámetro *
'* var_Verdadero, si la booleana es verdadera o lo que *
'* se pase como parámetro var_Falso si la booleana es *
'* falsa. *
'***********************************************************************
if bol_Expresion Then
f_IIF = var_Verdadero
Else
f_IIf = var_Falso
End If
End Function 'f_IIf
Sub s_Cmd(str_Comando)
'***********************************************************************
'* Procedimiento: s_Cmd *
'* Tipo : Método *
'* Devolución : *
'* Fecha y Hora : May 2007 *
'* Autor : Fernando Reyes *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito : Este método lanza el comando recibido como *
'* parámetro como si desde una ventana de comandos *
'* fuese lanzado *
'***********************************************************************
Dim str_Shell 'Alberga la cadena que permite lanzar
'la ventana de comandos predeterminada
'(COMSPEC)
' Dim obj_Shell 'Contiene un objeto Shell
'Creamos un objeto Shell
Set obj_Shell = CreateObject("Wscript.Shell")
'Obtenemos la cadena que lanza la ventana de comandos
'predeterminada
str_Shell = obj_Shell.Environment("Process").Item("COMSPEC")
'Lanzamos el comando por medio de una llamada al método Run
'del objeto Shell
obj_Shell.Run str_Shell & " /c """ & str_Comando & """", 0, True
'Limpiadita de popa :-)
Set obj_Shell = Nothing
End Sub 's_Cmd
Jose Ramon Pernia Reyes escribió
Buenas este Script funcionara para cambiar usuarios pregunto
urpiano escribió
Jose Ramon Pernia Reyes,
No, este script hace lo que dice hacer, cambiar la localización de los equipos (su atributo Location en Active Directory)