PowerShell: Cmdlet para inventariar los discos fisicos de los hosts de virtualización gestionados por un servidor SCVMM
Posted by urpiano en Miércoles 6 \06\+01:00 octubre \06\+01:00 2010
Esta función de PowerShell lista los discos físicos de los host de virtualización que administra un servidor de System Center Virtual Machine Manager. Puede listar los discos de todos los hosts o sólo los discos de los hosts que son nodos de clúter. 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-VMHostDiskInventory
SINOPSIS
Lista los discos físicos de los host gestionados por SCVMM.
SINTAXIS
Get-VMHostDiskInventory [[-VMM] ] [-Cluster] [[-Fichero] ] []
DESCRIPCIÓN
Este Cmdlet permite obtener un listado de topos los discos físicos
conectados a 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 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-VMHostDiskInventory -VMM SCVMMTIA01
Muestra por pantalla los discos físicos de todos los hosts administrados por
el servidor de SCVMM de nombre SCVMMTIA01.
-------------------------- EJEMPLO 2 --------------------------
C:\PS>Get-VMHostDiskInventory -VMM SCVMMTIA01 -Cluster
Muestra por pantalla los discos físicos 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-VMHostDiskInventory -VMM SCVMMTIA01 -Cluster -Fichero d:\DiscosCluster.tab
Guarda en un fichero de valores separados por tabuladores un listado con los
discos físicos 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-VMHostDiskInventory([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 discos fisicos del host $HDs = Get-VMHostDisk -VMHost $VMHost # Recorremos la colección de discos físicos 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 disco 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 discos físicos de los host gestionados por SCVMM. #.DESCRIPTION # Este Cmdlet permite obtener un listado de topos los discos físicos # conectados a 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 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-VMHostDiskInventory -VMM SCVMMTIA01 # Muestra por pantalla los discos físicos de todos los hosts administrados por # el servidor de SCVMM de nombre SCVMMTIA01. #.EXAMPLE # Get-VMHostDiskInventory -VMM SCVMMTIA01 -Cluster # Muestra por pantalla los discos físicos de todos los hosts, administrados # por el servidor de SCVMM de nombre SCVMMTIA01, que formen parte de un # clúster. #.EXAMPLE # Get-VMHostDiskInventory -VMM SCVMMTIA01 -Cluster -Fichero d:\DiscosCluster.tab # Guarda en un fichero de valores separados por tabuladores un listado con los # discos físicos de todos los hosts, administrados por el servidor de SCVMM de # nombre SCVMMTIA01, que formen parte de un clúster. }
Responder