Preparar una migración en un entorno vSphere, especialmente en contextos empresariales con cientos de máquinas virtuales (VMs), es una operación que no admite improvisación. Un análisis preliminar preciso es fundamental para prevenir interrupciones de servicio, problemas de compatibilidad y retrasos inesperados. He gestionado migraciones de entornos con más de 300 VMs y 300+ servidores, y la experiencia me ha enseñado que la fase de pre-verificación es la que determina el éxito o el fracaso de todo el proceso. Sin una verificación sistemática, te arriesgas a descubrir incompatibilidades de red, almacenamiento insuficiente o configuraciones erróneas solo cuando la migración ya ha comenzado, con costes operativos elevados y un impacto directo en la continuidad del negocio. Este artículo describe un script PowerShell para automatizar gran parte de este análisis, proporcionando un informe detallado que te permitirá actuar proactivamente.
Tested on: VMware vSphere 8.0 · PowerShell 7.4 · Septiembre 2026
Requisitos Previos / Entorno de Prueba
Para ejecutar el script es necesario tener un sistema con PowerShell (preferiblemente PowerShell Core 7.x o superior) y el módulo VMware PowerCLI instalado y configurado. Asegúrate de tener las credenciales necesarias para conectarte al vCenter Server con permisos de lectura en todas las VMs, hosts y datastores. Es recomendable ejecutar el script desde una máquina de gestión dedicada.
Instalación de PowerCLI:
Install-Module -Name VMware.PowerCLI -Scope CurrentUser
Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $false -Confirm:$false
Conexión a vCenter Server:
Connect-VIServer -Server your_vcenter_fqdn -User your_username -Password your_password
Sustituye your_vcenter_fqdn, your_username y your_password con los valores correctos de tu entorno. Por motivos de seguridad, evalúa el uso de credenciales gestionadas o la autenticación integrada si está disponible.
Script de Verificación Pre-Migración para un Entorno vSphere
Este script PowerShell recopila información crucial sobre el entorno vSphere, centrándose en aspectos que a menudo causan problemas durante las migraciones. El resultado está estructurado para facilitar el análisis y la identificación rápida de posibles obstáculos.
# Script de verificación pre-migración vSphere
# Función para exportar los datos a CSV
function Export-Report {
param(
[Parameter(Mandatory=$true)]
[string]$ReportName,
[Parameter(Mandatory=$true)]
$Data
)
$Timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
$FileName = "vSphere_PreMig_Report_$(($ReportName -replace ' ' -replace '\(','' -replace '\)','') | Select -First 30)_$Timestamp.csv"
$Data | Export-Csv -Path $FileName -NoTypeInformation -UseCulture
Write-Host "Reporte '$ReportName' exportado en: $FileName"
}
Write-Host "Iniciando análisis del entorno vSphere..."
# 1. Recopilar información sobre las VMs
Write-Host "Detectando VMs..."
$vmInfo = Get-VM | Select Name, PowerState, NumCpu, MemoryGB, GuestId, Version, @{N='VMHost';E={$_.VMHost.Name}}, @{N='NetworkAdapter';E={($_.NetworkAdapters | Select -ExpandProperty NetworkName) -join ', '}}, @{N='Disks';E={($_.HardDisks | Select -ExpandProperty Name) -join ', '}}, @{N='Snapshots';E={($_.Snapshot | Select -ExpandProperty Name) -join ', '}}
Export-Report -ReportName "VM_General_Info" -Data $vmInfo
# 2. Detectar VMs con snapshots activos
Write-Host "Detectando snapshots activos..."
$vmSnapshots = Get-VM | Get-Snapshot | Select VM, Name, Created, SizeGB
if ($vmSnapshots) {
Export-Report -ReportName "VM_Active_Snapshots" -Data $vmSnapshots
Write-Warning "Se han detectado snapshots activos. Se recomienda consolidarlos antes de la migración."
}
# 3. Detectar VMs con discos RDM (Raw Device Mapping)
Write-Host "Detectando discos RDM..."
$vmRDM = Get-VM | Get-HardDisk -DiskType "RawPhysical", "RawVirtual" | Select Parent, Name, DiskType, CapacityGB, @{N='Datastore';E={$_.ExtensionData.Backing.FileName.Split("[")[-1].Split("]")[0]}}
if ($vmRDM) {
Export-Report -ReportName "VM_RDM_Disks" -Data $vmRDM
Write-Warning "Se han detectado discos RDM. Estos requieren una gestión especial durante la migración."
}
# 4. Detectar VMs con VMware Tools desactualizados o no instalados
Write-Host "Detectando estado de VMware Tools..."
$vmToolsStatus = Get-VM | Select Name, GuestId, @{N='ToolsStatus';E={$_.ExtensionData.Guest.ToolsStatus}}, @{N='ToolsVersion';E={$_.ExtensionData.Guest.ToolsVersionStatus}}
Export-Report -ReportName "VM_Tools_Status" -Data $vmToolsStatus
# 5. Detectar uso del almacenamiento por datastore
Write-Host "Detectando uso de datastore..."
$datastoreUsage = Get-Datastore | Select Name, Type, CapacityGB, FreeSpaceGB, @{N='UsedSpaceGB';E={$_.CapacityGB - $_.FreeSpaceGB}}, @{N='FreeSpacePercent';E={($_.FreeSpaceGB / $_.CapacityGB * 100).ToString("N2")}}
Export-Report -ReportName "Datastore_Usage" -Data $datastoreUsage
# 6. Detectar hosts ESXi y su configuración de red (vSwitch/PortGroup)
Write-Host "Detectando configuración de red del host..."
$hostNetwork = Get-VMHost | Get-VirtualSwitch | Select VMHost, Name, NumPorts, @{N='PortGroups';E={($_.PortGroups | Select -ExpandProperty Name) -join ', '}}
Export-Report -ReportName "Host_Network_Config" -Data $hostNetwork
Write-Host "Análisis completado. Revisa los archivos CSV generados en el directorio actual."
Salida y Análisis de los Datos
El script generará varios archivos CSV, cada uno conteniendo un conjunto específico de datos. Analiza estos informes con atención:
- VM_General_Info.csv: Ofrece una visión general básica de todas las VMs. Comprueba el estado de encendido (
PowerState), la versión de hardware (Version) y las redes (NetworkAdapter). Versiones de hardware obsoletas podrían necesitar una actualización antes de la migración. Lee también: Hardening SSH en Linux: Guía Completa 2026 - VM_Active_Snapshots.csv: Lista todas las VMs con snapshots activos. Los snapshots deben consolidarse antes de iniciar una migración, especialmente si se prevé un vMotion entre datastores o hosts diferentes. Dejar snapshots activos puede causar problemas de rendimiento y aumentar el riesgo de corrupción de datos o ralentizaciones significativas en la transferencia.
- VM_RDM_Disks.csv: Identifica las VMs con discos RDM. La gestión de los RDM en una migración es compleja y requiere una planificación específica, a menudo con la conversión a VMDK o el uso de soluciones de almacenamiento avanzadas.
- VM_Tools_Status.csv: Muestra el estado y la versión de VMware Tools. VMware Tools desactualizados o no instalados pueden limitar las funcionalidades de la VM post-migración, incluida la gestión del apagado, el rendimiento de red y disco, y la compatibilidad con nuevas funcionalidades de vSphere. Asegúrate de que estén actualizados para todas las VMs críticas.
- Datastore_Usage.csv: Proporciona una vista clara del uso de los datastores. Verifica que haya espacio suficiente en el datastore de destino para las VMs a migrar, considerando también el espacio temporal requerido para operaciones como vMotion o Storage vMotion.
- Host_Network_Config.csv: Detalla la configuración de red de los hosts ESXi. Comprueba que los vSwitch y los port groups estén configurados correctamente y que reflejen la topología de red deseada en el entorno objetivo. Discrepancias aquí pueden llevar a problemas de conectividad después de la migración. Un enfoque común es usar la documentación oficial de VMware para la configuración de red.
Errores Comunes y Resolución de Problemas
Connect-VIServerfalla: Comprueba el FQDN/IP del vCenter, las credenciales y la conectividad de red desde la máquina que ejecuta el script. Asegúrate de que el firewall no esté bloqueando el puerto 443 (HTTPS) hacia vCenter.- Permisos insuficientes: Si el script no logra recuperar toda la información, es probable que el usuario utilizado no tenga los permisos necesarios. Verifica los roles y privilegios asignados al usuario en vCenter Server. Son necesarios permisos de lectura sobre VM, Host, Datastore y Network.
- Módulo PowerCLI no encontrado: Si recibes errores relacionados con cmdlets desconocidos (
Get-VM,Connect-VIServer), asegúrate de que el móduloVMware.PowerCLIesté correctamente instalado e importado en la sesión de PowerShell. - Salida CSV vacía o incompleta: Podría indicar problemas de conexión a vCenter (aunque
Connect-VIServerhaya tenido éxito) o permisos limitados. Vuelve a intentar la conexión y verifica los logs de vCenter para errores.
FAQ — Preguntas Frecuentes
¿Este script puede ejecutarse en producción sin riesgos?
Sí, el script realiza solo operaciones de lectura (Get-*) y no aplica modificaciones al entorno vSphere. Es seguro ejecutarlo en un entorno de producción. Sin embargo, como buena práctica, ejecuta siempre cualquier script primero en un entorno de prueba o con un usuario con privilegios mínimos para familiarizarte con la salida.
¿Es posible personalizar la salida o añadir otras verificaciones?
Absolutamente sí. Este script es una base. Puedes modificarlo para incluir controles específicos de tu entorno, como la verificación de determinadas versiones de Guest OS, la presencia de dispositivos USB passthrough, o la configuración de vGPU. Cada cmdlet Get-* de PowerCLI ofrece una amplia gama de propiedades y filtros.
¿Cómo puedo automatizar la ejecución de este script regularmente?
Puedes programar la ejecución del script utilizando el Programador de Tareas de Windows o cron en Linux (si usas PowerShell Core) en una máquina dedicada. Es aconsejable redirigir la salida de la consola a un archivo de log y enviar los informes CSV por correo electrónico para una revisión periódica automatizada.
¿Cuál es la diferencia entre PowerCLI y vSphere API?
PowerCLI es una interfaz de línea de comandos basada en PowerShell que interactúa con las vSphere API. Las vSphere API (Application Programming Interface) son el conjunto de interfaces de programación subyacentes que vCenter Server expone para la interacción programática. PowerCLI simplifica la interacción con estas API, proporcionando cmdlets fáciles de usar.
Conclusiones con Puntos Clave Operativos
La preparación es el pilar de toda migración vSphere exitosa. Este script PowerShell te proporciona un framework robusto para automatizar la fase de pre-verificación, transformando un proceso potencialmente desordenado en una serie de pasos claros y documentados. Invertir tiempo en el pre-análisis significa reducir drásticamente los riesgos de downtime y garantizar una transición fluida de tus cargas de trabajo. No te fíes del azar: verifica, documenta y planifica cada detalle para proteger la continuidad operativa.
Actualizado: Septiembre 2026