Bienvenido: ( Identificarse | Registrarse )      
Foros de Trucos Windows
 
Closed TopicStart new topicStart Poll

Outline · [ Estándar ] · Lineal+

> Cambiar comentario de red a equipos NT/2000/2003, Utilizando un script

dk01
post Mar 2 2007, 02:59 PM
Publicado: #1


Médico brujo (de turno)
Group Icon

Grupo: Admin
Mensajes: 4.006
Registrado: 25-July 04
Desde: Buenos Aires
Miembro nº: 8.753



Para cambiar el comentario de red de uno o más equipos de manera simple en Windows XP/2000/2003, podemos recurrir al siguiente script:

QUOTE
'***************************************************************************
'cambiar-comentario-a-equipos.vbs

'Script VBScript que establece el comentario de uno o más equipos
'de la red
'
'Sintaxis
'
'{wscript | cscript [//nologo]} [/E:equipos] [/F:fichero equipos]
'      [/U:usuario de conexion [/C:contraseña]] [/?] [comentario]
'
'Siendo
'
'    - [comentario]. Parámetro opcional que es el comentario que se
'                    pondrá al equipo. En caso de ser omitido, se
'                    vaciará el comentario.
'
'    - /E: opcional. Lista de equipos a los que se quiere cambiar
'                    la letra del CD-ROM. Esta lista son los nombres
'                    de los equipos separados por comas. Si se omite
'                    este parámetro y también el parámetro /L, se
'                    realizará en el equipo local.
'
'    - /F: opcional. Nombre de un fichero de texto en el que está
'                    la lista de equipos a los que se debe cambiar
'                    la letra del CD-ROM. Los nombres deben ser
'                    NetBios y ha de ir un equipo por línea. Si se
'                    omite este parámetro y también el parámetro
'                    /E, se realizará en el equipo local.
'
'    - /U: opcional. Nombre del usuario que se utilizará para conectar
'                    con el servicio WMI del equipo. En caso de
'                    omitirse se utilizará el usuario que lanza el
'                    script.
'
'    - /C: opcional. Cuando está establecido el parámetro U, este
'                    parámetro nos permite especificar la contraseña
'                    del usuario que conectará con el servicio WMI.
'                    Si no está especificado el parámetro U se
'                    ignorará. Si está establecido el parámetro U
'                    y este parámetro es omitido, el script presentará
'                    una ventana de Internet Explorer donde entrar la
'                    contraseña. Es recomendable no usar este parámetro,
'                    pues implica que se teclea la contraseña y alguien
'                    puede verla; como el usuario debe tener derechos
'                    administrativos, es peligroso que tengamos la
'                    la contraseña expuesta. Al usar una ventana de IE
'                    para teclear la contraseña, esto se realiza en
'                    una caja de texto de tipo password, quedando
'                    enmascarada, protegida de ojos indiscretos.
'
'    - /?: opcional. Muestra la ayuda en línea.
'
'Nota: si se incluyen los parámetros /E y/L a la vez, prevalecerá
'      el parámetro /L
'
'Ejemplos:
'
'- Dejamos el comentario del equipo local en blanco
'
'wscript cambiar-comentario-a-equipos.vbs
'
'- Establecemos "Equipo de Pippin" en el equipo local
'
'cscript cambiar-comentario-a-equipos.vbs "Equipo de Pippin"
'
'- Dejamos el comentario en blanco en los equipo snaug, grima y saruman
'
'cscrip //nologo /E:snaug,grima,saruman
'
'- Establecemos "Otro equipo de Rohan" en los equipos del fichero recibido
'  como parámetro /F utilizando las credenciales del usuario rohan\theoden
'
'cscript /F:c:\Listados\Rohan.txt /U:rohan\theoden "Otro equipo de Rohan"
'
'- Dejamos en blanco el comentario de los equipos del fichero recibido como
'  parámetro /F utilizando las credenciales del usuario mordor\reybrujo y
'  suministrando su constraseña
'
'cscript /F:c\Listados\CirithUngol.txt /U:mordor\reybrujo /C:"quiero sangre"
'
'© Fernando Reyes - Enero de 2007
'***************************************************************************

'Requerimos la declaración de variables
Option Explicit

'Declaración de variables
Dim str_Comentario, str_Usuario, str_Clave
Dim arr_Equipos, str_Resumen, str_Devolucion
Dim obj_ServicioWMI, str_Equipo

'Si se pide la ayuda en línea, mostrarla es lo único que se hará
If WScript.Arguments.Named.Exists("?") Then

    Call s_Ayuda("|*********************|" & vbCrLf & _
                "|*      Ayuda      *|" & vbCrLf & _
                "|*********************|")
    WScript.Quit 0

End If

'Vemos ahora si hemos recogido lista de equipos
If WScript.Arguments.Named.Exists("E") _
Or WScript.Arguments.Named.Exists("F") Then

    'Primero miramos si está el parámetro F, fichero con
    'la lista de equipo, y de existir procesaremos los
    'equipos que contenga. De esta manera hacemos que
    'sea ignorado parámetro E, si está presente
    If WScript.Arguments.Named.Exists("F") Then

        'Obtenemos la lista de equipos desde el fichero,
        'verificando que la función que lo lee devuelve
        'True, pues si devuelve False es que no se ha podido
        'abrir el fichero y por tanto debemos terminar
        'el script
        If Not f_LeeFichero(WScript.Arguments.Named("F"), _
                            str_Equipo) Then

            WScript.Echo "Error 1: No se pudo abrir el " & _
                        "fichero con la lista de equipos"
            WScript.Quit 1

        Else

            'Se pudo abrir el fichero; hacemos Split considerando
            'la coma como separador para así tener la lista como
            'un array
            arr_Equipos = Split(str_Equipo,",")

        End If

    Else

            'Cargamos la lista haciendo Split y considerando la coma
            'como separador de elementos
            arr_Equipos = Split(WScript.Arguments.Named("E"),",")

    End If

Else

    'si no se han recibido ni /E ni /F, establecemos el equipo local
    arr_Equipos = Array(".")

End If

'Miramos si se ha recibido el parámetro de usuario
If WScript.Arguments.Named.Exists("U") Then

    'Como se ha recibido, lo recogemos
    str_Usuario = WScript.Arguments.Named("U")

    'Miramos si se ha recibido contraseña
    If WScript.Arguments.Named.Exists("C") Then

        'si se ha recibido lo recogemos
        str_Clave = WScript.Arguments.Named("C")

    Else

        'Como no se ha recibido, llamamos a la función
        'que pedirá al usuario que entre la contraseña
        str_Clave= f_EntrarClave("\\fernandor-f\com" & _
                            "partido\usuario-conexion.htm")

    End If

'No se ha recibido parámetro de usuario, dejamos las
'variables vacías
Else

    str_Usuario = ""
    str_Clave = ""

End If

'Si se ha omitido el parámetro de comentario, ponemos vacía
'la variable que lo contiene
If WScript.Arguments.Unnamed.Count = 0 Then

    str_Comentario = ""

'Como se ha establecido lo ponemos en la variable. Si se hubiera
'pasado más de un parámetro sin nombre, sólo se tendrá en cuenta
'el primero, los demás serán ignorados. Esto quiere decir que si
'el comentario contiene espacios, es necesario que lo encerremos
'entre comillas, pues si no sólo se establecerá la primera palabra
'como comentario
Else

    str_Comentario = WScript.Arguments.Unnamed(0)

End If

'Iniciamos la variable que irá almacenando los resultados
'del proceso; será usada para presentar el resumen al final
str_Resumen = vbCrLf & vbCrLf & _
              "Nom. equipo" & vbTab & "Resultado" & vbCrLf & _
              "============================" & vbCrLf

'Recorremos la lista de nombres de equipos
For Each str_Equipo In  arr_Equipos

    'Vaciamos la variable con la devolución del resultado
    'del equipo anterior
    str_Devolucion = ""

    'Llamamos al procedimiento encargado de cambiar la letra
Call s_ProcesaEquipo(str_Comentario, _
                      str_Equipo, str_Usuario, _
                      str_Clave, str_Devolucion)

'Añadimos el resultado del equipo actual al resumen
str_Resumen = str_Resumen & str_Devolucion & vbCrLf

Next

'Mostramos el resumen
WScript.Echo str_Resumen

Sub s_ProcesaEquipo(str_Comentario, str_Equipo, _
                    str_Usuario, str_Clave, _
                    str_Devolucion)

    'Constantes para la forma de consultar con
    'WQL al servicio WMI
    Const wbemFlagReturnImmediately = &h10
    Const wbemFlagForwardOnly = &h20

    'Declaración de variables
    Dim obj_ServicioWMI, col_OS, obj_OS

    'Llamamos a la función que nos permite cargar el objeto
    'servicio WMI. Si la función devuelve False es que no se
    'ha podido crear
    If Not f_ServicioWMI(obj_ServicioWMI, _
                        str_Usuario, _
                        str_Clave, _
                        str_Equipo) Then

        'Lanzamos el mensaje de que ha habido un error en la conexión
        'al servicio WMI
        Wscript.Echo "Error 2: error al conectar con el servicio WMI"

        'Terminamos el script con el código de error 2
        WScript.Quit 2

    End If

    Set col_OS = obj_ServicioWMI.InstancesOf("Win32_OperatingSystem")

    For Each obj_OS in col_OS

      obj_OS.Description = str_Comentario
      obj_OS.Put_

      str_Devolucion = str_Equipo & vbTab & "Cambiado"

    Next

    If Len(str_Devolucion) = 0 Then str_Devolucion = str_Equipo & vbTab & "No se cambió"

End Sub

Sub s_Ayuda(str_Texto)

    WScript.Echo vbCrLf & vbCrLf

    'Si se ha recibido algún texto lo mostramos y lo separamos de la
    'ayuda con dos saltos de línea
    If Len(str_Texto) > 0 Then _
                          WScript.Echo str_Texto & vbCrLf & vbcrlf

    WScript.Echo "cambiar-comentario-a-equipos.vbs"
    WScript.Echo ""
    WScript.Echo "Script VBScript que establece el comentario de uno o más equipos"
    WScript.Echo "de la red"
    WScript.Echo ""
    WScript.Echo "Sintaxis"
    WScript.Echo ""
    WScript.Echo "{wscript | cscript [//nologo]} [/E:equipos] [/F:fichero equipos]"
    WScript.Echo "      [/U:usuario de conexion [/C:contraseña]] [/?] [comentario]"
    WScript.Echo ""
    WScript.Echo "Siendo"
    WScript.Echo ""
    WScript.Echo "    - [comentario]. Parámetro opcional que es el comentario que se"
    WScript.Echo "                    pondrá al equipo. En caso de ser omitido, se"
    WScript.Echo "                    vaciará el comentario."
    WScript.Echo ""
    WScript.Echo "    - /E: opcional. Lista de equipos a los que se quiere cambiar"
    WScript.Echo "                    la letra del CD-ROM. Esta lista son los nombres"
    WScript.Echo "                    de los equipos separados por comas. Si se omite"
    WScript.Echo "                    este parámetro y también el parámetro /L, se"
    WScript.Echo "                    realizará en el equipo local."
    WScript.Echo ""
    WScript.Echo "    - /F: opcional. Nombre de un fichero de texto en el que está"
    WScript.Echo "                    la lista de equipos a los que se debe cambiar"
    WScript.Echo "                    la letra del CD-ROM. Los nombres deben ser"
    WScript.Echo "                    NetBios y ha de ir un equipo por línea. Si se"
    WScript.Echo "                    omite este parámetro y también el parámetro"
    WScript.Echo "                    /E, se realizará en el equipo local."
    WScript.Echo ""
    WScript.Echo "    - /U: opcional. Nombre del usuario que se utilizará para conectar"
    WScript.Echo "                    con el servicio WMI del equipo. En caso de"
    WScript.Echo "                    omitirse se utilizará el usuario que lanza el"
    WScript.Echo "                    script."
    WScript.Echo ""
    WScript.Echo "    - /C: opcional. Cuando está establecido el parámetro U, este"
    WScript.Echo "                    parámetro nos permite especificar la contraseña"
    WScript.Echo "                    del usuario que conectará con el servicio WMI."
    WScript.Echo "                    Si no está especificado el parámetro U se"
    WScript.Echo "                    ignorará. Si está establecido el parámetro U"
    WScript.Echo "                    y este parámetro es omitido, el script presentará"
    WScript.Echo "                    una ventana de Internet Explorer donde entrar la"
    WScript.Echo "                    contraseña. Es recomendable no usar este parámetro,"
    WScript.Echo "                    pues implica que se teclea la contraseña y alguien"
    WScript.Echo "                    puede verla; como el usuario debe tener derechos"
    WScript.Echo "                    administrativos, es peligroso que tengamos la"
    WScript.Echo "                    la contraseña expuesta. Al usar una ventana de IE"
    WScript.Echo "                    para teclear la contraseña, esto se realiza en"
    WScript.Echo "                    una caja de texto de tipo password, quedando"
    WScript.Echo "                    enmascarada, protegida de ojos indiscretos."
    WScript.Echo ""
    WScript.Echo "    - /?: opcional. Muestra la ayuda en línea."
    WScript.Echo ""
    WScript.Echo "Nota: si se incluyen los parámetros /E y/L a la vez, prevalecerá"
    WScript.Echo "      el parámetro /L"
    WScript.Echo ""
    WScript.Echo "Ejemplos:"
    WScript.Echo ""
    WScript.Echo "- Dejamos el comentario del equipo local en blanco"
    WScript.Echo ""
    WScript.Echo "wscript cambiar-comentario-a-equipos.vbs"
    WScript.Echo ""
    WScript.Echo "- Establecemos ""Equipo de Pippin"" en el equipo local"
    WScript.Echo ""
    WScript.Echo "cscript cambiar-comentario-a-equipos.vbs ""Equipo de Pippin"""
    WScript.Echo ""
    WScript.Echo "- Dejamos el comentario en blanco en los equipo snaug, grima y saruman"
    WScript.Echo ""
    WScript.Echo "scrip //nologo /E:snaug,grima,saruman"
    WScript.Echo ""
    WScript.Echo "- Establecemos ""Otro equipo de Rohan"" en los equipos del fichero recibido"
    WScript.Echo "  como parámetro /F utilizando las credenciales del usuario rohan\theoden"
    WScript.Echo ""
    WScript.Echo "cscript /F:c:\Listados\Rohan.txt /U:rohan\theoden ""Otro equipo de Rohan"""
    WScript.Echo ""
    WScript.Echo "- Dejamos en blanco el comentario de los equipos del fichero recibido como"
    WScript.Echo "  parámetro /F utilizando las credenciales del usuario mordor\reybrujo y"
    WScript.Echo "  suministrando su constraseña"
    WScript.Echo ""
    WScript.Echo "cscript /F:c\Listados\CirithUngol.txt /U:mordor\reybrujo /C:""quiero sangre"""
    WScript.Echo ""

End Sub 's_Ayuda

Function f_EntrarClave(str_HTML)
'El propósito de esta función es el proveer al usuario de una caja
'de texto en la que teclear una contraseña sin revelarla, pues
'la caja de texto es de tipo password. Para ello se crea una página
'web que es cargada en un Internet Explorer y se recoge de éste
'la contraseña tecleada y se convierte en la devolucion de la función.
'La ruta y nombre de la página es recibida como parámetro por la
'función, lo que permite reutilizar esta función en más scripts y
'personalizar la página para cada script, lo único que debe ser igual
'en todas las páginas que se quieran utilizar es que el botón debe
'llamarse Aceptar, el control oculto AceptarPulsado y la caja de texto
'Clave.

'Esta función está basada en:
'http://www.microsoft.com/technet/scriptcenter/guide/sas_ent_lppm.mspx?mfr=true

'En el ejemplo de TechNet se pone una ruta local (c:\carpeta\fichero.asp)
'para la ubicación del fichero. Esto no es correcto cuando estamos de
'XP SP2 en adelante, pues la navegación segura interfiere con el script,
'Ya que contiene un script VBScript. Para evitar esto, yo lo que hago
'es situar el fichero en una carpeta compartida y acceder a él con su
'ruta UNC; de esta manera es tratado como de la zona de intranet y no
'hay problemas. También se podría colocar en un servidor Web que fuese
'de la intranet o de los sitios de confianza y referirse a él por su
'ruta http

    'Declaramos variables
    Dim obj_IE

    'Creamos un objeto Internet Explorer
    Set obj_IE = WScript.CreateObject _
              ("InternetExplorer.Application", "IE_")

    'Cargamos el navegador con la página recibida como parámetro
    obj_IE.Navigate "file:///" & str_HTML

    'Con este bucle esperamos a que la página esté completamente cargada
    Do

        WScript.Sleep 10

    Loop Until obj_IE.ReadyState = 4   

    'Establecemos propiedades del navegador
    obj_IE.ToolBar = 0
    obj_IE.StatusBar = 0
    obj_IE.Width = 400
    obj_IE.Height = 250
    obj_IE.Left = 0
    obj_IE.Top = 0
    obj_IE.Visible = 1

    'En este bucle esperamos a que se haya pulsado el botón
    '"Aceptar"
    Do While (obj_IE.Document.All.AceptarPulsado.Value = "")

        WScript.Sleep 250

    Loop

    'Recogemos la contraseña entrada
    str_Clave = obj_IE.Document.All.Clave.Value

    'Cerramos el navegador
    obj_IE.Quit

    'Esperamos a que esté cerrado
    WScript.Sleep 250

    'Establecemos la contraseña como devolución de la función
    f_EntrarClave = str_Clave 

    'Limpiadita de culito :-)
    Set obj_IE = Nothing

End Function 'f_EntrarClave

Function f_ServicioWMI(obj_ServicioWMI, str_Usuario, _
                      str_Clave, str_Equipo)
'Esta función permite conectar con el servicio WMI de un equipo.
'La conexión puede ser realizada directamente por el usuario
'que ha lanzado el script o por otro usuario cuyas credenciales
'son recibidas como parámetros. La función recibe como parámetro
'un objeto que será utilizado como parámetro de salida, siendo
'creado por la función como objeto de servicio WMI del equipo
'recibido como parámetro

    Dim obj_LocalizadorWMI
    Dim lng_Respuesta

    'Si hemos recibido nombre de usuario, debemos conectar
    'al servicio WMI del equipo como el usuario
    'recibido
    If Len(str_Usuario) > 0 Then

        'Para poder especificar unas credenciales alternativas,
        'debemos crear primero un localizador WMI
        Set obj_LocalizadorWMI = CreateObject( _
                                  "WbemScripting.SWbemLocator")

        'Establecemos control de errores
        On Error Resume Next
        'Conectamos con el servicio WMI del equipo con las
        'credenciales pasadas
        Set obj_ServicioWMI = obj_LocalizadorWMI.ConnectServer( _
                                      str_Equipo, "root\cimv2", _
                                      str_Usuario, str_Clave)

        'Si se ha producido algún error...
        If Err.Number <> 0 Then

            'Lo primero es vaciar la variable con el localizador WMI
            Set obj_LocalizadorWMI = Nothing

            'Mostramos el error
            WScript.Echo vbCrLf & vbCrLf & _
                        Err.Number & ": " & Err.Description

            'Vaciamos el objeto Err
            Err.Clear

            'Devolvemos False
            f_ServicioWMI = False

            'Salimos de la función
            Exit Function

        End If

    Else

        'Podemos conectar directamente con el servicio WMI del equipo
        'sin necesidad de utilizar el localizador WMI ya que no hay
        'que hacerlo con otras credenciales distintas a las del
        'usuario que lanza el script
        Set obj_ServicioWMI = GetObject("winmgmts:\\" & str_Equipo & _
                                        "\root\CIMV2")

        'si se ha producido algún error...
        If Err.Number <> 0 Then

            'Mostramos el error
            WScript.Echo Err.Number & ": " & Err.Description & _
                        vbCrLf & vbCrLf

            'Vaciamos el objeto Err
            Err.Clear

            'Devolvemos False
            f_ServicioWMI = False

            'Salimos de la función
            Exit Function

        End If

    End If

    'No se han producido errores, devolvemos True
    f_ServicioWMI = True

    'Limpieza de culito :-)
    Set obj_LocalizadorWMI = Nothing

End Function 'f_ServicioWMI

Function f_LeeFichero(str_Fichero, str_Contenido)
'Esta función recibe una ruta y nombre de fichero de
'texto, y una variable usada como salida para almacenar
'el contenido del fichero. Devuelve True si hubo éxito
'al leer el fichero y False en caso contrario

    Dim obj_FS, obj_TS

    'Creamos un objeto FileSysteObject
    Set obj_FS = CreateObject("scripting.filesystemobject")

    'Establecemos control de errores
    On Error Resume Next

    'Cargamos el fichero en el objeto TextStream
    Set obj_TS = obj_FS.OpenTextFile(str_Fichero, 1)

    'Si no ha habido errores...
    If Err.Number = 0 Then

        'Ponemos el contenido del fichero en la variable de
        'salida, sustituyendo los saltos de línea por comas,
        'preparando la jugada para el uso de Split
        str_Contenido = Replace(obj_TS.ReadAll,vbCrLf,",")

        'Como ha habido éxito la función devuelve True
        f_LeeFichero = True

        'Cerramos el fichero
        obj_TS.Close

    Else

        'Ha habido un error a la hora de abrir el fichero.
        'Mostrammos el número y descripción del error
        WScript.Echo "Error " & Err.Number & _
                    ": " & Err.Description

        'Como ha habido error la función devuelve False
        f_LeeFichero = False

        'Limpiamos errores
        Err.Clear         

    End If

    'Cleaning butt :-)
    Set obj_TS = Nothing
    Set obj_FS = Nothing

End Function 'f_LeeFichero


Copiar lo que está en el quote y guardarlo con extensión .vbs

La implementacion es a traves de la consola o del cuadro de ejecución de la máquina (inicio -> ejecutar).

Desde consola:

cscript [nombre del archivo].vbs [comentario]

También se puede consultar la ayuda reemplazando el comentario por el modificador /?

Desde el cuadro de ejecución:

wscript [nombre del archivo].vbs [comentario]

También se puede consultar la ayuda reemplazando el comentario por el modificador /?


User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
Closed TopicTopic OptionsStart new topic

Collapse

> Topicos similares

No puedo cambiar permisos en carpetas compartidas Majere 72 2 Hoy, 08:25 PM
By: Majere
Linux a Dominio win 2003 falconhorse28 47 3 Jul 21 2008, 11:56 PM
By: ornitorrinco's
problemas con office 2003 vilchitos 66 2 Jul 21 2008, 07:13 PM
By: vilchitos
cambiar fecha cuenta limitada albertoquevedo 91 4 Jul 16 2008, 06:13 PM
By: albertoquevedo
Outlook 2003 zodiac_ 131 0 Jul 11 2008, 06:33 PM
By: zodiac_

Google
Web www.trucoswindows.net