de-DEen-USes-ES
Idioma
Search
× Search
Menú
  1. Productos
    CopyRight2
    Otros
  2. Ventas
  3. Ayuda
  4. Descargas
  5. Reseller
  6. Blog
  7. Contacto
sábado, 19 de septiembre de 2026

Blog de Sys-Manage

En el blog de Sys-Manage publicamos artículos sobre la migración de servidores de archivos, soluciones de almacenamiento NAS, Microsoft IIS y Active Directory, tanto en entornos locales como en la nube.

Sys-Manage

Integrar PowerShell para Extender su Proceso de Migración

Aprenda cómo utilizar el complemento de integración con PowerShell de CopyRight2 para integrar Cmdlets de PowerShell en sus transformaciones ActiveScript definidas en la configuración de sus trabajos de migración (scripts de transformación de objetos, scripts de inicio/fin de trabajo, scripts de inicio/fin de copia).

Normalmente utilizaría scripts de transformación para usuarios, grupos o contactos en su trabajo de migración para aplicar cambios a los objetos migrados. Por ejemplo, si está realizando una migración de Active Directory de usuarios o grupos entre dos bosques de Active Directory diferentes, puede que necesite asignar el contenido de un atributo de Active Directory a un atributo con un nombre diferente en el esquema del bosque de destino. O puede que necesite calcular el valor de un atributo con algún tipo de algoritmo para establecer una convención de nombres, como una dirección de correo electrónico que debería basarse en los valores de otros atributos (como nombre.apellido@nombre-dominio). Durante una migración de servidor de archivos puede que desee implementar pasos de configuración adicionales para cada par de carpetas de origen y destino copiadas.

PowerShell proporciona acceso a la administración local y remota no solo de Windows® y muchas aplicaciones que se ejecutan en Windows® como Microsoft® Exchange, sino también de otras plataformas como macOS® y sistemas Linux.

Con el complemento de integración con PowerShell obtiene la capacidad de llamar código PowerShell desde sus scripts de transformación.
 

Tabla de Contenidos:

  1. Cómo ejecutar código PowerShell
  2. Ejecutar código PowerShell como subrutina
  3. Ejecutar código PowerShell como función
  4. Pasar parámetros a Cmdlets de PowerShell
  5. Gestión de listas de Variants (Arrays unidimensionales)
  6. Gestión de tablas de Variants (Arrays bidimensionales)
  7. Cómo diferenciar entre valor de retorno vacío y cadena vacía
  8. Cómo añadir Snap-Ins de PowerShell adicionales
  9. Conclusión

 

Cómo ejecutar código PowerShell

Antes de poder usar código PowerShell en sus scripts ActiveScript, necesitará descargar el complemento de integración con PowerShell desde la página de descarga de CopyRight2 e instalarlo.

El complemento permite ejecutar código PowerShell desde ActiveScript prefijando una línea de código con el carácter '#'.

Puede llamar cmdlets como subrutina, sin tener un valor de retorno, o como una función que devuelve información a su ActiveScript.

 

Ejecutar código PowerShell como subrutina

Si llama a un cmdlet como subrutina, la salida del cmdlet se añadirá automáticamente al archivo de registro del trabajo.

El ejemplo a continuación llamaría al cmdlet write-output de PowerShell y escribiría el texto "Hello World" en el archivo de registro del trabajo durante la ejecución:
 


...
#write-output "Hello World"
...

Llamar a PowerShell como subrutina para escribir algo en el archivo de registro usando el Cmdlet Write-Output

 

Ejecutar código PowerShell como función

En el caso de una función, el complemento convertirá automáticamente los datos devueltos en un solo variant, una lista de variants (unidimensional) o una tabla de variants (bidimensional).

Si el cmdlet se llama como función, la salida no se registrará de forma predeterminada, a menos que establezca el nivel de registro del componente ActiveScript en Opciones -> Registro extendido a al menos nivel 3.

El ejemplo a continuación muestra cómo redirigir la salida del cmdlet write-output a una variable ActiveScript llamada psOutput y luego mostrar el contenido en un cuadro de mensaje:
 


...
psOutput=#write-output "Hello World"
MsgBox psOutput
...

Redirigir la salida de PowerShell a una variable ActiveScript y mostrar su contenido en un cuadro de mensaje

 

Pasar parámetros a Cmdlets de PowerShell

Hasta ahora hemos llamado a código PowerShell como subrutina y como función. Ahora veremos cómo pasar parámetros al código PowerShell.

Es posible pasar parámetros usando variables de ActiveScript y funciones de ActiveScript al llamar cmdlets de PowerShell.

El ejemplo a continuación llama a la función ActiveScript Destination() de CopyRight2 para recuperar el contenido del atributo samAccountName del objeto que se está migrando actualmente. Además, puede ver cómo combinarlo con un Select para filtrar la salida por el atributo Sid.

Importante: “Sid” debe ponerse entre comillas dobles para diferenciarlo de una variable ActiveScript llamada Sid.
 


...
sid = #get-localuser Destination("samAccountName") | select "Sid"
MsgBox "SID=" & sid
...


Llamar al Cmdlet Get-Localuser para el usuario de destino actual filtrando por el atributo SID usando Select

 

Gestión de listas de Variants (Arrays unidimensionales)

Hasta ahora hemos visto cómo manejar Variants simples devueltos desde PowerShell, por ejemplo una sola cadena.

Si el código PowerShell ejecutado devuelve una lista de cadenas, por ejemplo, puede usar la función UBound() de ActiveScript sobre el Variant devuelto para obtener el límite superior. El índice comienza en cero para acceder al primer elemento de la lista.

En el ejemplo a continuación puede ver cómo tratar una lista de Variants, por ejemplo una lista de nombres de cuenta de usuario para todos los usuarios locales encontrados en un sistema:
 


...
userNames=#get-localuser | select "Name"
for i = 0 to UBound(userNames)
   MsgBox userNames(i)
Next
...


Llamar al Cmdlet Get-Localuser para todos los usuarios locales filtrando por el atributo Name | Lista de Variants

 

Gestión de tablas de Variants (Arrays bidimensionales)

Hay casos en los que PowerShell devolverá una tabla con una o más filas con más de una columna.

Puede acceder a esos datos de manera similar a una lista.

En lugar de una sola dimensión, ahora hay 2 dimensiones para las filas (primera dimensión) y columnas (segunda dimensión). Puede usar la función UBound() de ActiveScript para consultar el límite superior de cada dimensión.

El ejemplo a continuación muestra cómo llamar al cmdlet get-localuser, filtrando por "Sid", "Description" y el atributo "Name" y luego mostrando el contenido de cada celda de izquierda a derecha y de arriba abajo:
 


...
localUsers=#get-localuser | select "Sid", "Description", "Name"
MsgBox "Rows=" & UBound(localUsers, 1) + 1
MsgBox "Cols=" & UBound(localUsers, 2) + 1
for r = 0 to UBound(localUsers, 1)
   for c = 0 to UBound(localUsers, 2)
      MsgBox localUsers(r, c)
   next
next
...


Llamar al Cmdlet Get-LocalUser para usuarios locales filtrando por Sid, Description y Name | Tabla de Variants

 

Cómo diferenciar entre valor de retorno vacío y cadena vacía

Una llamada devolverá un Variant de tipo VT_Empty, en caso de algo que no tiene valor establecido, para diferenciarlo del caso en que se devuelve una cadena vacía ("").

El ejemplo a continuación muestra cómo verificar si un Variant devuelto está vacío usando la función IsEmpty() de ActiveScript:
 


...
var=#ps-cmdlet | select "SomeAttribute"
if IsEmpty(var) then
   MsgBox “Var está vacío”
else
   MsgBox “Var no está vacío”
endif
...


Verificar si un valor devuelto está vacío usando IsEmpty()

 

Cómo añadir Snap-Ins de PowerShell adicionales

Puede ejecutar el cmdlet Add-PSsnapin de PowerShell para permitir llamar a cmdlets adicionales, por ejemplo el Snap-in de administración de Exchange que le proporciona cmdlets para gestionar Microsoft Exchange.

Normalmente, dicha llamada se añadiría a su script de inicio de trabajo para que se ejecute solo una vez y no múltiples veces durante la ejecución de un script de transformación de usuario o grupo donde se llamaría cada vez que se migra dicho objeto.

El ejemplo a continuación muestra cómo incluir el Microsoft.Exchange.Management.PowerShell.SnapIn:
 


...
#Add-PSsnapin -Name "Microsoft.Exchange.Management.PowerShell.SnapIn" -ErrorAction "SilentlyContinue"
...


Añadir un Snap-in de PowerShell adicional desde el script de inicio del trabajo para ejecutar solo una vez

 

Conclusión

Usar PowerShell desde sus scripts de transformación de objetos es muy fácil y le proporciona posibilidades infinitas. Si desea aprender más sobre este tema, puede leer nuestra publicación de blog "Migrar usuarios de un bosque de cuentas a un bosque de recursos de Exchange" basada en un escenario real de usuario.

Si tiene algún comentario, positivo o negativo, o alguna pregunta de seguimiento, háganoslo saber en los comentarios a continuación. ¡Gracias!

 

Artículo anterior Migrar Usuarios del Bosque de Cuentas al Bosque de Recursos de Exchange
Artículo siguiente Autenticación Selectiva para Migración de Equipos y Perfiles
Imprimir
5016 Valore este artículo:
4.3

1 comentarios sobre el artículo "Integrar PowerShell para Extender su Proceso de Migración"

Avatar image

Icon SA Genève

Thank you for providing all those code examples, it's been helping me understand the power of Powershell - so to speak - much better. I will share this document with my team in order to help them implement it on our system.

Regards from Geneva,

Peter Anselmo

Dejar un comentario

Este formulario recoge su nombre, correo electrónico, dirección IP y contenido para que podamos llevar un registro de los comentarios publicados en el sitio web. Consulte nuestra Política de privacidad y nuestras Condiciones de uso para obtener más información sobre dónde, cómo y por qué almacenamos sus datos.
Añadir comentario
Términos de usoPolítica de privacidadCopyright © Sys-Manage, 1998-2026. Todos los derechos reservados.
Volver arriba