Script VBScript Para Cambiar La Contraseña A Un Usuario Local En Uno O Varios Equipos
Posted by urpiano en viernes 25 \25\+01:00 julio \25\+01:00 2008
Es conveniente cambiar la contraseña del administrador local de los equipos de vez en cuando, de forma que no se "enrancie". Hacer esto en un solo equipo es algo que no es laborioso, pero hacerlo en muchos equipos es otra cosa. Cuando se está en un entorno de dominio, se suele hacer por medio de un script VBScript que se asigna en una GPO como script de inicio de equipo; una forma cómoda de hacer esta tarea. Si embargo tiene dos principales debilidades: si el equipo no es reiniciado en algún momento (pensemos en un servidor por ejemplo, o en ese usuario que nunca apaga su equipo), no recibirá la nueva contraseña, por otra parte, el script deberá estar situado en un recurso de red y tendrá que tener la nueva contraseña escrita en él, con lo que se convierte en fácil capturar esa contraseña para un usuario medinamente "espabiladillo"; se puede encriptar el script con SCRENC.EXE pero eso no es, ni mucho menos algo demasiado seguro, pues es muy fácil saltarse esa encriptación, como se ve aquí. Otra estrategia es el hacerlo de forma interactiva, desde un equipo en el que lanzamos el script desde una ventana de comandos que hemos abierto con RunAs como administrador del dominio; de esta manera, el script no está a disposición de todo el mundo, con lo que nadie se entera de cuál es la nueva contraseña. La pega de esta otra estrategia es que se debe ir haciendo un recuento de los equipos a los que se ha podido o no cambiar la contraseña, pues si un equipo está apagado, la contraseña no se le cambiará, mientras que con la estrategia de la GPO eso no importa, pues en el momento en que sea iniciado el equipo, se le cambiará la contraseña. Por ello, cuando no se opta por la estrategia de ejecutar el script desde una GPO, es conveniente saber a qué equipos no se les pudo cambiar la contraseña y reintentarlo más adelante, e ir así reduciendo la lista de equipos a los que no se aplicó. En esta estrategia de no usar la GPO está basado el presente script.
Este script permite cambiar la contraseña a un usuario local en uno o varios equipos. Ideal para cambiar la contraseña al administrador local de los equipos de un dominio. El script permite cambiar la contraseña de un usuario específico o del administrador local si no se establece a qué usuario se cambiará la contraseña. Dado que como nombre del usuario administrador local del equipo podríamos tener diferentes nombres de usuario, por tratarse sistemas operativos en diferentes idiomas o por haber sido cambiado en la directiva «Configuración de equipo\Configuración de Windows\Configuración de seguridad\Directivas locales\Opciones de seguridad\Cuentas: cambiar el nombre de la cuenta del administrador», ya sea en las políticas locales (gpedit.msc) o por GPO, el script averiguará en cada equipo qué nombre tiene el usuario administrador local, para así cambiar su contraseña sea cual sea su nombre. El script deberá ser lanzado por un usuario que tenga los permisos necesarios para realizar esta tarea (un administrador de dominio, por ejemplo).
Sintaxis
cscript [//nologo] cambiar-password.vbs [/E:equipos] [/F:fichero] [/D:dominio] [/N:equipos] [/T:fichero] [/U:usuario] [/?] contraseña
Siendo
Etiqueta | Dato | ¿Requerido? | Descripción |
contraseña | Sí |
Nueva contraseña a establecer.
|
|
E | equipos | No |
Lista de equipos a los que se cambiará la contraseña del usuario local.
|
F | fichero | No |
Fichero con los nombres de los equipos a los que se cambiará la contraseña del usuario local, un nombre de equipo por línea.
|
D | dominio | No |
Nombre DNS (dominio.com) del dominio al que se cambiará la contraseña del usuario local de sus equipos.
|
N | equipos | No |
Lista de equipos a los que se excluirá del proceso. Necesaria cuando se ha establecido el argumento D, nombre de dominio, pues en ese caso el script procesa todos los equipos del dominio y podríamos desear que no lo haga en determinados equipos..
|
T | fichero | No |
Fichero de texto, de valores separados por tabulador (ideal para ser abierto con Excel), con los resultados obtenidos en la ejecución del script. Si se omite este argumento, la información se mostrará por pantalla.
|
U | usuario | No |
Nombre de usuario de equipo local al que se quiere cambiar la contraseña. Si se omite, se cambiará al administrador local del equipo.
|
? | No |
Muestra la ayuda en línea.
|
Ejemplos:
– Cambia a «nueva contraseña» la contraseña del usuario administrador local de los equipos del dominio bichosmalos.mordor.gov, excluyendo los equipos troll,wargo de este cambio.:
cscript //nologo cambiar-password.vbs /D:bichosmalos.mordor.gov /N:troll,wargo "nueva contraseña"
– Cambia a «nueva contraseña» la contraseña del usuario administrador local de los equipos snaug,grima,balrog, guardando los resultados en el fichero separado por tabuladores c:listadoscambiar.txt:
cscript //nologo cambiar-password.vbs /E:snaug,grima,balrog /T:c:listadoscambiar.txt "nueva contraseña"
– Cambia a «nueva contraseña» la contraseña del usuario administrador local de los equipos listados en el fichero c:mordorcambiar.txt, guardando los resultados en el fichero separado por tabuladores c:listadoscambiar.txt:
cscript //nologo cambiar-password.vbs /F:c:mordorcambiar.txt /T:c:listadoscambiar.txt "nueva contraseña"
– Cambia a «nueva contraseña» la contraseña del usuario local smeagol de los equipos listados en el fichero c:mordorcambiar.txt, mostrando por pantalla los resultados:
cscript //nologo cambiar-password.vbs /F:c:mordorcambiar.txt /U:smeagol "nueva contraseña"
Este es el código del script
'*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
'*°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°*
'* cambiar-password.vbs *
'* *
'* Este script permite cambiar la contraseña a un usuario local en uno *
'* o varios equipos. Ideal para cambiar la contraseña al administrador *
'* local de los equipos de un dominio. El script permite cambiar la *
'* contraseña de un usuario específico o del administrador local si no *
'* se establece a qué usuario se cambiará la contraseña. Dado que como *
'* nombre del usuario administrador local del equipo podríamos tener *
'* diferentes nombres de usuario, por tratarse sistemas operativos en *
'* diferentes idiomas o por haber sido cambiado en la directiva *
'* "Configuración de equipo\Configuración de Windows\Configuración de *
'* seguridad\Directivas locales\Opciones de seguridad\Cuentas: cambiar *
'* el nombre de la cuenta del administrador", ya sea en las políticas *
'* locales (gpedit.msc) o por GPO, el script averiguará en cada equipo *
'* qué nombre tiene el usuario administrador local, para así cambiar *
'* su contraseña sea cual sea su nombre. El script deberá ser lanzado *
'* por un usuario que tenga los permisos necesarios para realizar esta *
'* tarea (un administrador de dominio, por ejemplo). *
'* *
'* Sintaxis *
'* *
'* cscript [//nologo] cambiar-password.vbs [/E:equipos] *
'* [/F:fichero] [/D:dominio] [/N:equipos] [/T:fichero] [/U:usuario] *
'* [/?] contraseña *
'* *
'* Siendo *
'* *
'* - contraseña (Requerido): *
'* Nueva contraseña a establecer. *
'* *
'* - /E: equipos (Opcional): *
'* Lista de equipos a los que se cambiará la contraseña del *
'* usuario local. *
'* *
'* - /F: fichero (Opcional): *
'* Fichero con los nombres de los equipos a los que se *
'* cambiará la contraseña del usuario local, un nombre de *
'* equipo por línea. *
'* *
'* - /D: dominio (Opcional): *
'* Nombre DNS (dominio.com) del dominio al que se cambiará la *
'* contraseña del usuario local de sus equipos. *
'* *
'* - /N: equipos (Opcional): *
'* Lista de equipos a los que se excluirá del proceso. *
'* Necesaria cuando se ha establecido el argumento D, nombre *
'* de dominio, pues en ese caso el script procesa todos los *
'* equipos del dominio y podríamos desear que no lo haga en *
'* determinados equipos.. *
'* *
'* - /T: fichero (Opcional): *
'* Fichero de texto, de valores separados por tabulador (ideal *
'* para ser abierto con Excel), con los resultados obtenidos *
'* en la ejecución del script. Si se omite este argumento, la *
'* información se mostrará por pantalla. *
'* *
'* - /U: usuario (Opcional): *
'* Nombre de usuario de equipo local al que se quiere cambiar *
'* la contraseña. Si se omite, se cambiará al administrador *
'* local del equipo. *
'* *
'* *
'* Ejemplos: *
'* *
'* - Cambia a "nueva contraseña" la contraseña del usuario *
'* administrador local de los equipos del dominio *
'* bichosmalos.mordor.gov, excluyendo los equipos troll,wargo de este *
'* cambio.: *
'* *
'* cscript //nologo cambiar-password.vbs /D:bichosmalos.mordor.gov *
'* /N:troll,wargo "nueva contraseña" *
'* *
'* - Cambia a "nueva contraseña" la contraseña del usuario *
'* administrador local de los equipos snaug,grima,balrog, guardando *
'* los resultados en el fichero separado por tabuladores *
'* c:\listados\cambiar.txt: *
'* *
'* cscript //nologo cambiar-password.vbs /E:snaug,grima,balrog *
'* /T:c:\listados\cambiar.txt "nueva contraseña" *
'* *
'* - Cambia a "nueva contraseña" la contraseña del usuario *
'* administrador local de los equipos listados en el fichero *
'* c:\mordor\cambiar.txt, guardando los resultados en el fichero *
'* separado por tabuladores c:\listados\cambiar.txt: *
'* *
'* cscript //nologo cambiar-password.vbs /F:c:\mordor\cambiar.txt *
'* /T:c:\listados\cambiar.txt "nueva contraseña" *
'* *
'* - Cambia a "nueva contraseña" la contraseña del usuario local *
'* smeagol de los equipos listados en el fichero *
'* c:\mordor\cambiar.txt, mostrando por pantalla los resultados: *
'* *
'* cscript //nologo cambiar-password.vbs /F:c:\mordor\cambiar.txt *
'* /U:smeagol "nueva contraseña" *
'* *
'* *
'* *
'* *
'* © Fernando Reyes *
'* Julio De 2008 *
'*°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°*
'*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
'Exigimos la declaración de variables
Option Explicit
Dim str_Error 'As String
Dim int_Error 'As String
Dim str_NuevaClave 'As String
Dim arr_Equipos 'As String
Dim str_Excluidos 'As String
Dim str_TXT 'As String
Dim str_UsuarioACambiar 'As String
Dim str_Mensaje 'As String
Dim str_Equipos 'As String
Dim int_Equipo 'As Integer
Dim obj_FS 'As Scripting.FileSystemObject
Dim obj_TS 'As Scripting.TextStream
'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
'Establecemos los encabezados del listado con los resultados
str_Mensaje = "Equipo" & vbTab & _
"Resultado" & vbTab & _
"Nº Error" & vbTab & _
"Error" & vbTab & _
"Usuario" & vbCrLf
'Recorremos uno a uno los equipos a procesar
For int_Equipo = LBound(arr_Equipos) To UBound(arr_Equipos)
'Procesamos el equipo. Si el array de equipos contiene
'algún elemento vacío, lo evitamos
If Len(arr_Equipos(int_Equipo)) > 0 Then _
Call s_ProcesarEquipo(arr_Equipos(int_Equipo), _
str_UsuarioACambiar, _
str_NuevaClave)
'Añadimos un salto de línea al mensaje de salida
str_Mensaje = str_Mensaje & vbCrLf
Next 'int_Equipo
'Si se debe volcar la salida en un fichero...
If Len(str_TXT) > 0 Then
'Creamos un objeto FileSystemObject y un objeto
'TextStream, éste último en la ruta y nombre recibidos
'como parámetro /T
Set obj_FS = CreateObject("scripting.filesystemobject")
Set obj_TS = obj_FS.CreateTextFile(str_TXT)
'Escribimos los resultados en el fichero
obj_TS.Write str_Mensaje
'Cerramos el fichero
obj_TS.Close
'Limpieza de culete :-)
Set obj_TS = Nothing
Set obj_FS = Nothing
Else
'Mostramos los resultados por pantalla
WScript.Echo str_Mensaje
End If
Sub s_ProcesarEquipo(str_Equipo, _
str_Usuario, str_Clave) 'As Boolean
'***********************************************************************
'* Procedimiento: s_ProcesarEquipo *
'* Tipo : Sub *
'* Devolución : *
'* Fecha y Hora : 23/07/2007 14:01:57 *
'* Autor : Fernando Reyes *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito : Este método recibe como parámetros el nombre de un *
'* equipo, el nombre de un usuario (o nada, en cuyo *
'* caso busca cuál es el nombre del usuario *
'* administrador del equipo) y una contraseña. El *
'* método cambiará la contraseña al usuario local de *
'* ese equipo. *
'***********************************************************************
Dim obj_Usuario 'As IADsUser
'Guardamos el nombre del equipo en el mensaje de salida
str_Mensaje = str_Mensaje & str_Equipo
'Si el equipo responde al ping...
If f_EquipoResponde(str_Equipo) Then
'Establecemos control de errores
On Error Resume Next
'Si no ha sido pasado el usuario al que cambiar
'la contraseña, se le cambiará al administrador
'local del equipo; obtenemos su nombre
If Len(str_Usuario) = 0 Then _
str_Usuario = f_NombreAdministrador(str_Equipo)
'Obtenemos el objeto de usuario con el proveedor WinNT
Set obj_Usuario = GetObject("WinNT://" & str_Equipo & "/" & _
str_Usuario & ",user")
'Si no se ha producido error
If Err.Number = 0 Then
'Cambiamos la contraseña
obj_Usuario.SetPassword str_Clave
obj_Usuario.SetInfo
'Si no se ha producido error al cambiar la contraseña...
If Err.Number = 0 Then
'Almacenamos el éxito en el mensaje
str_Mensaje = str_Mensaje & vbTab & _
"Contraseña Cambiada" & vbTab & _
"0" & vbTab & _
"Sin Error" & vbTab & _
str_Usuario
Else
'Reflejamos el fracaso
str_Mensaje = str_Mensaje & vbTab & _
"No se ha podido cambiar" & vbTab & _
Err.Number & vbTab & _
Err.Description & vbTab & _
str_Usuario
End If
'Si se ha producido algún error...
Else
'Almacenamos el fracaso en el mensaje, junto con su
'número y descripción de error
str_Mensaje = str_Mensaje & vbTab & _
"No se ha podido cambiar" & vbTab & _
Err.Number & vbTab & _
f_IIf(Len(Err.Description)>0, _
Err.Description, _
"Usuario no encontrado") & _
vbTab & _
str_Usuario
End If
'Devolvemos el control de errores al intérprete
On Error Goto 0
'En caso de no responder al ping...
Else
'Reflejamos esta circunstancia en el mensaje
str_Mensaje = str_Mensaje & vbtab & _
"No Responde al Ping"
End If
End Sub 's_ProcesarEquipo
Function f_RevisarArgumentos( _
str_Error, _
int_Error _
) 'As Boolean
'***********************************************************************
'* Procedimiento: f_RevisarArgumentos *
'* Tipo : Función *
'* Devolución : Booleana *
'* Fecha y Hora : 23/07/2007 13:09:49 *
'* 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 tres 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). En el caso de producirse más de un tipo *
'* de error, el número de error será la suma de ambos *
'* de los errores recibidos, es decir 3, 5 o 6 *
'***********************************************************************
Dim bol_Devolucion 'As Boolean
Dim bol_Error1 'As Boolean
Dim bol_Error2 'As Boolean
Dim bol_Error4 'As Boolean
Dim obj_FS 'As Scripting.FileSystemObject
Dim obj_TS 'As Scripting.TextStream
Dim str_Dominio 'As String
'Iniciamos los indicadores
bol_Devolucion = False
bol_Error1 = False
bol_Error2 = False
'Si hay que mostrar la ayuda, lo hacemos y terminamos
'la ejecución
If WScript.Arguments.Named.Exists("?") Then
Call s_Ayuda("********************" & vbCrLf & _
"* AYUDA *" & vbCrLf & _
"********************")
WScript.Quit 0
End If
'Revisamos si están todos los argumentos
'sin nombre requeridos
If WScript.Arguments.Unnamed.Count < 1 Then
str_Error = "Error 1, falta/n argumento/s sin " & _
"nombre requerido/s" & vbCrLf
bol_Error1 = True
Else
'Guardamos los argumentos en las variables
'correspondientes
If _
WScript.Arguments.Unnamed.Count - 1 _
>= 0 Then _
str_NuevaClave = _
WScript.Arguments.Unnamed(0)
End If
'Revisamos que esté el argumento
'/T (fichero)
If WScript.Arguments.Named.Exists("T") Then
str_TXT = _
WScript.Arguments.Named("T")
End If
'Revisamos que esté el argumento
'/U (usuario)
If WScript.Arguments.Named.Exists("U") Then
str_UsuarioACambiar = _
WScript.Arguments.Named("U")
End If
'Revisamos si ha sido pasado el argumento
'/F (fichero)
If WScript.Arguments.Named.Exists("F") Then
Set obj_FS = CreateObject( _
"Scripting.FileSystemObject")
Set obj_TS = obj_FS.OpenTextFile( _
Wscript.Arguments.Named("F"))
arr_Equipos = Split(obj_TS.ReadAll,vbCrLf)
'Revisamos si ha sido pasado el argumento
'/E (equipos)
Elseif WScript.Arguments.Named.Exists("E") Then
arr_Equipos = _
Split(WScript.Arguments.Named("E"),",")
'Revisamos si ha sido pasado el argumento
'/D (dominio)
Elseif WScript.Arguments.Named.Exists("D") Then
'Revisamos que esté el argumento
'/N (equipos)
If WScript.Arguments.Named.Exists("N") Then
str_Excluidos = _
Join(Split( _
WScript.Arguments.Named("N"), _
","),"")
End If
'Definimos variables para poder hacer una consulta
'que nos devuelva los nombres de los equipos del
'dominio
'Constante para consultar el árbol de dominio
'completo
Const ADS_SCOPE_SUBTREE = 2
'Variables para la consulta
Dim obj_Conexion 'As ADODB.Connection
Dim obj_Comando 'As ADODB.Command
Dim rs_Equipos 'As ADODB.Recordset
'Contador de equipos
Dim int_Equipo 'As Integer
'Obtenemos el nombre del dominio en formato
'LDAP
str_Dominio = "DC=" & _
Replace(WScript.Arguments.Named("D"), _
".", _
",DC=")
'Creamos una conexión ADO
Set obj_Conexion = CreateObject("ADODB.Connection")
'Creamos un objeto comando de ADO
Set obj_Comando = CreateObject("ADODB.Command")
'Establecemos el proveedor ADSI
obj_Conexion.Provider = "ADsDSOObject"
'Abrimos la conexión
obj_Conexion.Open "Active Directory Provider"
'Asignamos al objeto comando la conexión
Set obj_Comando.ActiveConnection = obj_Conexion
'Establecemos la consulta
obj_Comando.CommandText = _
"Select Name, Location from 'LDAP://" & _
str_Dominio & "' " _
& "Where objectClass='computer'"
'Establecemos el tamaño de página
obj_Comando.Properties("Page Size") = 1000
'Estabecemos que se realice la búsqueda en todo el árbol
obj_Comando.Properties("Searchscope") = ADS_SCOPE_SUBTREE
'Creamos el recordset con la consulta
Set rs_Equipos = obj_Comando.Execute
'Nos situamos en el primer registro
rs_Equipos.MoveFirst
'Iniciamos la variable donde almacenaremos los nombres
'de los equipos
str_Equipos = ""
'Recorremos el recordset hasta llegar al final
Do Until rs_Equipos.EOF
'Si no está en la lista de excluidos o no hay lista
'de excluidos
If InStr(1,str_Excluidos, _
rs_Equipos.Fields("Name").Value, _
1) = 0 _
Or Len(str_Excluidos) = 0 Then
'Añadimos el equipo al conjunto
str_Equipos = str_Equipos & _
rs_Equipos.Fields("Name").Value & _
","
End If
'Vamos al siguiente registro
rs_Equipos.MoveNext
Loop
'Si hemos encontrado algún equipo, str_Equipos no está vacío
If Len(str_Equipos) > 0 Then
'Quitamos la coma final de str_Equipos
str_Equipos = Left(str_Equipos, _
Len(str_Equipos) - 1)
'Cargamos arr_Equipos haciendo Split a str_Equipos con
'la coma como separador
arr_Equipos = Split(str_Equipos,",")
End If
Else
'No ha aparecido ninguno de los argumentos integrantes de
'un combo de argumentos. Almacenamos el mensaje y el
'número de error (error 4)
str_Error = str_Error & _
"Error 4: No se ha pasado " & _
"ninguno de los argumentos" & _
" integrantes de un combo " & _
"de argumentos. En un comb" & _
"o de argumentos todos los" & _
" argumentos son opcionale" & _
"s, sin embargo debe ser p" & _
"asado uno al menos; si se" & _
" pasa más de uno, sólo se" & _
" tendrá en cuenta uno, el" & _
" primero en el orden de a" & _
"rgumentos del combo. En e" & _
"ste caso los argumentos q" & _
"ue integran el combo son " & _
"(en orden de prioridad): "
str_Error = str_Error & _
"""/F""" & _
", ""/E""" & _
" y ""/D""" & vbCrLf
bol_Error4 = True
End If
'Preparamos las variables de devolucion:
'el entero como suma de los posibles errores 1, 2 y 4
int_Error = Abs(bol_Error1) + _
(2 * Abs(bol_Error2)) + _
(4 * Abs(bol_Error4))
'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)
'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 : 23/07/2007 19:12:15 *
'* 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 contraseña a un us" & _
"uario local en uno o varios"
WScript.Echo "equipos. Ideal para cambiar la contraseña al admi" & _
"nistrador local de los equipos"
WScript.Echo "de un dominio. El script permite cambiar la contr" & _
"aseña de un usuario específico"
WScript.Echo "o del administrador local si no se establece a qu" & _
"é usuario se cambiará la"
WScript.Echo "contraseña. Dado que como nombre del usuario admi" & _
"nistrador local del equipo"
WScript.Echo "podríamos tener diferentes nombres de usuario, po" & _
"r tratarse sistemas operativos"
WScript.Echo "en diferentes idiomas o por haber sido cambiado e" & _
"n la directiva ""Configuración"
WScript.Echo "de equipoConfiguración de WindowsConfiguración " & _
"de seguridadDirectivas"
WScript.Echo "localesOpciones de seguridadCuentas: cambiar el" & _
" nombre de la cuenta del"
WScript.Echo "administrador"", ya sea en las políticas locales " & _
"(gpedit.msc) o por GPO, el"
WScript.Echo "script averiguará en cada equipo qué nombre tiene" & _
" el usuario administrador"
WScript.Echo "local, para así cambiar su contraseña sea cual se" & _
"a su nombre. El script deberá"
WScript.Echo "ser lanzado por un usuario que tenga los permisos" & _
" necesarios para realizar esta"
WScript.Echo "tarea (un administrador de dominio, por ejemplo)."
WScript.Echo ""
WScript.Echo "Sintaxis"
WScript.Echo ""
WScript.Echo "cscript [//nologo] cambiar-password.v" & _
"bs [/E:equipos] [/F:fichero]"
WScript.Echo "[/D:dominio] [/N:equipos] [/T:fichero] [/U:usuari" & _
"o] [/?] contraseña"
WScript.Echo ""
WScript.Echo "Siendo"
WScript.Echo ""
WScript.Echo "- contraseña (Requerido):"
WScript.Echo "Nueva contraseña a establecer."
WScript.Echo ""
WScript.Echo "- /E: equipos (Opcional):"
WScript.Echo "Lista de equipos a los que se cambiará la contras" & _
"eña del"
WScript.Echo "usuario local."
WScript.Echo ""
WScript.Echo "- /F: fichero (Opcional):"
WScript.Echo "Fichero con los nombres de los equipos a los que " & _
"se cambiará la"
WScript.Echo "contraseña del usuario local, un nombre de equipo" & _
" por línea."
WScript.Echo ""
WScript.Echo "- /D: dominio (Opcional):"
WScript.Echo "Nombre DNS (dominio.com) del dominio al que se ca" & _
"mbiará la"
WScript.Echo "contraseña del usuario local de sus equipos."
WScript.Echo ""
WScript.Echo "- /N: equipos (Opcional):"
WScript.Echo "Lista de equipos a los que se excluirá del proces" & _
"o. Necesaria"
WScript.Echo "cuando se ha establecido el argumento D, nombre d" & _
"e dominio,"
WScript.Echo "pues en ese caso el script procesa todos los equi" & _
"pos del"
WScript.Echo "dominio y podríamos desear que no lo haga en dete" & _
"rminados"
WScript.Echo "equipos.."
WScript.Echo ""
WScript.Echo "- /T: fichero (Opcional):"
WScript.Echo "Fichero de texto, de valores separados por tabula" & _
"dor (ideal"
WScript.Echo "para ser abierto con Excel), con los resultados o" & _
"btenidos en la"
WScript.Echo "ejecución del script. Si se omite este argumento, la"
WScript.Echo "información se mostrará por pantalla."
WScript.Echo ""
WScript.Echo "- /U: usuario (Opcional):"
WScript.Echo "Nombre de usuario de equipo local al que se quier" & _
"e cambiar la"
WScript.Echo "contraseña. Si se omite, se cambiará al administr" & _
"ador local del"
WScript.Echo "equipo."
WScript.Echo ""
WScript.Echo ""
WScript.Echo "Ejemplos:"
WScript.Echo ""
WScript.Echo "- Cambia a ""nueva contraseña"" la contraseña del" & _
" usuario administrador local de"
WScript.Echo "los equipos del dominio bichosmalos.mordor.gov, e" & _
"xcluyendo los equipos"
WScript.Echo "troll,wargo de este cambio.:"
WScript.Echo ""
WScript.Echo "cscript //nologo cambiar-password.vbs /D:bichosma" & _
"los.mordor.gov /N:troll,wargo"
WScript.Echo """nueva contraseña"""
WScript.Echo ""
WScript.Echo "- Cambia a ""nueva contraseña"" la contraseña del" & _
" usuario administrador local de"
WScript.Echo "los equipos snaug,grima,balrog, guardando los res" & _
"ultados en el fichero separado"
WScript.Echo "por tabuladores c:\listados\cambiar.txt:"
WScript.Echo ""
WScript.Echo "cscript //nologo cambiar-password.vbs /E:snaug,gr" & _
"ima,balrog"
WScript.Echo "/T:c:\listados\cambiar.txt ""nueva contraseña"""
WScript.Echo ""
WScript.Echo "- Cambia a ""nueva contraseña"" la contraseña del" & _
" usuario administrador local de"
WScript.Echo "los equipos listados en el fichero c:mordorcamb" & _
"iar.txt, guardando los"
WScript.Echo "resultados en el fichero separado por tabuladores" & _
" c:\listados\cambiar.txt:"
WScript.Echo ""
WScript.Echo "cscript //nologo cambiar-password.vbs /F:c:\mordo" & _
"r\cambiar.txt"
WScript.Echo "/T:c:\listados\cambiar.txt ""nueva contraseña"""
WScript.Echo ""
WScript.Echo "- Cambia a ""nueva contraseña"" la contraseña del" & _
" usuario local smeagol de los"
WScript.Echo "equipos listados en el fichero c:\mordor\cambiar." & _
"txt, mostrando por pantalla"
WScript.Echo "los resultados:"
WScript.Echo ""
WScript.Echo "cscript //nologo cambiar-password.vbs /F:c:\mordo" & _
"r\cambiar.txt /U:smeagol"
WScript.Echo """nueva contraseña"""
WScript.Echo ""
WScript.Echo ""
WScript.Echo ""
End Sub 's_Ayuda
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 *
'***********************************************************************
Dim obj_SH 'As wshShell
Dim obj_FS 'As Scripting.FileSystemObject
Dim obj_TS 'As Scripting.TextStream
Dim str_ContenidoFichero 'As String
Dim str_FicheroTemporal 'As String
'Creamos los objetos FileSystem y Shell
Set obj_SH = CreateObject("WScript.Shell")
Set obj_FS = CreateObject("Scripting.FileSystemObject")
'Establecemos el fichero temporal, con el nombre
'"temp.txt", en la ruta de de la carpeta que indique
'la variable de entorno TEMP
str_FicheroTemporal = _
obj_SH.ExpandEnvironmentStrings( _
"%TEMP%\temp.txt")
'Ejecutamos el ping volcando la salida en el
'fichero temporal. Sólo esperaremos un eco ("-n 1")
obj_SH.Run "cmd /c ping -n 1 " & str_Equipo & " > """ & _
str_FicheroTemporal & """", 0, True
'Abrimos el fichero temporal sobre el objeto fichero
Set obj_TS = obj_FS.OpenTextFile( _
str_FicheroTemporal, 1, False)
'Volcamos el contenido del fichero temporal
'en str_ContenidoFichero
str_ContenidoFichero = obj_TS.ReadAll
'Cerramos el fichero temporal y vaciamos su variable
obj_TS.Close
Set obj_TS = Nothing
'Borramos el fichero temporal y vaciamos
'los objetos Shell y FileSystem
obj_FS.DeleteFile (str_FicheroTemporal)
Set obj_FS = Nothing
Set obj_SH = 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_NombreAdministrador(str_Equipo) 'As String
'***********************************************************************
'* Procedimiento: f_NombreAdministrador *
'* Tipo : Función *
'* Devolución : Cadena *
'* Fecha y Hora : 23/07/2007 16:10:04 *
'* Autor : Fernando Reyes *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito : Esta función recibe un nombre de equipo y devuelve *
'* el nombre de su usuario administrador. Para ello *
'* conecta con el servicio WMI del equipo, lista los *
'* SIDs de los usuarios locales y busca aquel que *
'* empiece por "S-1-5-" y termine por "-500", *
'* características propias de la cuenta de *
'* administrador local de un equipo. Es útil cuando *
'* hay equipos en diferentes idiomas o se ha *
'* establecido la directiva "Configuración de *
'* equipo\Configuración de Windows\Configuración de *
'* seguridad\Directivas locales\Opciones de *
'* seguridad\Cuentas: cambiar el nombre de la cuenta *
'* del administrador", ya sea en las directivas *
'* locales del equipo (gpedit.msc) o por medio de una *
'* GPO. Una vez localizado el SID, se obtiene el *
'* nombre y es devuelto por la función. *
'***********************************************************************
Dim obj_ServicioWMI 'As sWbemService
Dim obj_Usuario 'As IADsUser
Dim col_Usuarios 'As IAdsUsers
Dim str_Consulta 'As String
'Creamos un objeto sWbemService
Set obj_ServicioWMI = GetObject( _
"winmgmts:{impersonationLevel=impersonate}!\" & _
str_Equipo & "root\CIMV2")
'Establecemos la consulta que devolverá las cuentas de usuario
'locales de equipo
str_Consulta = "SELECT * FROM Win32_Account WHERE Domain = '" & _
str_Equipo & "'"
'Ejecutamos la consulta, obteniendo una colección de usuarios
Set col_Usuarios = obj_ServicioWMI.ExecQuery(str_Consulta)
'Recorremos la colección de usuarios
For Each obj_Usuario in col_Usuarios
'Si el usuario es el administrador local...
If (Left(obj_Usuario.SID, 6) = "S-1-5-" _
And Right(obj_Usuario.SID,4) = "-500") Then
'Devolvemos su nombre y salimos del bucle
f_NombreAdministrador = obj_Usuario.Name
Exit For
End If
Next
'Limpieza de la parte posterior saliente :-)
Set obj_Usuario = Nothing
Set col_Usuarios = Nothing
Set obj_ServicioWMI = Nothing
End Function 'f_NombreAdministrador
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
natalia said
quiero cambiar la comtraseña de micorreohoy mismo
urpiano said
Natalia,
Este script es para cambiar las contraseña de usuario de Windows, no del correo. Las del correo deberás cambiarlas en la página de adminsitración de tu correo, que si es de tu ISP, suele haber algúna parte en su sitio Web donde puedas hacer esto.
Damian said
GRacias funciono correctamente.
SAludos
GABO said
DE PURA CASUALIDAD SABRIAS COMO SACAR DE DOMINIO UNA PC POR MEDIO DE UN VBSCRIPT ?
ligacb@terra.com.mx
ligacb@prodigy.net.mx
GRACIAS ESPERO RESPUESTA.
urpiano said
Gabo,
En el propio Script Center de Microsoft tienes un ejemplo:
Unjoin a Computer from a Domain
Por cierto, no te recomiendo que pongas cuentas de correo válidas en una página web, foro o comentarios de un blog, pues las puede captar un robot de los que usan los spamers y verte inundado de spam a partir de ese momento. Deberías haberlas enmascarado, algo así como:
ligacb.quitaesto@yestotambien.terra.com.mx
ligacbarrobaprodigypuntonetpuntomx
Carlos said
Equipo Resultado Nº Error Error Usuario
mindway No se ha podido cambiar -2147022651 admin
urpiano said
Carlos,
Ese error lo que dice es que la contraseña no cumple con los requerimientos de complejidad (longitud,etc.).
Carlos said
cual es su correo urpiano , usted es lo maximo.
dejeme probar y le aviso
urpiano said
Carlos,
La filosofía de esto es que los problemas que tengas los expongas aquí, de esa manera o te los soluciono yo o te los soluciona otro visitante y además otra persona con el mismo problema puede ver la solución.
Roberto said
Estimado aun no he probado su script. Dejeme felicitarlo por querer compartir su conocimiento y experiencia ya que no todo el mundo lo hace.
Siga asi!
shayro said
Hola a todos ! Los molesto por lo siguiente necesitaria un Script que la idea es correrlo a traves de una GPO de inicio de sesion , que de una lista de usuarios que yo le de en un archivo.txt me chekeara si el o los usuarios de esa lista pertenecen al grupo local Administradores del pc si esta en la lista y esta en el grupo no los toque , sino esta en la lista y esta en el grupo lo borre, , sera mucho pedir ? si que ne la vuelta hay unos cuantos Mostros capaces de lograrlo , recien estoy arrancando con el tema de los Scripts y no soy capaz todavia de crear algo asi , y lo necesito!!.
que lo haga solo con usuarios dentro de este grupo local no con grupos , como pueden ser grupos globales estos ultimos que no los toque ya que tengo al grupo domain admins y un grupo de soporte alli tambien
Gracias por lo que puedan hacer.
Alejandra said
Hola buenas tardes me podrian ayudar a bar cual es el script para renombrar el password de la Pcs locales del dominio obvio mediante un scriot y pues por me dio de una politica.
saludos
PILI said
Hola, a mi me funciona el script bien con clientes XP, pero para clientes con S.O vista no me funciona, no me saca error de mensaje, no pasa nada. Alguien me puede colaborar para el cambio de contraseña para clientes vista? tienen alguna idea de que puede estar faltando?
Muchas Gracias!
PILI
PILI said
Hola Alejandra, yo probe para clientes XP y funciono. Los pasos son asi:
1-Copia el script que esta en fondo gris a partir de la linea: ‘Exigimos la declaración de variables Option Explicit. lo copias en un archivo block de notas y lo guardas con ext vbs.
despues te vas al DA en Computer Configuration->Windows Settings->Scripts y en Startup le das click. alli se te abre una ventana, en la parte de abajo en show files le das click y alli copias el script. despues vas al boton add, alli en browse, seleccionas el script, y en parameters escribes-> (ejemplo para el cambio de un equipo)->/E:nombre_pc /D:dominio.com /U:Administrador «contraseñanueva»
en E: colocas el nombre de l amaquina de la que quieres cambiar.
D: Es el dominio al que perteneces las maquinas
U: Usuario local al que se le quiere cambiar la contraseña
«contraseña nueva»-> password que vas a colocar como nuevo.
Espero sea mas claro para ti!
PILI
urpiano said
PILI,
Este script no está pensado para ejecutarlo como GPO, la idea es ejecutarlo desde la línea de comandos del propio equipo del administrador.
urpiano said
Alejandra,
Mira si esto te puede valer:
Cambiar Password de Administrador Local de Clientes
pez_pijo said
YO tome la funcion que trae el nombre del administrado local,y a mi no me devuelve el nombre del administrador, si lo cambiaron. Poque ???? Siempre me devulelve Administrdores. Como lo puedo solucionar??
Christian Castellanos said
Buenos Dias: Perfecto funcionamiento. Muchas Gracias. Una pregunta…..no hay alguna forma de pasarle como parametro en vez del nombre del pc la ip? He probado pero no lo hace. Es que hay unos equipos que no responde ping por el nombre.
Muchas Gracias
urpiano said
Christian,
Requeriría hacer algunas modificaciones, pues para poder acceder a la cuenta del usuario es necesario saber el nombre del equipo, y si eso no es capaz de hacerlo tu red, será necesario obtener el nombre conectando al WMI del equipo y mirando en su clase Win32_OperatingSystem la propiedad CSName. Así que habría que modificar el script para que mirase si se le ha pasado una IP en lugar de un nombre y en ese caso conectar al servicio WMI del equipo y mirar CSName de la clase Win32_OperatingSystem, para así ya poder cambiar la contraseña. A ver si tengo un rato y lo hago…
Adriana said
Hola. Me puedes ayudar a obtener un reporte de todos los administradores locales de las máquinas de mi red, y de acuerdo a ese reporte se pueden eliminar las cuentas que no deban tener ese privilegio?
Rafael Sabater said
Buenas, ante todo agradecer este script que me ha solucionado un gran problema.
Quisiera hacer una propuesta de mejora para este script, ya que para dominios más o menos grandes como pudiera ser el que administro, los cuales tengan varias delegaciones y demás, tenemos el AD separado en diferentes OU según la distribución geográfica y un número de servidores considerable, lo cual hace que usar el parámetro /n: pueda reslutar algo engorroso ya que la lista es bastante larga, y a la vez hace que ejecutar este comando en modo remoto (a equipos del dominio que están en otra franja horaria/geográfica y nos conectamos a ellos a través de VPN’s) pueda resultar realmente engorroso (lanzarlo a más de 500 equipos puede ser algo muy lento), motivo por el cual con mis escasos conocimientos de vbscript me han llevado a cambiar este código:
str_Dominio = «OU=Mexico,OU=Caribe,DC=» & _
Replace(WScript.Arguments.Named(«D»), _
«.», _
«,DC=»)
Por este otro:
str_Dominio = «OU=Mexico,OU=Caribe,DC=» & _
Replace(WScript.Arguments.Named(«D»), _
«.», _
«,DC=»)
Por lo que opino que estaría bien poder disponer de otro parámetro ( /O: ) por ejemplo, para poder pasarle las OU en las que queremos que se ejecute. Ya que sino tengo que tener diferentes vbs por cada delegación (Que por otra parte no me dan ningún problema, es más para unificar vbs)
Una vez mas agradecer enormemente la ayuda que me han prestado.
Un cordial saludo.
PD: ¿Dispone de algún script para hacer que un usuario de dominio se agregue al grupo administradores locales de las máquinas clientes? gracias.
Carlos said
Hola.
Estoy intentando modificar el password del admor (dejarlo si password), pero no me deja. Que debo hacer?
manga said
muchas gracias por el aporte.
urpiano said
Carlos,
Revisa las políticas de contraseña de ese equipo, vaya a ser que no permita esa configuración que dices. Eso lo haces con gpedit.msc, situándote en el panel del árbol en el nodo «Configuración del equipo\Configuración de usuario\Configuración de seguridad\Directivas de cuenta\Directiva de contraseñas»
Mario said
Estimado,
Me aparece este error:
Equipo Resultado Nº Error Error Usuario
WinXP01 No se ha podido cambiar -2147463168 Usuario no encontrado
Ejecuto lo siguiente:
cscript //nologo cambiar-password.vbs /D:dominio /F:c:\cambiar.txt /T:c:\log.txt «Password»
Por qué?. Me ayudan?.
Saludos,
urpiano said
Mario,
Me temo que he vuelto a ser víctima de WordPress y su manía de cambiar lo que escribes. En concreto habían desaparecido algunas barras de división entera (\) del código. Prueba ahora.
Jose Maria said
Hola Urpiano, enhorabuena por el script, esta muy trabajado, aunque me temo que yo tambien he sido victima del WordPress y eso que no lo uso, y al copiar y ejecutar el codigo me da el mismo error que a Mario ¿Podrias pasarmelo con los (\)?
Un saludo
ALEXANDER said
Hola me pueden ayudar con lo siguiente
1, tengo totaol duda de como hacer un script, haber si es asi, copio a un archivo bloc de notas y lo guardo con extension vbs?? luego en la linea de comados copio ese archivo vbs y se ejecuta solo?? como es???
quisiera hacer un script para listar todas las cuentas del directotio activo
Gracias
urpiano said
ALEXANDER,
Efectivamente, copias el script, lo pegas en notepad y lo guardas como vbs. Desde línea de comandos ejecutas:
cscript //nologo script.vbs
Alejandro said
Buenos dias a tod@s,
quería decirte Urpiano que estoy aprendiendo mucho de ti. Y me alegra ver que segun que cosas las hago igual que tu. Eso me enorgullece, pues esta mas que claro que eres un crack!!
suerte! que sigas teniendo tan buenas ideas!
urpiano said
Alejandro,
Vas a conseguir que me sonroje :-)
Alejandro said
weee… equivoqué el email.
Mio said
Muchísimas gracias!! Miy, muy completo y sencillo de entender.
Fabo said
Bueno, el script esta muy elaborado, funciona chevere cuando las maquinas cliente no tienen activo el firewall de windows, pero estoy intentando ejecutarlo a 2500 clientes y los que tienen FW no responden ping, entonces los omite.
manolo said
Hola Fernando
Estoy intentado cambiar la contraseña de dos equipos y los dos me dan el mismo error » No se ha podido cambiar -2147463168 Usuario no encontrado»
El comando que estoy ejecutando es el siguiente:
cscript cambiar-password.vbs /E:sistemas-red,czc7091thn /T:C:\cambiar-pass\listadoscambiar.txt «123456»
También he probado con;
cscript cambiar-password.vbs /E:sistemas-red,czc7091thn /T:C:\cambiar-pass\listadoscambiar.txt /U:Administrador «123456»
El comando lo ejecuto desde un controlador de domino Win2k como Administrador y los pcs son uno WinXpPro o otro Win2KPro.
Alguien me puede ayudar.
urpiano said
Manolo,
¡Esto me pasa por no tratar con Windows 2000 desde hace tiempo, pues es algo documentado el que pase! A partir de Windows XP ese error ya no se produce, de ahí el que yo no haya tenido, y por tanto detectado, ese problema.
Binding with the WinNT provider may generate error 0x80005000
http://support.microsoft.com/default.aspx?scid=kb;en-us;321210
Es decir es algo tan tonto como que donde pone en el código:
Debería poner:
Jose said
Por favor como haría para cambiar la contraseña de todos los equipos dentro de una OU y no de todo el dominio???
urpiano said
Para hacer eso, podrías agregar un nuevo parámetro que fuese el nombre distinguido de la OU, de manera que si este parámetro está presente, se ignora el parámetro D, de forma que la variable str_Dominio tenga como valor el nombre distinguido de la OU en lugar del dominio y así que la consulta se ejecute sobre la OU. Pongamos que al parámetro le llamamos OU, sería modificar en la función f_RevisarArgumentos que donde dice:
urpiano said
Ejem, se me olvidó al final una última línea con un End If
Mary said
hola Urpiano…he probado el script desde un DC en windows server 2008 r2, para hacer el cambio de contraseña de adm local en un equipo Windows 7 entrerprise q esta dentro del dominio y me sale el siguiente error: -2147463168 usuario no encontrado. El comando q ejecute fue el siguiente: C:\>cscript //nologo cambiar-pass.vbs /E:nombreequipo /D:dominio U/: administrator «nuevacontraseña» ..Porfavor ayuda para dar con la solucion a este error!!!
evil said
buenas tardes
esto funciona para windows 7?
Argenis said
Esto es lo que estaba buscando, estoy a punto de comenzar un proyecto en la empresa donde estoy ya que es tiempo de realizar el cambio de contraseña de los casi 300 server que tenemos y el año pasado los hice de forma manual…. Lo probare pero desde ya altamente agradecido… Eres lo máximo… un Guru… jejeje
xulub said
Hola esta super el script !! yo no tengo dominio en active directory sin emabrgo si tengo mis equipos en un DNS pero al tratar de cambiar me aparece el siguiente error
Equipo Resultado Nº Error Error Usuario
x1.dns No se ha podido cambiar 70 Permission denied Administrator
x2.dns No se ha podido cambiar 70 Permission denied Administrator
Muchas gracias por el aporte Urpiano
Laura said
Perfecto!!! Muchas gracias, esta genial el script, estoy segura que le daré mucho uso.
Jose Luis Rodriguez Garcia said
Buenas Tardes.
estoy usando el script por que me parece de gran ayuda solo que al ejecutarlo en un equipo de prieba con win10 al ejecutar el script solo devuelve lo siguiente.
cscript //nologo cambio.vbs /e VH94Y0G2 «patito2512»
Equipo Resultado Nº Error Error Usuario
y no realiza el cambio.
Ana said
Genial!!! Muchas Gracias por tu Script!! me ha ayudado muchísimo!!! un trabajo enorme!!!
Jose said
Gracias Urpiano, tenia rato tratando de aplicar cambio de nombre y clave a Admimistrador local por GPO y nada funciono, hasta ahora con tu script me funciona para cambio de clave por comando directo desde el servidor, lastima que no funciona con la modificacion que posteaste de las OU.
Tengan presente que no funciona con el firewall activo el los equipos
Jose said
Post data: a mi me funciono con Win10
MARIO BORGES said
Said, el script cambia la contraseña de mi usuario «administrator» en mi Win SRVR 2012 ??, claro también a los equipos que se indique
MARIO BORGES said
Al ejecutar el script en mi equipo con Win 8.1., siempre obtengo el resultado que el Equipo No Responde al Ping.