Cómo realizar un inventario de máquinas virtuales en VMware con PowerShell

Como administrador de un entorno virtual VMware que ha pasado por varias fusiones de empresas, realizar auditorías de inventario es algo natural para mí. Siempre es una buena idea mantener un inventario actualizado de tus máquinas virtuales para gestionar de la mejor manera el entorno, pero debido a la naturaleza cambiante de la tecnología, donde los sistemas se construyen o desmantelan regularmente, puede ser como intentar alcanzar un objetivo en movimiento.

Como de costumbre, la programación en scripting es clave aquí. Este script de PowerShell basado en VMware puede ayudarte a recopilar rápidamente los datos de tu inventario. Mi colega Brad Doran, gerente técnico de cuentas senior en Amazon Web Services, me proporcionó este script y lo estoy utilizando aquí con su permiso. Puedes copiar y pegarlo en un archivo local llamado VMware_Inventory.ps1, por ejemplo.

Índice de Contenido
  1. Prerequisitos
  2. Personalizando el script
  3. Ejecutando el script

Prerequisitos

Utiliza Windows 10 (teóricamente es posible ejecutar esto en Windows 7, pero puedes experimentar complicaciones con versiones desactualizadas de PowerShell, ya que este script requiere al menos PowerShell 4.0).

Ejecuta Windows PowerShell ISE como administrador (también puedes utilizar PowerShell regular, pero considero que ISE es mejor para obtener resultados máximos y evaluar errores).

Instala el módulo VMware PowerCLI utilizando este comando dentro de la ventana de PowerShell ISE:

Install-Module -Name VMware.PowerCLI

Cómo garantizar la validación local de los clientes en un dominio multi-sitio

Si recibes un error que indica que necesitas la versión 2.8.201 del proveedor NuGet, simplemente haz clic en Sí y el proceso se descargará e instalará automáticamente por ti. Tomará unos momentos y luego deberás hacer clic en Sí para proceder, y en unos instantes más verás cómo el programa instala los paquetes relacionados de VMWare.PowerCLI.

Dado que el script requiere el módulo VMware.VimAutomation.Core, asegúrate de tener instalada la versión más reciente (a partir de octubre de 2021) mediante este comando:

Install-Module -Name VMware.VimAutomation.Core -RequiredVersion 10.0.0.7893909

Haz clic en Sí para proceder y en unos instantes más verás cómo el programa instala el paquete relacionado de VMWare.

Si recibes un error que dice: "PackageManagementInstall-Package: La entidad emisora de autenticode 'CN=VeriSign Class 3 Public Primary Certification Authority - G5, OU="(c) 2006 VeriSign, Inc. - Solo para uso autorizado", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US' del nuevo módulo 'VMware.VimAutomation.Core' con la versión '10.0.0.7893909' no coincide con la entidad emisora de autenticode 'CN=DigiCert Trusted Root G4, OU=www.digicert.com, O=DigiCert Inc, C=US' del módulo previamente instalado 'VMware.VimAutomation.Core' con la versión '12.4.0.18627056'. Si aún deseas instalar o actualizar, utiliza el parámetro -SkipPublisherCheck",

ejectuta este comando:

Cuál es la mejor opción de protocolo de enrutamiento para una red empresarial

Install-Module -Name VMware.VimAutomation.Core -RequiredVersion 10.0.0.7893909 -SkipPublisherCheck

También puedes ir aquí y descargar la última versión a ("C:Program Files (x86)VMWareInfrastructurePowerCLIModules"):

https://www.powershellgallery.com/packages/VMware.VimAutomation.Core/10.0.0.7893909

Personalizando el script

El script se basa en estas variables (Figura A):

$vcs = @("vCenterFQDN") # FQDN de tu servidor vCenter.
$logFile = "C:TempVMInventory.csv" # Ruta donde deseas guardar el archivo CSV.
$vcsCluster = "*" # Filtra qué clúster deseas extraer estadísticas de VM.
$businessUnitName = "Element" # Nombre de la unidad de negocio para la cual el script recopila estadísticas.

Figura A

Los 8 pasos para solucionar problemas de red y sistemas

Para $vcs, puedes reemplazar @(“vCenterFQDN”) con el nombre de tu servidor vCenter entre comillas; de lo contrario, el script te pedirá que ingreses el nombre.

Para $logFile, puedes cambiar la ruta y el nombre del archivo de registro según tus necesidades.

Para $vcsCluster, puedes especificar el clúster del que deseas extraer datos o dejar esta línea como está para extraer información de todos los clústeres.

Para $businessUnitName, reemplaza la entrada de ejemplo "Element" con tu unidad de negocio, departamento o grupo.

Ejecutando el script

Haz clic en Archivo y luego en Abrir, navega hasta donde hayas guardado el archivo del script, selecciónalo y cárgalo en PowerShell ISE. Haz clic en el botón verde para ejecutarlo.

Si recibes un error relacionado con las políticas de seguridad o el hecho de que el script no está firmado, ejecuta este comando para permitir la ejecución de scripts locales y scripts firmados de forma remota:

Diferencias entre redes cliente/servidor y peer-to-peer

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Si dejaste la variable $vcs como está, se te pedirá que ingreses el nombre del servidor vCenter (Figura B).

Figura B

Una vez que ingreses el nombre, se te solicitará que inicies sesión en vCenter (Figura C). Asegúrate de utilizar una cuenta con credenciales de nivel de administrador.

Figura C

Luego verás el script en ejecución y recopilando activamente datos (Figura D).

Qué son los switches Cisco y cómo funcionan

Figura D

El script mostrará los resultados y también guardará los detalles en "C:TempVMInventory.csv" si dejaste la variable relacionada como está (Figura E).

Figura E

(Nota: he eliminado las entradas de FQDN que se mostraban ya que esto se ejecutó en un entorno empresarial activo).

¡Gracias, Brad, por la excelente herramienta que todo administrador de VMware debería tener en su arsenal!

Si tienes alguna pregunta o problemas al ejecutar este script, ponte en contacto conmigo a través del enlace de correo electrónico a continuación (a la izquierda de "Bio completo | Ver todo el contenido de Scott").

Técnicas para mejorar la seguridad en redes peer-to-peer

#Requires -Version 4
#Requires -Modules VMware.VimAutomation.Core

<# .RESUMEN Crea un inventario en formato CSV de máquinas virtuales en vCenter. .DESCRIPCIÓN Este script está destinado a realizar un inventario de máquinas virtuales. Puede conectarse a múltiples vCenters para extraer estadísticas y puede extraer estadísticas de múltiples clústeres de hosts. Este script realiza operaciones de solo lectura. La salida se formatea como un CSV utilizando una disposición estándar. Detalles de las variables $vcs: Un conjunto que contiene la lista de servidores vCenter a los que se debe conectar. $logFile: La ubicación donde se guardará la salida en formato CSV. $vcsCluster: El nombre del clúster. Acepta caracteres comodín, pero no puede estar vacío. $businessUnitName: La unidad de negocio, grupo o departamento que es propietario/brinda soporte a este entorno. Requisitos de credenciales $vcsCreds: Credenciales de usuario que tienen acceso para iniciar sesión en vCenter con permisos de solo lectura como mínimo. $wmiCreds: Credenciales de usuario que tienen acceso para realizar consultas WMI localmente en las máquinas virtuales de Windows. #>

Clear-Host

# Edita estas variables para tu entorno específico
$vcs = @("vCenterFQDN") # FQDN de tu servidor vCenter.
$logFile = "C:TempVMInventory.csv" # Donde deseas guardar el archivo CSV
$vcsCluster = "*" # Filtra el clúster del que deseas extraer estadísticas de VM.
$businessUnitName = "Element" # Nombre de la unidad de negocio para la cual el script recopila estadísticas

if($vcs -contains "vCenterFQDN"){
$vcs = Read-Host -Prompt "FQDN del servidor vCenter"
}
$vcsCreds = Get-Credential -Message "Credenciales de vCenter"
#$wmiCreds = Get-Credential -Message "Credenciales de WMI"

Cómo cargar y descargar módulos del kernel de Linux: una guía completa

Import-Module VMware.VimAutomation.Core
Connect-VIServer $vcs -Credential $vcsCreds | Out-Null

$vms = Get-Cluster -Name $vcsCluster | Get-VM
$count = 0
$results = @()
$Script:ProgressPreferenceOriginal = $ProgressPreference
Clear-Host
foreach($vm in $vms){
# Configuración de la barra de progreso
$count++
$percentComplete = [math]::Round(($count / $vms.Count) * 100,1)
Write-Progress -Activity "Recopilando información sobre $($vm.Name)" -Status "$percentComplete% Completado" -PercentComplete $percentComplete

# Almacena la información estadística de VM en un objeto PS
$object = New-Object PSObject
Add-Member -InputObject $object -MemberType NoteProperty -Name BusinessUnit -Value $businessUnitName
Add-Member -InputObject $object -MemberType NoteProperty -Name Name -Value $vm.Name
Add-Member -InputObject $object -MemberType NoteProperty -Name Domain -Value (($vm.Guest.Hostname.Split('.') | Select-Object -Skip 1) -join '.')
Add-Member -InputObject $object -MemberType NoteProperty -Name Location -Value " "
Add-Member -InputObject $object -MemberType NoteProperty -Name IPAddress -Value ($vm.Guest.IPAddress -join ", ")
Add-Member -InputObject $object -MemberType NoteProperty -Name Function -Value " "
Add-Member -InputObject $object -MemberType NoteProperty -Name PorV -Value "Virtual"
Add-Member -InputObject $object -MemberType NoteProperty -Name vCluster -Value ($vm | Get-Cluster).Name
Add-Member -InputObject $object -MemberType NoteProperty -Name vHost -Value $vm.VMHost
Add-Member -InputObject $object -MemberType NoteProperty -Name Make -Value "N/A"
Add-Member -InputObject $object -MemberType NoteProperty -Name Model -Value "N/A"
Add-Member -InputObject $object -MemberType NoteProperty -Name SerialNumber -Value "N/A"
Add-Member -InputObject $object -MemberType NoteProperty -Name CPU -Value $vm.NumCpu
Add-Member -InputObject $object -MemberType NoteProperty -Name vSocket -Value ($vm.NumCpu / $vm.CoresPerSocket)
Add-Member -InputObject $object -MemberType NoteProperty -Name CoreCount -Value $vm.CoresPerSocket
Add-Member -InputObject $object -MemberType NoteProperty -Name MemoryGB -Value $vm.MemoryGB
Add-Member -InputObject $object -MemberType NoteProperty -Name OperatingSystem -Value $vm.Guest.OSFullName
Add-Member -InputObject $object -MemberType NoteProperty -Name UsedSpaceGB -Value ([math]::Round($vm.UsedSpaceGB, 0))
Add-Member -InputObject $object -MemberType NoteProperty -Name ProvisionedSpaceGB -Value ([math]::Round($vm.ProvisionedSpaceGB,0))
Add-Member -InputObject $object -MemberType NoteProperty -Name Environment -Value " "
# Almacena el objeto PSObject que contiene estadísticas de VM en una matriz de PSObject
$results += $object
}

Control de acceso en tiempo real con PAM: ¡No pierdas ni un minuto!

# El Sort-Object está configurado específicamente para evitar que Export-Csv y Out-GridView trunquen las propiedades de los PSObjects individuales en
# la matriz.
$results | Out-GridView
$results | Export-Csv -Path $logFile -NoTypeInformation
Write-Host "Resultado guardado en $logFile"

Disconnect-VIServer -Server * -Confirm:$false -Force | Out-Null

  • Más cobertura de Microsoft que debes leer (Newsmatic en Flipboard)
  • Administra Active Directory con estos 11 scripts de PowerShell (Newsmatic Premium)
  • Las 5 principales lenguajes de programación que los administradores de sistemas deben aprender (PDF gratuito) (Newsmatic)
  • Cómo encontrar el Pin 1 en un cable de cinta: métodos y consejos.

    En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Redes, allí encontraras muchos artículos similares a Cómo realizar un inventario de máquinas virtuales en VMware con PowerShell , tenemos lo ultimo en tecnología 2023.

    Artículos Relacionados

    Subir

    Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.