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 Copiar Estructuras De OUs De Un Dominio En Otro

Posted by urpiano en Martes 17 \17\UTC junio \17\UTC 2008

Este script copia las OUs (son OUs a nivel raíz del dominio de origen) y todo el árbol de OUs del que son raíz, que están en el fichero de OUs a copiar, en el dominio de destino. Si no se pasa el fichero de OUs a copiar, el script lista las OUs que existen en el dominio que recibe como parámetro de dominio de origen y copia la misma estructura de OUs en el dominio de destino. El resultado del proceso puede ser visto por pantalla o volcado a un fichero de valores separados por tabuladores, ideal para ser abierto por Excel. ‘¡¡OJO!!’, sólo copia las OUs, no los equipos, usuarios o contactos que contengan.

Sintaxis

cscript [//nologo] copiar-ous.vbs /O:dominio /D:dominio [/F:fichero] [/U:Ous] [/?]

Siendo

Etiqueta Dato ¿Requerido? Descripción
O dominio
Nombre DNS del dominio de origen
D dominio
Nombre DNS del dominio de destino
F fichero No
Ruta y nombre del fichero en el que se guardará el resultado como fichero de valores separados por comas. Si se omite, los resultados se muestran por pantalla
U Ous No
Nombre de un fichero de texto con las OUs que se quieren copiar, una por línea. Se trata del nombre de OUs a nivel de la raíz del dominio. Se crean las OUs de la lista y las OUs que contenga (todo el árbol). Si se omite este parámetro, el script creará todas las OUs del dominio de origen en el de destino
?   No
Muestra la ayuda en línea.

Ejemplos:

– Copia las OUs del dominio comarca.org en el dominio rivendel.gov, mostrando el resultado por pantalla.:

cscript //nologo copiar-ous.vbs /O:comarca.org /D:rivendel.gov

– Copia las OUs del dominio comarca.org en el dominio rivendel.gov, guardando los resultados en el fichero d:listadosCopia-OUsComarca.tsv:

cscript //nologo copiar-ous.vbs /O:comarca.org /D:rivendel.gov /F:d:listadosCopia-OUsComarca.tsv

– Copia las OUs contenidas en el fichero \bree01Ousous-a-copiar.txt y pertenecientes al dominio comarca.org en el dominio rivendel.gov, guardando los resultados en el fichero d:listadosCopia-OUsComarca.tsv:

cscript //nologo copiar-ous.vbs /O:comarca.org /D:rivendel.gov /F:d:listadosCopia-OUsComarca.tsv /U:\bree01Ousous-a-copiar.txt

Este es el código del script

'*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
'*°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°*
'* copiar-ous.vbs                                                      *
'*                                                                     *
'* Este script copia las OUs (son OUs a nivel raíz del dominio de      *
'* origen) y todo el árbol de OUs del que son raíz, que están en el    *
'* fichero de OUs a copiar, en el dominio de destino. Si no se pasa el *
'* fichero de OUs a copiar, el script lista las OUs que existen en el  *
'* dominio que recibe como parámetro de dominio de origen y copia la   *
'* misma estructura de OUs en el dominio de destino. El resultado del  *
'* proceso puede ser visto por pantalla o volcado a un fichero de      *
'* valores separados por tabuladores, ideal para ser abierto por Excel *
'*                                                                     *
'* Sintaxis                                                            *
'*                                                                     *
'* cscript [//nologo] copiar-ous.vbs /O:dominio /D:dominio             *
'* [/F:fichero] [/U:Ous] [/?]                                          *
'*                                                                     *
'* Siendo                                                              *
'*                                                                     *
'* - /O: dominio (Requerido):                                          *
'*         Nombre DNS del dominio de origen                            *
'*                                                                     *
'* - /D: dominio (Requerido):                                          *
'*         Nombre DNS del dominio de destino                           *
'*                                                                     *
'* - /F: fichero (Opcional):                                           *
'*         Ruta y nombre del fichero en el que se guardará el          *
'*         resultado como fichero de valores separados por comas. Si   *
'*         se omite, los resultados se muestran por pantalla           *
'*                                                                     *
'* - /U: Ous (Opcional):                                               *
'*         Nombre de un fichero de texto con las OUs que se quieren    *
'*         copiar, una por línea. Se trata del nombre de OUs a nivel   *
'*         de la raíz del dominio. Se crean las OUs de la lista y las  *
'*         OUs  que contenga (todo el árbol). Si se omite este         *
'*         parámetro, el script creará todas las OUs del dominio de    *
'*         origen en el de destino                                     *
'*                                                                     *
'* - /?: ayuda (Opcional):                                             *
'*         Muestra la ayuda en línea                                   *
'*                                                                     *
'*                                                                     *
'* Ejemplos:                                                           *
'*                                                                     *
'* - Copia las OUs del dominio comarca.org en el dominio rivendel.gov, *
'* mostrando el resultado por pantalla.:                               *
'*                                                                     *
'* cscript //nologo copiar-ous.vbs /O:comarca.org /D:rivendel.gov      *
'*                                                                     *
'* - Copia las OUs del dominio comarca.org en el dominio rivendel.gov, *
'* guardando los resultados en el fichero                              *
'* d:listadosCopia-OUsComarca.tsv:                                   *
'*                                                                     *
'* cscript //nologo copiar-ous.vbs /O:comarca.org /D:rivendel.gov      *
'* /F:d:listadosCopia-OUsComarca.tsv                                 *
'*                                                                     *
'* - Copia las OUs contenidas en el fichero                            *
'* \bree01Ousous-a-copiar.txt y pertenecientes al dominio           *
'* comarca.org en el dominio rivendel.gov, guardando los resultados en *
'* el fichero d:listadosCopia-OUsComarca.tsv:                        *
'*                                                                     *
'* cscript //nologo copiar-ous.vbs /O:comarca.org /D:rivendel.gov      *
'* /F:d:listadosCopia-OUsComarca.tsv /U:\bree01Ousous-a-copiar.txt*
'*                                                                     *
'*                                                                     *
'* © Fernando Reyes                                                    *
'* Junio De 2008                                                       *
'*°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°*
'*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

'Exigimos la declaración de variables
Option Explicit


Dim str_Error 'As String
Dim int_Error 'As String
Dim str_DominioDestino 'As String
Dim str_DominioOrigen 'As String
Dim str_Fichero 'As String
Dim str_Salida 'As String
Dim str_Linea 'As String
Dim arr_Ous 'As String

Dim obj_FS 'As Scripting.FileSystemObject
Dim obj_TS 'As Scripting.TextStream
Dim str_DNOU 'As String
Dim str_DNOUDestino 'As String
Dim obj_DominioOrigen 'As IAsDomain
Dim obj_DominioDestino 'As IAsDomain
Dim obj_OUOrigen 'As IAsOrganizationalUnit
Dim obj_OUDestino 'As IAsOrganizationalUnit



'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 a la salida
str_Linea = "DN Origen" & vbTab & _
			 "RDN Origen" & vbTab & _
			 "DN Destino" & vbTab & _
			 "RDN Destino"
			
'Si no hay que volcar los resultados a un fichero
If Len(str_Fichero) = 0 Then

	'Mostramos los encabezados por pantalla
	WScript.Echo str_Linea
	
	'Subrayamos los encabezados
	WScript.Echo "=========" & vbTab & _
				 "==========" & vbTab & _
				 "==========" & vbTab & _
				 "==========="
				 
'Si los resultados van a fichero
Else

	'Nos guardamos los encabezados en la salida
	str_Salida = str_Linea & vbCrLf

End If

'Vaciamos la variable con la línea
str_Linea = ""

'Obtenemos el objeto con el dominio de origen
Set obj_DominioOrigen = GetObject("LDAP://" & str_DominioOrigen)

'Obtenemos el objeto con el dominio de destino
Set obj_DominioDestino = GetObject("LDAP://" & str_DominioDestino)

'En función de que tengamos que copiar todos las OUs del dominio
'o sólo las del fichero usaremos un bucle u otro. El
'primer bucle es si se usan las OUs del fichero
If WScript.Arguments.Named.Exists("U") Then

	'Recorremos el array de OUs
	For Each str_DNOU In arr_Ous
	
		'Descartamos las líneas en blanco
		If Len(str_DNOU) > 0 Then
		
		    'Montamos la línea a mostrar
		    str_Linea = "OU=" & str_DNOU & "," & _
		    				str_DominioOrigen & vbTab & _
		                str_DNOU

			'Ponemos control de errores por si ya existiera
			'la OU a crear
			On Error Resume Next
			Set obj_OUDestino = obj_DominioDestino.Create( _
									"organizationalUnit", "OU=" & str_DNOU)
			obj_OUDestino.SetInfo
			
			'Si no se ha producido error
		    If Err.Number = 0 Then
		    
			    'Montamos la línea a mostrar
			    str_Linea = str_Linea & vbTab & _
			                obj_OUDestino.distinguishedName & vbTab & _
			                Replace(obj_OUDestino.Name,"ou=","",1,-1,1)
			                
			'Se ha producido error
			Else
			
				'Montamos la descripción y el número de error
				str_Linea = str_Linea & vbTab & _
							Err.Description & vbTab & _
							Err.Number
							
				'Quitamos el error del objeto Err
				Err.Clear
			
			End If
			
			'Devolvemos el control de errores a cscript
			On Error Goto 0
			
		    'Si hay fichero de salida            
		    If Len(str_Fichero) > 0 Then
		    
		        'Añadimos la línea a la salida
		        str_Salida = str_Salida & str_Linea & vbCrLf
		        
		    'Si la salida es por pantalla
		    Else
		    
		        'Mostramos la línea por pantalla
		        WScript.Echo str_Linea
		        
		    End If
		    
		    'Vaciamos la variable con la línea
		    str_Linea = ""
		    
			'Obtenemos el nombre distinguido de la OU de origen
			str_DNOU = "OU=" & str_DNOU & "," & str_DominioOrigen
			
			'Llamamos al método que creará las OUs contenidas en la
			'OU recibida como parámetro
			Call s_CrearOUs(str_DNOU)
			
		End If
	
	Next 'str_DNOU
	
'El segundo si se copian todas las OUs del dominio Origen
Else

	'Filtramos el dominio para que nos de las OUs
	obj_DominioOrigen.Filter = Array("organizationalUnit") 
	
	'Recorremos las OUs que cuelgan de la raíz del dominio de origen
	For Each obj_OUOrigen In obj_DominioOrigen
	
	    'Montamos la línea a mostrar
	    str_Linea = obj_OUOrigen.distinguishedName & vbTab & _
	                Replace(obj_OUOrigen.Name,"ou=","",1,-1,1)
	                
	    
	    'Establecemos control de errores, por si, por ejemplo,
	    'intentamos crear una OU que ya existe (Domain Controllers 
	    'es un caso habitual)
	    On Error Resume Next

	    'Creamos la OU en el dominio de destino
	    Set obj_OUDestino = obj_DominioDestino.Create( _
	                        "organizationalUnit", obj_OUOrigen.Name)
	    obj_OUDestino.SetInfo
	    
	    'Si no se ha producido error
	    If Err.Number = 0 Then
	    
		    'Montamos la línea a mostrar
		    str_Linea = str_Linea & vbTab & _
		                obj_OUDestino.distinguishedName & vbTab & _
		                Replace(obj_OUDestino.Name,"ou=","",1,-1,1)
		                
		'Si se ha producido error
		Else
		
			'Montamos la descripción y el número de error
			str_Linea = str_Linea & vbTab & _
						Err.Description & vbTab & _
						Err.Number
						
			'Quitamos el error del objeto Err
			Err.Clear
		
		End If
	    
	    'Devolvemos el control de errores a cscript
	    On Error Goto 0
	    
	    'Si hay fichero de salida            
	    If Len(str_Fichero) > 0 Then
	    
	        'Añadimos la línea a la salida
	        str_Salida = str_Salida & str_Linea & vbCrLf
	        
	    'Si la salida es por pantalla
	    Else
	    
	        'Mostramos la línea por pantalla
	        WScript.Echo str_Linea
	        
	    End If
	    
	    'Vaciamos la variable con la línea
	    str_Linea = ""
	    
	    'Llamamos al método que crea las OUs de la OU cuyo
	    'nombre distinguido recibe como parámetro
	    Call s_CrearOUs(obj_OUOrigen.distinguishedName)
	    
	Next

End If

'Si hay que volcar información en el fichero
'de salida de ruta y nombre str_Fichero
If Len(str_Fichero) > 0 Then

    'Creamos un objeto FileSystemObject
    Set obj_FS = CreateObject("Scripting.FileSystemObject")

    'Creamos el fichero de salida
    Set obj_TS = obj_FS.CreateTextFile(str_Fichero)

    'Volcamos la información de salida en el fichero
    obj_TS.Write str_Salida

    'Cerramos el fichero de salida
    obj_TS.Close

    'Limpieza de popa :-)
    Set obj_TS = Nothing
    Set obj_FS = Nothing

End If

Sub s_CrearOUs(str_OUPadre)
'***********************************************************************
'* Procedimiento: s_CrearOUs                                           *
'* Tipo         : Método                                               *
'* Devolución   :                                                      *
'* Fecha y Hora : 16/06/2008 16:02:38                                  *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Este método recibe el nombre distinguido una OU del  *
'*                dominio de origen y crea en el dominio de destino    *
'*                las OUs contenidas en la OU del dominio de origen.   *
'*                Para poder crear también las posibles OUs            *
'*                contenidas en las OUs que pertenecen a la recibida   *
'*                como parámetro, el método realiza una llamada        *
'*                recursiva con cada una de ellas                      *
'***********************************************************************

    Dim obj_OUPadre
    Dim obj_OUOrigen
    Dim obj_OUDestino
    Dim obj_OUPadreDestino
    
    'Obtenemos el objeto OU cuyo nombre distinguido es recibido como
    'parámetro
    Set obj_OUPadre = GetObject("LDAP://" & str_OUPadre)
    
    'Lo filtramos para que devuelva sus OUs
    obj_OUPadre.Filter = Array("organizationalUnit")
    
    'Creamos el objeto OU padre del dominio destino, en el que se
    'crearán las OUs
    Set obj_OUPadreDestino = GetObject("LDAP://" & _
    							Replace(str_OUPadre, _
	                        			str_DominioOrigen, _
	                        			str_DominioDestino))
    
    'Recorremos las OUs
    For Each obj_OUOrigen In obj_OUPadre
    
        'Montamos la línea a mostrar
        str_Linea =  obj_OUOrigen.distinguishedName & _
                     vbTab & _
                     Replace(obj_OUOrigen.Name,"ou=","",1,-1,1)
                     
	    'Establecemos control de errores, por si, por ejemplo,
	    'intentamos crear una OU que ya existe (Domain Controllers 
	    'es un caso habitual)
	    On Error Resume Next
	    
	    'Creamos la OU en el dominio de destino
	    Set obj_OUDestino = obj_OUPadreDestino.Create( _
				                        "organizationalUnit", _
				                        obj_OUOrigen.Name)
	    obj_OUDestino.SetInfo
	    
	    'Si no se ha producido error
	    If Err.Number = 0 Then
	    
		    'Montamos la línea a mostrar
		    str_Linea = str_Linea & vbTab & _
		                obj_OUDestino.distinguishedName & vbTab & _
		                Replace(obj_OUDestino.Name,"ou=","",1,-1,1)
		                
		'Si se ha producido error
		Else
		
			'Montamos la descripción y el número de error
			str_Linea = str_Linea & vbTab & _
						Err.Description & vbTab & _
						Err.Number
						
			'Quitamos el error del objeto Err
			Err.Clear
		
		End If
	    
	    'Devolvemos el control de errores a cscript
	    On Error Goto 0
	    
        'Si hay fichero de salida            
        If Len(str_Fichero) > 0 Then
        
            'Añadimos la línea a la salida
            str_Salida = str_Salida & str_linea & vbCrLf
            
        Else
        
            'Mostramos la línea por pantalla
            WScript.Echo str_Linea
            
        End If
        
        'Vaciamos la variable con la línea
        str_Linea = ""
    
        'Realizamos una llamada recursiva incrementando en uno el
        'nivel
        Call s_CrearOUs(obj_OUOrigen.Name & "," & str_OUPadre)
                    
    Next
    
    'Limpieza de parte posterior saliente :-)
    Set obj_OUOrigen = Nothing
    Set obj_OUDestino = Nothing
    Set obj_OUPadre = Nothing
    Set obj_OUPadreDestino = Nothing
    
End Sub 's_CrearOUs

Function f_RevisarArgumentos( _
                             str_Error, _
                             int_Error _
                             ) 'As Boolean
'***********************************************************************
'* Procedimiento: f_RevisarArgumentos                                  *
'* Tipo         : Función                                              *
'* Devolución   : Booleana                                             *
'* Fecha y Hora : 17/06/2008 10:34:41                                  *
'* 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

    'Iniciamos los indicadores
    bol_Devolucion = False
    bol_Error1 = False
    bol_Error2 = False
    bol_Error4 = 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 
    '/O (dominio)
    If WScript.Arguments.Named.Exists("O") Then

        'Cambiamos el nombre DNS a nombre distinguido
        str_DominioOrigen =  _
               f_DNSaDN(WScript.Arguments.Named("O"))

    Else

        str_Error = str_Error & vbcrlf & _
                    "Error 2, falta argumento " & _
                    "requerido con nombre: " & _
                    "/O (dominio)" & vbCrLf
        bol_Error2 = True

    End If

    'Revisamos que esté el argumento requerido 
    '/D (dominio)
    If WScript.Arguments.Named.Exists("D") Then

        'Cambiamos el nombre DNS a nombre distinguido
        str_DominioDestino =  _
               f_DNSaDN(WScript.Arguments.Named("D"))

    Else

        str_Error = str_Error & vbcrlf & _
                    "Error 2, falta argumento " & _
                    "requerido con nombre: " & _
                    "/D (dominio)" & vbCrLf
        bol_Error2 = True

    End If

    'Revisamos que esté el argumento
    '/F (fichero)
    If WScript.Arguments.Named.Exists("F") Then

        str_Fichero =  _
               WScript.Arguments.Named("F")

    End If

    'Revisamos que esté el argumento
    '/U (Ous)
    If WScript.Arguments.Named.Exists("U") Then

        Set obj_FS = CreateObject("Scripting.FileSystemObject")
        Set obj_TS = obj_FS.OpenTextFile( _
             WScript.Arguments.Named("U"))

        arr_Ous = _
            Split(obj_TS.ReadAll,vbCrLf)

        obj_TS.Close
        Set obj_TS = Nothing
        Set obj_FS = Nothing

    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 : 17/06/2008 10:34:41                                  *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Este procedimiento muestra la ayuda en línea.        *
'*                Recibe un parámetro de tipo cadena que si 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 copia las OUs (son OUs a nivel raíz d" & _
                 "el dominio de origen) y todo"
    WScript.Echo "el árbol de OUs del que son raíz, que están en el" & _
                 " fichero de OUs a copiar, en"
    WScript.Echo "el dominio de destino. Si no se pasa el fichero d" & _
                 "e OUs a copiar, el script"
    WScript.Echo "lista las OUs que existen en el dominio que recib" & _
                 "e como parámetro de dominio de"
    WScript.Echo "origen y copia la misma estructura de OUs en el d" & _
                 "ominio de destino. El"
    WScript.Echo "resultado del proceso puede ser visto por pantall" & _
                 "a o volcado a un fichero de"
    WScript.Echo "valores separados por tabuladores, ideal para ser" & _
                 " abierto por Excel"
    WScript.Echo ""
    WScript.Echo "Sintaxis"
    WScript.Echo ""
    WScript.Echo "cscript [//nologo] copiar-ous.vbs /O:dominio /D:d" & _
                 "ominio [/F:fichero] [/U:Ous]"
    WScript.Echo "[/?]"
    WScript.Echo ""
    WScript.Echo "Siendo"
    WScript.Echo ""
    WScript.Echo "- /O: dominio (Requerido):"
    WScript.Echo "Nombre DNS del dominio de origen"
    WScript.Echo ""
    WScript.Echo "- /D: dominio (Requerido):"
    WScript.Echo "Nombre DNS del dominio de destino"
    WScript.Echo ""
    WScript.Echo "- /F: fichero (Opcional):"
    WScript.Echo "Ruta y nombre del fichero en el que se guardará e" & _
                 "l resultado"
    WScript.Echo "como fichero de valores separados por comas. Si s" & _
                 "e omite, los"
    WScript.Echo "resultados se muestran por pantalla"
    WScript.Echo ""
    WScript.Echo "- /U: Ous (Opcional):"
    WScript.Echo "Nombre de un fichero de texto con las OUs que se " & _
                 "quieren"
    WScript.Echo "copiar, una por línea. Se trata del nombre de OUs" & _
                 " a nivel de la"
    WScript.Echo "raíz del dominio. Se crean las OUs de la lista y " & _
                 "las OUs  que"
    WScript.Echo "contenga (todo el árbol). Si se omite este paráme" & _
                 "tro, el script"
    WScript.Echo "creará todas las OUs del dominio de origen en el " & _
                 "de destino"
    WScript.Echo ""
    WScript.Echo "- /?: ayuda (Opcional):"
    WScript.Echo "Muestra la ayuda en línea"
    WScript.Echo ""
    WScript.Echo ""
    WScript.Echo "Ejemplos:"
    WScript.Echo ""
    WScript.Echo "- Copia las OUs del dominio comarca.org en el dom" & _
                 "inio rivendel.gov, mostrando"
    WScript.Echo "el resultado por pantalla.:"
    WScript.Echo ""
    WScript.Echo "cscript //nologo copiar-ous.vbs /O:comarca.org /D" & _
                 ":rivendel.gov"
    WScript.Echo ""
    WScript.Echo "- Copia las OUs del dominio comarca.org en el dom" & _
                 "inio rivendel.gov, guardando"
    WScript.Echo "los resultados en el fichero d:listadosCopia-OU" & _
                 "sComarca.tsv:"
    WScript.Echo ""
    WScript.Echo "cscript //nologo copiar-ous.vbs /O:comarca.org /D" & _
                 ":rivendel.gov"
    WScript.Echo "/F:d:listadosCopia-OUsComarca.tsv"
    WScript.Echo ""
    WScript.Echo "- Copia las OUs contenidas en el fichero \bree01" & _
                 "Ousous-a-copiar.txt y"
    WScript.Echo "pertenecientes al dominio comarca.org en el domin" & _
                 "io rivendel.gov, guardando los"
    WScript.Echo "resultados en el fichero d:listadosCopia-OUsCom" & _
                 "arca.tsv:"
    WScript.Echo ""
    WScript.Echo "cscript //nologo copiar-ous.vbs /O:comarca.org /D" & _
                 ":rivendel.gov"
    WScript.Echo "/F:d:listadosCopia-OUsComarca.tsv /U:\bree01O" & _
                 "usous-a-copiar.txt"
    WScript.Echo ""
    WScript.Echo ""
    WScript.Echo ""

End Sub 's_Ayuda

Function f_DNSaDN(str_DNS)
'***********************************************************************
'* Procedimiento: f_DNSaDN                                             *
'* Tipo         : Función                                              *
'* Devolución   : Booleana                                             *
'* Fecha y Hora : 16/06/2008 15:44:48                                  *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Esta función recibe el nombre DNS de un dominio      *
'*                (dominio.local) y devuelve su nombre distinguido     *
'*                (DC=dominio,DC=local)                                *
'***********************************************************************

    'Agregamos al inicio del nombre DNS "DC=" y sustituimos los puntos
    'por ",DC=", para obtener el nombre distinguido del dominio
    f_DNSaDN = "DC=" & _
               Replace(str_DNS, ".", ",DC=")

End Function 'f_DNSaDN

 

 

Una respuesta to “Script VBScript Para Copiar Estructuras De OUs De Un Dominio En Otro”

  1. franklin said

    Hola de donde saco los contactos de outlook 2007, cuando formateo la maquina no tengo problemas con los archivos outlook y pst. Por favor alguien me puede indicar?
    gracias

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: