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…

TIP PowerShell: Listar los Cmdlets que incorpora System Center Virtual Machine Manager en PowerShell y agregarlos a una consola

Posted by urpiano en Martes 5 \05\UTC octubre \05\UTC 2010

Si queremos ver en un listado todos los Cmdlets que incorpora System Center Virtual Machine Manager para su administración desde PowerShell, podemos hacerlo usando el Cmdlet Get-Command. Si en una consola de PowerShell queremos poder usar los comandos de SCVMM, es necesario que utilicemos Add-PsSnapin.

El Cmdlet Get-Command tiene un parámetro Module que nos permite filtrar los comandos devueltos para que sólo se muestren los de determinado módulo o snap-in. Como los comandos de SCVMM son aportados por el snap-in Microsoft.SystemCenter.VirtualMachineManager, si ejecutamos la siguiente línea obtendremos el listado de comandos de SCVMM:

Get-Command  -Module Microsoft.SystemCenter.VirtualMachineManager

El listado que obtenemos es el siguiente:

CommandType     Name                                                Definition
-----------     ----                                                ----------
Cmdlet          Add-VMHost                                          Add-VMHost [-ComputerName]  [-VMHostGrou...
Cmdlet          Add-VMHostCluster                                   Add-VMHostCluster [-Name]  [-VMHostGroup...
Cmdlet          Add-VMHostNetworkAdapter                            Add-VMHostNetworkAdapter [-VMHostNetworkAdapter]...
Cmdlet          Associate-VMHost                                    Associate-VMHost [-VMHost]  [-Credential <...
Cmdlet          Backup-VMMServer                                    Backup-VMMServer -Path  [-VMMServer <Ser...
Cmdlet          Copy-VMDK                                           Copy-VMDK [-VMMServer ] -VMDKP...
Cmdlet          DisableUndoDisk-VM                                  DisableUndoDisk-VM [-VM]  [-Merge] [-RunAsyn...
Cmdlet          Disable-VMHost                                      Disable-VMHost [-VMHost ] [-RunAsynchronou...
Cmdlet          DiscardSavedState-VM                                DiscardSavedState-VM -VM  [-RunAsynchronousl...
Cmdlet          Enable-VMHost                                       Enable-VMHost [-VMHost]  [-RunAsynchronous...
Cmdlet          Get-VM                                              Get-VM [[-Name] ] [-VMMServer <ServerCon...
Cmdlet          Get-VMCheckpoint                                    Get-VMCheckpoint [-VMMServer ]...
Cmdlet          Get-VMHost                                          Get-VMHost [[-ComputerName] ] [-VMMServe...
Cmdlet          Get-VMHostCluster                                   Get-VMHostCluster [[-Name] ] [-VMMServer...
Cmdlet          Get-VMHostDisk                                      Get-VMHostDisk [[-Name] ] -VMHost ...
Cmdlet          Get-VMHostGroup                                     Get-VMHostGroup [[-Name] ] [-VMMServer <...
Cmdlet          Get-VMHostNetworkAdapter                            Get-VMHostNetworkAdapter [[-Name] ] [-VM...
Cmdlet          Get-VMHostRating                                    Get-VMHostRating [-CPUPriority ] [-DiskP...
Cmdlet          Get-VMHostVolume                                    Get-VMHostVolume [[-Name] ] -VMHost <Hos...
Cmdlet          Get-VMMManagedComputer                              Get-VMMManagedComputer [[-ComputerName] ...
Cmdlet          Get-VMMServer                                       Get-VMMServer [-ComputerName]  [-TCPPort...
Cmdlet          Get-VMMUserRole                                     Get-VMMUserRole [[-Name] ] [-VMMServer <...
Cmdlet          Get-VMPerformance                                   Get-VMPerformance [-VM]  [-RunAsynchronously...
Cmdlet          Get-VMwareResourcePool                              Get-VMwareResourcePool -VMHost  [-Verbose]...
Cmdlet          Get-VMXMachineConfig                                Get-VMXMachineConfig [-VMMServer <ServerConnecti...
Cmdlet          Merge-VMCheckpoint                                  Merge-VMCheckpoint -VMCheckpoint  ...
Cmdlet          Move-VM                                             Move-VM [-VM]  -VMHost  [-BlockLMIfHos...
Cmdlet          Move-VMHost                                         Move-VMHost [-VMHost]  -ParentHostGroup <H...
Cmdlet          Move-VMHostCluster                                  Move-VMHostCluster [-VMHostCluster] <HostCluster...
Cmdlet          Move-VMHostGroup                                    Move-VMHostGroup [-VMHostGroup]  [-Jo...
Cmdlet          New-VM                                              New-VM [-Name]  [-StartVM] [-LimitCPUFun...
Cmdlet          New-VMCheckpoint                                    New-VMCheckpoint [-VM]  [-Description <Strin...
Cmdlet          New-VMHostGroup                                     New-VMHostGroup [-Name]  [-VMMServer <Se...
Cmdlet          New-VMMUserRole                                     New-VMMUserRole [-Name]  [-VMMServer <Se...
Cmdlet          New-VMRCCertificateRequest                          New-VMRCCertificateRequest -VMHost  -Path ...
Cmdlet          New-VMXMachineConfig                                New-VMXMachineConfig [-VMXPath]  [-VMMSe...
Cmdlet          Reassociate-VMMManagedComputer                      Reassociate-VMMManagedComputer [-VMMManagedCompu...
Cmdlet          Refresh-VM                                          Refresh-VM [-VM]  [-Force] [-RunAsynchronous...
Cmdlet          Refresh-VMHost                                      Refresh-VMHost [-VMHost]  [-RunAsynchronou...
Cmdlet          Refresh-VMHostCluster                               Refresh-VMHostCluster [-VMHostCluster] <HostClus...
Cmdlet          Register-VM                                         Register-VM [-Path]  [-JobGroup <Nullabl...
Cmdlet          Remove-VM                                           Remove-VM [-VM]  [-Force] [-RunAsynchronousl...
Cmdlet          Remove-VMCheckpoint                                 Remove-VMCheckpoint -VMCheckpoint ...
Cmdlet          Remove-VMHost                                       Remove-VMHost [-VMHost]  [-Credential <PSC...
Cmdlet          Remove-VMHostCluster                                Remove-VMHostCluster [-VMHostCluster] <HostClust...
Cmdlet          Remove-VMHostGroup                                  Remove-VMHostGroup [-VMHostGroup]  [-...
Cmdlet          Remove-VMHostNetworkAdapter                         Remove-VMHostNetworkAdapter [-VirtualNetwork] <V...
Cmdlet          Remove-VMMUserRole                                  Remove-VMMUserRole [-UserRole]  [-JobG...
Cmdlet          Remove-VMXMachineConfig                             Remove-VMXMachineConfig [-VMXMachineConfig] <Vmx...
Cmdlet          Repair-VM                                           Repair-VM [-VM]  -Dismiss [-RunAsynchronousl...
Cmdlet          Restore-VMCheckpoint                                Restore-VMCheckpoint -VMCheckpoint <VMCheckpoint...
Cmdlet          Resume-VM                                           Resume-VM [-VM]  [-RunAsynchronously] [-JobV...
Cmdlet          SaveState-VM                                        SaveState-VM [-VM]  [-RunAsynchronously] [-J...
Cmdlet          Set-VM                                              Set-VM [-VM]  [-VMwareResourcePool <VmwResou...
Cmdlet          Set-VMCheckpoint                                    Set-VMCheckpoint -VMCheckpoint  [-...
Cmdlet          Set-VMHost                                          Set-VMHost [-VMHost]  [-MaintenanceHost <N...
Cmdlet          Set-VMHostCluster                                   Set-VMHostCluster [-VMHostCluster] ...
Cmdlet          Set-VMHostGroup                                     Set-VMHostGroup [-VMHostGroup]  [-Nam...
Cmdlet          Set-VMHostNetworkAdapter                            Set-VMHostNetworkAdapter [-VMHostNetworkAdapter]...
Cmdlet          Set-VMHostVolume                                    Set-VMHostVolume [-VMHostVolume]  -A...
Cmdlet          Set-VMMServer                                       Set-VMMServer [-OpsMgrServer ] [-OpsMgrR...
Cmdlet          Set-VMMUserRole                                     Set-VMMUserRole -UserRole  [-QuotaPoin...
Cmdlet          Shutdown-VM                                         Shutdown-VM [-VM]  [-RunAsynchronously] [-Jo...
Cmdlet          Start-VM                                            Start-VM [-VM]  [-RunAsynchronously] [-JobVa...
Cmdlet          Stop-VM                                             Stop-VM [-VM]  [-RunAsynchronously] [-JobVar...
Cmdlet          Store-VM                                            Store-VM [-VM]  -LibraryServer <LibraryServe...
Cmdlet          Suspend-VM                                          Suspend-VM [-VM]  [-RunAsynchronously] [-Job...
Cmdlet          Update-VMHost                                       Update-VMHost [-VMHost]  [-RunAsynchronous...
Cmdlet          Update-VMMManagedComputer                           Update-VMMManagedComputer [-VMMManagedComputer] ...

Cuando queremos usar PowerShell para administrar SCVMM, abrimos la consola de PowerShell que nos es creada por el producto, pero si abrimos una consola “normal” no tenemos los comandos de SCVMM. Esto es porque la consola que instala el producto no es más que un acceso directo que llama a PowerShell pasandole un parámetro de fichero de consola, fichero de consola que lo único que hace es agregar el snap-in de SCVMM. Cuando queremos crear un script que lance algo usando los comandos de SCVMM, es necesario que nos aseguremos de que el snap-in está cargado, pues no podemos saber si se está lanzando desde una consola “normal” o desde la que instala SCVMM. Para ello podemos poner esto al principio de nuestro script:

If(!(Get-PSSnapin | `
     Where-Object {$_.Name -eq `
                        "Microsoft.SystemCenter.VirtualMachineManager"}))
{
    Add-PSSnapin -name Microsoft.SystemCenter.VirtualMachineManager
}

Lo que hace este If es listar los snap-ins que tiene cargada la consola, los filtra para que sólo esté en la lista el de SCVMM y en el caso de que ésto devuelva un conjunto vacío, carga el snap-in con Add-PsSnapin.

En plan más pulcro, se podría evitar el traer todos los snap-ins y después filtrar, si no sólo preguntar por el que nos interesa. Si lo hacemos así se produce un error que no interrumpe, en el caso de que no esté cargado. Para hacerlo pues, almacenamos el valor de la variable $ErrorActionPreference, para restituirlo después (de forma predeterminada el valor es Continue), y lo establecemos como Stop (esto hace que los errores que no interrumpen sí lo hagan, lo que permite el uso de Try), despues usamos Get-PsSnapin pasandole como nombre de snap-in el de SCVMM; esto lo hacemos encerrado en un Try y su parte Catch ponemos el código de carga del snap-in. Por último, restituimos el valor de $ErrorActionPreference:

$Accion = $ErrorActionPreference
$ErrorActionPreference = "Stop"
Try
{
    $Snapin = Get-PSSnapin Microsoft.SystemCenter.VirtualMachineManager
}
Catch
{
    Add-PSSnapin -name Microsoft.SystemCenter.VirtualMachineManager
}
$ErrorActionPreference = $Accion

Como es obvio, esto mismo que hemos hecho con SCVMM lo podemos hacer con otros productos, como Exchange, por ejemplo.

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: