El Blog de Gualtrysoft

Windows 2000/2003/2008, Active Directory, VBScript, Hyper-V, PowerShell y todo aquello interesante a la hora de usar, configurar y administrar Windows Server. También tenemos longanizas…

Script VBScript Para Cambiar La Ruta De Unidad Personal

Posted by urpiano en Miércoles 14 \14\UTC febrero \14\UTC 2007

Este script permite cambiar la ruta y letra de la unidad personal de los usuarios de un dominio. Sólo realiza los cambios en aquellos usuarios que ya tienen asignada una ruta de unidad personal. Se puede hacer con todos los usuarios del dominio o sólo con aquellos qué se pasan como lista, ya sea en la línea de comandos o con un fichero.

'cambia-unidad-personal.vbs

'Script para cambiar la ruta y letra de la unidad personal
'de los usuarios de un dominio, que ya tengan una asignada.

'Sintaxis

'cscript [//nologo] dominio ruta unidad [/U:lista de usuarios] [/F:fichero]

'Siendo

'    - dominio: nombre NetBios del dominio al que pertenecen los usuarios.

'    - ruta: ruta UNC de la carpeta raíz de los directorios personales; el
'            script creará una subcarpeta cuyo nombre será el nombre NetBios
'            del usuario.

'    - unidad: letra de unidad que se asignará a la unidad personal del usuario.

'    - /U (opcional): lista de nombres NetBios de usuarios separados por coma a
'            los que se les cambiará la unidad personal.

'    - /F (opcional): fichero de texto en el cual están los nombres NetBios de 
'            los usuarios a los que se cambiará la uinidad personal, un usuario
'            por línea.

'Nota

'    En el caso de que se omitan los parámetros /U y /F se cambiará la unidad
'    personal a todos los usuarios del dominio que ya tengan una asignada. En 
'    el caso de pasarse ambos parámetros opcionales, sólo el parámetro /F será
'    tomado en cuenta.

'Ejemplos

'- Cambia la letra de unidad personal a h:, la ruta a \dragon-rojohobbits a
'  todos los usuarios que tienen asignada unidad personal del dominio comarca:

'  cscript comarca \dragon-rojohobbits h:

'- Cambia la letra de unidad personal a h:, la ruta a \dragon-rojohobbits a
'  los usuarios pippin, merry y sam, del dominio comarca, si ya tenían unidad
'  personal asignada:

'  cscript comarca \dragon-rojohobbits h: /u:pippin,merry,sam

'- Cambia la letra de unidad personal a h:, la ruta a \dragon-rojohobbits a
'  los usuarios, del dominio comarca, listados en el fichero c:hobbits.txt,
'  ,si ya tenían unidad personal asignada:

'  cscript comarca \dragon-rojohobbits h: /f:c:hobbits.txt


 
'© Fernando Reyes - Febrero de 2007 

If Not WScript.Arguments.Unnamed.Count = 3 Then

    WScript.Echo vbCrLf & "Error 1: Número de parámetros incorrecto"
    Call s_Ayuda
    WScript.Quit 1
    
End If

'recogemos los parámetros requeridos
str_Dominio = WScript.Arguments.Unnamed(0)
str_Ruta = WScript.Arguments.Unnamed(1)

'Nos cercioramos de que la ruta termina en slash
If Not Right(str_Ruta,1)="" Then str_Ruta = str_Ruta & ""

'Recogemos el parámetro requerido de unidad
str_Unidad = WScript.Arguments.Unnamed(2)

'Revisamos que sea una unidad válida
If Len(str_Unidad) <> 2 _
Or Not Right(str_Unidad,1) = ":" Then

    WScript.Echo vbCrLf & "Error 2: Nombre de unidad incorrecto"
    Call s_Ayuda
    WScript.Quit 2

End If

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

    'Primero miramos si está el parámetro F, fichero con
    'la lista de usuarios, y de existir procesaremos los
    'usuarios que contenga. De esta manera hacemos que
    'sea ignorado el parámetro U, 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_Usuario) Then

            WScript.Echo "Error 1: No se pudo abrir el " & _
                         "fichero con la lista de usuarios"
            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_Usuarios = Split(str_Usuario,",")

        End If

    Else

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

    End If

Else

    'si no se han recibido ni /E ni /F, establecemos el todos
    'los usuarios del dominio
    
    'Creamos un objeto de tipo dominio, abriendo el dominio "midominio"
    Set obj_Dominio = GetObject("WinNT://" & str_Dominio & ",Domain")
    
    'Aplicamos un filtro al dominio para obtener los usuarios en un array
    obj_Dominio.Filter = Array("User")

    'Iniciamos el índice de usuarios
    int_Usuario = 0
    
    'Cargamos el array recorriendo los usuarios del dominio
    For Each obj_Nombre_Usuario in obj_Dominio

        ReDim Preserve arr_Usuarios(int_Usuario)
        
        arr_Usuarios(int_Usuario) = obj_Nombre_Usuario.Name
        
        int_Usuario = int_Usuario + 1
        
    Next

End If
 
'Una vez tenemos el array de usuarios lo recorremos uno a uno
For int_Usuario = 0 To Ubound(arr_Usuarios)
        
    'Mostramos por pantalla el usuario con el que estamos en este momento
    Wscript.Echo arr_Usuarios(int_Usuario)
      
    'Creamos un objeto usuario (el anterior sólo es un nombre) con el 
    'que trabajaremos
    Set obj_Usuario_A_Cambiar = GetObject("WinNT://" & str_Dominio & "/" & _
                                    arr_Usuarios(int_Usuario) & ",User")
        
    If Not obj_Usuario_A_Cambiar.HomeDirectory = "" Then
 
 'Mostramos en pantalla la ruta original
 wscript.Echo "Antiguo: " & obj_Usuario_A_Cambiar.HomeDirectory & _
                     " en " & obj_Usuario_A_Cambiar.HomeDirDrive
        
        'Cambiamos a la nueva ruta
        obj_Usuario_A_Cambiar.HomeDirectory = str_Ruta & _
                                           obj_Usuario_A_Cambiar.Name
 
        'Establecemos la unidad u: como unidad personal
        obj_Usuario_A_Cambiar.HomeDirDrive = str_Unidad
 
        wscript.Echo "Nuevo: " & str_Ruta & obj_Usuario_A_Cambiar.Name & _
                     " en " & str_Unidad


        'Mostramos la nueva ruta
        wscript.Echo "Nuevo: " & obj_Usuario_A_Cambiar.HomeDirectory & _
                     " en " & obj_Usuario_A_Cambiar.HomeDirDrive
 
    End If 
       
Next














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


Sub s_Ayuda()

WScript.Echo ""
WScript.Echo ""
WScript.Echo "cambia-unidad-personal.vbs"
WScript.Echo ""
WScript.Echo "Script para cambiar la ruta y letra de la unidad personal"
WScript.Echo "de los usuarios de un dominio, que ya tengan una asignada."
WScript.Echo ""
WScript.Echo "Sintaxis"
WScript.Echo ""
WScript.Echo "cscript [//nologo] dominio ruta unidad [/U:lista de usuarios]" & _
                   " [/F:fichero]"
WScript.Echo ""
WScript.Echo "Siendo"
WScript.Echo ""
WScript.Echo "    - dominio: nombre NetBios del dominio al que pertenecen" & _
                   " los usuarios."
WScript.Echo ""
WScript.Echo "    - ruta: ruta UNC de la carpeta raíz de los direc" & _
                   "torios personales; el"
WScript.Echo "            script creará una subcarpeta cuyo nombre será" & _
                   " el nombre" & _
                   " NetBios"
WScript.Echo "            del usuario."
WScript.Echo ""
WScript.Echo "    - unidad: letra de unidad que se asignará a la unidad personal" & _
                   " del usuario."
WScript.Echo ""
WScript.Echo "    - /U (opcional): lista de nombres NetBios de usuarios separados" & _
                   " por coma a"
WScript.Echo "            los que se les cambiará la unidad personal."
WScript.Echo ""
WScript.Echo "    - /F (opcional): fichero de texto en el cual están los nombres" & _
                   " NetBios de "
WScript.Echo "            los usuarios a los que se cambiará la uinidad personal," & _
                   " un usuario"
WScript.Echo "            por línea."
WScript.Echo ""
WScript.Echo "Nota"
WScript.Echo ""
WScript.Echo "    En el caso de que se omitan los parámetros /U y /F s" & _
                   "e cambiará" & _
                   " la unidad"
WScript.Echo "    personal a todos los usuarios del dominio que ya tengan una" & _
                   " asignada. En "
Wscript.Echo "    el caso de pasarse ambos parámetros opcionales, sólo el" & _
                   " parámetro /F será"
Wscript.Echo "    tomado en cuenta."
WScript.Echo ""
WScript.Echo "Ejemplos"
WScript.Echo ""
WScript.Echo "- Cambia la letra de unidad personal a h:, la ruta a \drag" & _
                   "on-rojohobbits a"
WScript.Echo "  todos los usuarios que tienen asignada unidad personal del" & _
                   " dominio comarca:"
WScript.Echo ""
WScript.Echo "  cscript comarca \dragon-rojohobbits h:"
WScript.Echo ""
WScript.Echo "- Cambia la letra de unidad personal a h:, la ruta a \dra" & _
                   "gon-rojohobbits a"
WScript.Echo "  los usuarios pippin, merry y sam, del dominio comarca, si" & _
                   " ya tenían unidad"
WScript.Echo "  personal asignada:"
WScript.Echo ""
WScript.Echo "  cscript comarca \dragon-rojohobbits h: /u:pippin,m" & _
                   "erry,sam"
WScript.Echo ""
WScript.Echo "- Cambia la letra de unidad personal a h:, la ruta a \dra" & _
                   "gon-rojohobbits a"
WScript.Echo "  los usuarios, del dominio comarca, listados en el fic" & _
                   "hero c:hobbits.txt,"
WScript.Echo "  ,si ya tenían unidad personal asignada:"
WScript.Echo ""
WScript.Echo "  cscript comarca \dragon-rojohobbits h: /f:c:hobbits.txt"
WScript.Echo ""
WScript.Echo ""

End Sub

5 comentarios to “Script VBScript Para Cambiar La Ruta De Unidad Personal”

  1. Pablo Vazquez said

    Muy interesante este scripts.
    Solo una cosa, está cortado, no se ven algunas partes del codigo como la sintaxis.

  2. urpiano said

    ¿Qué es lo que está cortado? Yo lo veo bien desde dos equipos distintos…

  3. inquina said

    yo lo veo mal, hasta que cierro el panel lateral del navegador y la página se expande,
    entonces sí se abarca todo el script.
    :-)

  4. alann said

    Holaa urpiano gracias por compartir tu trabajo, mira soy un novato en esto de scripts y quisiera saber si existiera un script que al momento de ingresar a archivos de la red pida usuario y contraseña y q inmediatamente lo direccione a se carpeta personal en el servidor, indiferentemente de que usuario hubiese iniciado sesion en la computadora ? por favor alguien ya debio hacer esto antes , yo lo necesito para colocarlo a los alumnos en la universidad

  5. urpiano said

    Alann,

    Eso no es posible, que yo sepa. Los usuarios deben iniciar sesión con su usuario, y así se montará su unidad personal.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: