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…

PowerShell: Cmdlet para inventariar los volúmenes de los hosts de virtualización gestionados por un servidor SCVMM

Posted by urpiano en Miércoles 6 \06\UTC octubre \06\UTC 2010

Esta función de PowerShell lista los volúmenes de los host de virtualización que administra un servidor de System Center Virtual Machine Manager. Puede listar los volúmenes de todos los hosts o sólo los volúmenes de los hosts que son nodos de clúster. El listado se puede ver por pantalla o exportarlo a un fichero de valores separados por tabulador (ideal para ser abierto por Excel)

El Cmdlet incluye ayuda, pego a continuación la ayuda con modificador -Detailed (esta ayuda se basa en la prestación de ayuda basada en comentarios de PowerShell 2.0 ¿Qué todavía tienes la versión 1.0 y no la 2.0? ¿A qué esperas para instalarla si es mucho mejor?):

NOMBRE
    Get-VMHostVolumeInventory
    
SINOPSIS
    Lista los volúmenes de los host gestionados por SCVMM.
    
SINTAXIS
    Get-VMHostVolumeInventory [[-VMM] ] [-Cluster] [[-Fichero] ] []
    
DESCRIPCIÓN
    Este Cmdlet permite obtener un listado de topos los volúmenes de los hosts
    de virtualización gestionados por un servidor de System Center Virtual
    Machine Manager. Permite listar los de todos los host o sólo los de aquellos
     que pertenecen a un clúster. También permite exportar los resultados a un
    fichero de valores separados por tabulador (ideal para ser abierto con
    Excel).
    
PARÁMETROS
    -VMM 
        Nombre o IP del servidor SCVMM al que se consultará.
        
    -Cluster []
        Si se pasa este modificador, sólo se listarán los volúmenes de hosts que
        pertenecen a un clúster.
        
    -Fichero 
        Nombre y ruta del fichero de valores separados por tabulador que se
        generará con los resultados.
        
    
        Este cmdlet admite los parámetros comunes Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer y OutVariable. Para obtener más información, escriba:
        "get-help about_commonparameters".
    
    -------------------------- EJEMPLO 1 --------------------------
    
    C:\PS>Get-VMHostVolumeInventory -VMM SCVMMTIA01
    
    Muestra por pantalla los volúmenes de todos los hosts administrados por el
    servidor de SCVMM de nombre SCVMMTIA01.
    
    -------------------------- EJEMPLO 2 --------------------------
    
    C:\PS>Get-VMHostVolumeInventory -VMM SCVMMTIA01 -Cluster
    
    Muestra por pantalla los volúmenes de todos los hosts, administrados por el
    servidor de SCVMM de nombre SCVMMTIA01, que formen parte de un clúster.
    
     -------------------------- EJEMPLO 3 --------------------------
    
    C:\PS>Get-VMHostVolumeInventory -VMM SCVMMTIA01 -Cluster -Fichero d:\VolCluster.tab
    
    Guarda en un fichero de valores separados por tabuladores un listado con los
    volúmenes de todos los hosts, administrados por el servidor de SCVMM de
    nombre SCVMMTIA01, que formen parte de un clúster.

Este es el código del Cmdlet:

Function Get-VMHostVolumeInventory([string] $VMM,
                                   [switch] $Cluster,
                                   [string] $Fichero)
{
 
    # Comprobamos si están cargados los Cmdlets de Virtual Machine Manager.
    # En caso contrario los cargamos.
    
    # Lo primero es almacenar la acción configurada para los errores que no
    # interrumpen (de forma predeterminada es "Continue")
    $Accion = $ErrorActionPreference
    
    # Cambiamos la acción a Stop, para que sí interrumpan y puedan ser
    # capturados por Try/Catch
    $ErrorActionPreference = "Stop"
    
    # Miramos si está cargada la snap-in de SCVMM. Si no lo está dará error,
    # de ahí el que lo capturemos con Try/Catch
    Try
    {
        # Cargamos la devolución de Get-PsSnapin en una variable para evitar
        # que sea parte de la devolución del Cmdlet
        $Snapin = Get-PSSnapin Microsoft.SystemCenter.VirtualMachineManager
    }
    Catch
    {
        # Si estamos aquí, es que Get-PsSnapin produjo un error y por tanto
        # el snap-in de SCVMM no está cargado, por lo que debemos cargarlo.
        # Para cargar el snap-in de SCVMM usamos una estructura Try/Catch,
        # por si la consola de SCVMM no estuviera instalada en el equipo y
        # por tanto no existiera este snap-in.
        Try
        {
            Add-PSSnapin -name Microsoft.SystemCenter.VirtualMachineManager
        }
        Catch
        {
            # Como se ha producido error al intentar cargar el snap-in de
            # SCVMM, se lo advertimos al usuario, restituimos la acción ante
            # errores que no interrumpen y terminamos el Cmdlet
            Write-Host "Es necesario tener instalada la consola de" `
                       "administración de SCVMM en este equipo para" `
                       "poder ejecutar este Cmdlet."
                       
            # Restituimos la acción original ante errores que no interrumpen
            $ErrorActionPreference = $Accion
            
            # Finalizamos el Cmdlet
            Break
        }   
    }
    # Restituimos el valor de $ErrorActionPreference
    $ErrorActionPreference = $Accion
 
    # Conectamos a SCVMM
    $SVMM = Get-VMMServer $VMM
    
    # Obtenemos los host, o todos o sólo los que pertenecen a
    # un clúster. En primer lugar, si sólo queremos los que
    # pertenecen a un clúster:
    If($Cluster)
    {
        # Iniciamos la colección de hosts.
        $VMHosts = @()
        
        # Recorremos los clústers administrados por SCVMM
        ForEach($HostCluster In Get-VMHostCluster)
        {
            # Recorremos los nodos del clúster
            ForEach($Nodo In $HostCluster.Nodes)
            {
                # Almacenamos el nodo en la colección
                $VMHosts += $Nodo
            }
        }
    }
    # Si queremos obtener todos los hosts:
    Else
    {
        $VMHosts = Get-VMHost
    }
    
    # Iniciamos la devolución de la función
    $Devolucion = @()
    
    # Recorremos la colección de Hosts
    ForEach($VMHost In $VMHosts)
    {
        # Obtenemos la colección de volúmenes del host
        $HDs = Get-VMHostVolume -VMHost $VMHost
        
        # Recorremos la colección de volúmenes del host
        ForEach($HD In $HDs)
        {         
            # Agregamos el nombre del clúster en el que está integrado
            # el host (quedará en blanco si no está integrado a ningún
            # clúster)
            Add-Member -InputObject $HD `
                       -MemberType NoteProperty `
                       -Name VMCluster `
                       -Value "$($VMHost.HostCluster)"
            # Agregamos el volumen a la devolución del Cmdlet
            $Devolucion += $HD
        }
    }
 
    # Si debemos guardar en fichero los resultados,
    # así lo hacemos
    If($Fichero.Length -gt 0)
    {
        $Devolucion | Export-CSV -Delimiter "`t" $Fichero -NoTypeInformation
    }
    # Si no hay que guardar los resultados en fichero, los
    # mostramos por pantalla
    Else
    {
        $Devolucion
    }
 
#.SYNOPSIS
#   Lista los volúmenes de los host gestionados por SCVMM.
#.DESCRIPTION
#   Este Cmdlet permite obtener un listado de topos los volúmenes de los hosts
#   de virtualización gestionados por un servidor de System Center Virtual
#   Machine Manager. Permite listar los de todos los host o sólo los de aquellos
#    que pertenecen a un clúster. También permite exportar los resultados a un
#   fichero de valores separados por tabulador (ideal para ser abierto con
#   Excel).
#.PARAMETER VMM
#   Nombre o IP del servidor SCVMM al que se consultará.
#.PARAMETER Fichero
#   Nombre y ruta del fichero de valores separados por tabulador que se
#   generará con los resultados.
#.PARAMETER Cluster
#   Si se pasa este modificador, sólo se listarán los volúmenes de hosts que
#   pertenecen a un clúster.
#.NOTES
#   Desarrollado por Fernando Reyes López
#   Octubre de 2010
#.LINK
#   http://freyes.svetlian.com -> Artículos de Fernando reyes
#.LINK
#   https://urpiano.wordpress.com -> El Blog de GualtrySoft
#.EXAMPLE
#     Get-VMHostVolumeInventory -VMM SCVMMTIA01
#   Muestra por pantalla los volúmenes de todos los hosts administrados por el
#   servidor de SCVMM de nombre SCVMMTIA01.
#.EXAMPLE
#     Get-VMHostVolumeInventory -VMM SCVMMTIA01 -Cluster
#   Muestra por pantalla los volúmenes de todos los hosts, administrados por el
#   servidor de SCVMM de nombre SCVMMTIA01, que formen parte de un clúster.
#.EXAMPLE
#     Get-VMHostVolumeInventory -VMM SCVMMTIA01 -Cluster -Fichero d:\VolCluster.tab
#   Guarda en un fichero de valores separados por tabuladores un listado con los
#   volúmenes de todos los hosts, administrados por el servidor de SCVMM de
#   nombre SCVMMTIA01, que formen parte de un clúster.
}

2 comentarios to “PowerShell: Cmdlet para inventariar los volúmenes de los hosts de virtualización gestionados por un servidor SCVMM”

  1. Jair Garcia said

    Buenas tardes, antes que nada gracias por la ayuda que presta a la comunidad, tengo una gran duda respecto a CMDLET pues por mas que le he intentado no he logrado sacar un inventario de VMM, tengo poco tiempo administrando la consola de VMM y he encontrado algunas forma de obtener los inventarios pero no de la manera que quisiera, ojala me pudiera orientar pues el error que recibo al intentar ejecutar el cmdlet es que no lo reconoce como comando valido.

    Saludos y 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: