Cómo recopilar los datos de su inventario de vCenter con este script de VMware PowerShell

Los informes de inventario son una solicitud común cuando se administra un entorno de VMware vCenter. Descubra cómo este script de VMware PowerShell puede hacer que estas solicitudes sean rápidas y fáciles.

Imagen: Shutterstock / SidorArt

Como alguien que administra un entorno virtual de VMware y 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 sus máquinas virtuales para administrar mejor el entorno, pero debido a la naturaleza cambiante de la tecnología, donde los sistemas se construyen o desmantelan a un ritmo regular, puede ser como intentar golpear un objetivo en movimiento.

Como de costumbre, las secuencias de comandos son la clave aquí. Este script de PowerShell basado en VMware puede ayudar a que la recopilación de datos de inventario sea rápida y sencilla. Mi colega Brad Doran, gerente técnico senior de cuentas de Amazon Web Services, me proporcionó este script y lo estoy usando aquí con su permiso. Puede copiarlo y pegarlo en un archivo local llamado VMware_Inventory.ps1, por ejemplo.

Prerrequisitos

Use Windows 10 (teóricamente es posible ejecutar esto en Windows 7, pero puede experimentar dolores de cabeza con las versiones obsoletas de PowerShell, ya que este script requiere PowerShell 4.0 como mínimo).

Ejecute Windows PowerShell ISE como administrador (también puede usar PowerShell normal, pero creo que ISE es el mejor para obtener los máximos resultados y la evaluación de errores).

Instale el módulo VMware PowerCLI utilizando este comentario dentro de la ventana ISE de PowerShell:

Nombre del módulo de instalación VMware.PowerCLI

Si recibe un error de que necesita la versión 2.8.201 del proveedor de NuGet, simplemente haga clic en Sí y el proceso lo descargará e instalará por usted. Tomará unos momentos y luego deberá hacer clic en Sí para continuar, y en unos momentos más verá el programa instalando los paquetes VMWare.PowerCLI relacionados.

VER: Microsoft PowerShell: aprenda a automatizar su jornada laboral (Academia TechRepublic)

Dado que el script requiere el módulo VMware.VimAutomation.Core, también asegúrese de que sea la última versión (a partir de octubre de 2021) instalada a través de este comando:

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

Haga clic en Sí para continuar y en unos momentos más verá el programa instalando el paquete VMWare relacionado.

Si recibe un error que indica: “PackageManagement Install-Package: Authenticode issuer ‘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 el emisor de Authenticode ‘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 desea instalar o actualizar, utilice el parámetro SkipPublisherCheck “

ejecuta este comando:

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

También puede ir aquí y descargar la última versión en (“C: Archivos de programa (x86) VMWare Infrastructure PowerCLI Modules”):

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

Personalizando el guión

El guión se basa en estas variables (Figura A):

$ vcs = @ (“vCenterFQDN”) # FQDN de su servidor vCenter.
$ logFile = “C: Temp VMInventory.csv” # Dónde desea guardar el archivo CSV
$ vcsCluster = “*” # Filtra de qué clúster desea extraer las estadísticas de VM
$ businessUnitName = “Element” # Nombre de la unidad de negocio para la que el script está recopilando estadísticas

Figura A

Para $ vcs, puede reemplazar @ (“vCenterFQDN”) con el nombre de su servidor vCenter entre comillas; de lo contrario, la secuencia de comandos le pedirá que ingrese el nombre.

Para $ logFile, la ruta y el nombre del archivo de registro se pueden cambiar en consecuencia.

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

Para $ businessUnitName, reemplace la entrada “Elemento” de ejemplo con su unidad comercial, departamento o grupo.

VER: Lista de comprobación: inventario del servidor (TechRepublic Premium)

Ejecutando el script

Haga clic en Archivo, luego en Abrir y busque donde guardó el archivo de secuencia de comandos para seleccionarlo y luego cárguelo en PowerShell ISE. Pulsa el botón verde para ejecutarlo.

Si recibe un error relacionado con las políticas de seguridad o si el script no está firmado, ejecute este comando para permitir los scripts locales y los scripts firmados de forma remota:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Si dejó la variable $ vcs como está, se le pedirá que ingrese el nombre del servidor vCenter (Figura B).

Figura B

Una vez que ingrese el nombre, se le pedirá que se autentique en vCenterj (Figura C). Asegúrese de utilizar una cuenta con credenciales de administrador.

Figura C

A continuación, verá que el script se ejecuta y recopila datos de forma activa (Figura D).

Figura D

El script mostrará los resultados y guardará los detalles en “C: Temp VMInventory.csv” si dejó la variable relacionada como está (Figura E).

Figura E

(Tenga en cuenta que eliminé las entradas FQDN que se enumeraron ya que se ejecutó en un entorno empresarial activo).

¡Gracias, Brad, por una excelente herramienta que todo administrador de VMware debería tener en su kit de herramientas!

Comuníquese conmigo a través del enlace de correo electrónico a continuación (a la izquierda de “Biografía completa | Ver todo el contenido de Scott”) si tiene alguna pregunta o problema al ejecutar este script.

#Requires -Version 4
#Requires -Modules VMware.VimAutomation.Core
 
<#
    .SYNOPSIS
 
    Create an inventory in CSV format of virtual machines in vCenter.
 
    .DESCRIPTION
 
    This script is meant to perform an inventory of Virtual Machines. It can connect to multiple vCenters to pull
    statistics from and it can pull statistics from multiple Host Clusters. This script performs read-only operations.
    Output is formatted as CSV using a standard layout.
 
    Variable Details
    $vcs - An array containing the list of vCenter servers to connect to.
    $logFile - The location of where to save the output in CSV format.
    $vcsCluster - The name of the cluster. It accepts wildcard characters, but it cannot be empty.
    $businessUnitName - the busines unit, group or department which owns/supports this environment
 
    Credential Requirements
    $vcsCreds - A user credential that has access to login to vCenter with Read-Only rights at a minimum.
    $wmiCreds - A user credential that has access to perform WMI queries locally on the Windows Virtual Machines
 
 
#>
 
Clear-Host
 
# Edit these variables for your specific environment
$vcs = @("vCenterFQDN")                 # FQDN of your vCenter server.
$logFile = "C:TempVMInventory.csv"    # Where you want to save the CSV file
$vcsCluster = "*"                       # Filters which cluster you want to pull VM stats from.
$businessUnitName = "Element"     # Name of Business Unit that the script is gathering stats for
 
if($vcs -contains "vCenterFQDN"){
    $vcs = Read-Host -Prompt "FQDN of vCenter Server"
}
$vcsCreds = Get-Credential -Message "vCenter Credentials"
#$wmiCreds = Get-Credential -Message "WMI Credentials"
 
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){
    # Progress Bar setup
    $count++
    $percentComplete = [math]::Round(($count / $vms.Count) * 100,1)
    Write-Progress -Activity "Collecting info on $($vm.Name)" -Status "$percentComplete% Complete" -PercentComplete $percentComplete
 
    # Store VM stat info in PSObject
    $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 " "
    # Stores the PSObject containing VM stats in to an PSObject array
    $results += $object
}
 
# The Sort-Object is specifically set up so that the Export-Csv and Out-GridView do not truncate the properties of the individual PSObjects in
# the array.
$results | Out-GridView
$results | Export-Csv -Path $logFile -NoTypeInformation
Write-Host "Output saved to $logFile"
 
Disconnect-VIServer -Server * -Confirm:$false -Force | Out-Null

Ver también

  • Hoja de trucos de Windows 11: todo lo que necesita saber (PDF gratuito) (TechRepublic)
  • Más cobertura de Microsoft de lectura obligada (TechRepublic en Flipboard)
  • Administre Active Directory con estos 11 scripts de PowerShell (TechRepublic Premium)
  • Los 5 principales lenguajes de programación que deben aprender los administradores de sistemas (PDF gratuito) (TechRepublic)
  • Leave a Comment