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: Usar los Cmdlets de SCVMM 2008 R2 en cualquier consola de PowerShell

Posted by urpiano en Viernes 21 \21\UTC enero \21\UTC 2011

Si queremos utilizar PowerShell para administrar la virtualización vía SCVMM 2008 R2 (System Center Virtual Machine Manager 2008 Release 2) sin abrir la consola que instala SCVMM, que es un archivo .psc1, es decir, un archivo de consola de PowerShell), necesitamos agregar el SnapIn de SCVMM a la consola "normal" de PowerShell. Una vez agregada, podemos querer ver qué Cmdlets son los que agrega este SnapIn. Este Tip versa sobre esto.

Como decíamos, la consola PowerShell que instala SCVMM es un fichero de consola de PowerShell, de nombre cli.psc1 y que está ubicado en <Ruta de instalación de SCVMM>\Consola\bin. Si abrimos con un editor de texto este fichero vemos que contiene lo siguiente:

<?xml version="1.0" encoding="utf-8"?>
<PSConsoleFile ConsoleSchemaVersion="1.0">
  <PSVersion>1.0</PSVersion>
  <PSSnapIns>
    <PSSnapIn Name="Microsoft.SystemCenter.VirtualMachineManager" />
  </PSSnapIns>
</PSConsoleFile>

La línea <PSSnapIn Name=”Microsoft.SystemCenter.VirtualMachineManager” /> nos indica que lo que permite a esta consola operar con SCVMM es la carga del SnapIn "Microsoft.SystemCenter.VirtualMachineManager". Si necesitamos lanzar un script como tarea programada, por ejemplo, deberemos cargar este SnapIn en nuestro script para que pueda usar los Cmdlets de SCVMM. También podemos cargar este SnapIn en una consola de PowerShell "normal". Esto lo realizamos con la siguiente línea.

Add-PsSnapin Microsoft.SystemCenter.VirtualMachineManager

Si queremos comprobar si el SnapIn está cargado, usamos Get-PsSnapin pasándole el nombre del SnapIn; si no está cargado se producirá un error, si lo está devolverá el nombre, la versión y la descripción del mismo.

PS C:\> Get-PsSnapin Microsoft.SystemCenter.VirtualMachineManager
Get-PSSnapin : No Windows PowerShell snap-ins matching the pattern 'Microsoft.SystemCenter.VirtualMachineManager' were
found. Check the pattern and then try the command again.
At line:1 char:13
+ Get-PsSnapin <<<<  Microsoft.SystemCenter.VirtualMachineManager
    + CategoryInfo          : InvalidArgument: (Microsoft.Syste...lMachineManager:String) [Get-PSSnapin], PSArgumentEx
   ception
    + FullyQualifiedErrorId : NoPSSnapInsFound,Microsoft.PowerShell.Commands.GetPSSnapinCommand

PS C:\> Add-PsSnapin Microsoft.SystemCenter.VirtualMachineManager
PS C:\> Get-PsSnapin Microsoft.SystemCenter.VirtualMachineManager


Name        : Microsoft.SystemCenter.VirtualMachineManager
PSVersion   : 2.0
Description : This Windows PowerShell snap-in contains Microsoft System Center Virtual Machine Manager 2008 R2 Cmdlets
              used to manage the Virtual Machine Manager server, library servers, hosts, and virtual machines.

Vale, ya sabemos cómo hacer que cualquier consola de PowerShell sea capaz de utilizar los Cmdlets de SCVMM 2008 R2, veamos ahora cómo averiguar los Cmdlets propios de SCVMM 2008 R2. Para esto usaremos el Cmdlet "Get-Command", al que le pasaremos el nombre del SnapIn como parámetro -PsSnapin:

Get-Command -PsSnapin Microsoft.SystemCenter.VirtualMachineManager

La anterior línea nos mostrará el listado de todos los Cmdlets de SCVMM. Para mayor comodidad, podemos crear una función que nos muestre esta lista y que nos permita filtrar en base al nombre del Cmdlet:

Function Get-VmmCommand([string]$Command="*")
{
    Get-Command $Command -PsSnapin Microsoft.SystemCenter.VirtualMachineManager
}

Esta función nos permite, por ejemplo, obtener todos los Cmdlets de SCVMM cuyo verbo sea Get:

PS C:\l> Get-VmmCommand Get-*

CommandType     Name                                                Definition
-----------     ----                                                ----------
Cmdlet          Get-Certificate                                     Get-Certificate [-ComputerName] <String> [-VMMSe...
Cmdlet          Get-CPUType                                         Get-CPUType [-VMMServer <ServerConnection>] [-ID...
Cmdlet          Get-DependentLibraryObject                          Get-DependentLibraryObject [-LibraryObject] <Lib...
Cmdlet          Get-DirectoryChildItem                              Get-DirectoryChildItem -VMHost <Host> -Path <Str...
Cmdlet          Get-GuestOSProfile                                  Get-GuestOSProfile [[-Name] <String>] [-VMMServe...
Cmdlet          Get-HardwareProfile                                 Get-HardwareProfile [-VMMServer <ServerConnectio...
Cmdlet          Get-ISO                                             Get-ISO [-VMMServer <ServerConnection>] [-Verbos...
Cmdlet          Get-Job                                             Get-Job [[-Name] <String>] [-VMMServer <ServerCo...
Cmdlet          Get-LibraryRating                                   Get-LibraryRating -LibraryServer <LibraryServer[...
Cmdlet          Get-LibraryServer                                   Get-LibraryServer [[-ComputerName] <String>] [-V...
Cmdlet          Get-LibraryShare                                    Get-LibraryShare [-VMMServer <ServerConnection>]...
Cmdlet          Get-MachineConfig                                   Get-MachineConfig [-VMMServer <ServerConnection>...
Cmdlet          Get-NetworkLocation                                 Get-NetworkLocation [-VMMServer <ServerConnectio...
Cmdlet          Get-OperatingSystem                                 Get-OperatingSystem [-VMMServer <ServerConnectio...
Cmdlet          Get-PROTip                                          Get-PROTip [-VMMServer <ServerConnection>] [-PRO...
Cmdlet          Get-Script                                          Get-Script [-VMMServer <ServerConnection>] [-Ver...
Cmdlet          Get-SshPublicKey                                    Get-SshPublicKey [-ComputerName] <String> [-VMMS...
Cmdlet          Get-Step                                            Get-Step [-Job] <Task> [-Name <String>] [-Verbos...
Cmdlet          Get-Template                                        Get-Template [-VMMServer <ServerConnection>] [-V...
Cmdlet          Get-VirtualCOMPort                                  Get-VirtualCOMPort [-VMMServer <ServerConnection...
Cmdlet          Get-VirtualDiskDrive                                Get-VirtualDiskDrive [-VMMServer <ServerConnecti...
Cmdlet          Get-VirtualDVDDrive                                 Get-VirtualDVDDrive [-VMMServer <ServerConnectio...
Cmdlet          Get-VirtualFloppyDisk                               Get-VirtualFloppyDisk [-VMMServer <ServerConnect...
Cmdlet          Get-VirtualFloppyDrive                              Get-VirtualFloppyDrive [-VMMServer <ServerConnec...
Cmdlet          Get-VirtualHardDisk                                 Get-VirtualHardDisk [-VMMServer <ServerConnectio...
Cmdlet          Get-VirtualizationManager                           Get-VirtualizationManager [[-ComputerName] <Stri...
Cmdlet          Get-VirtualNetwork                                  Get-VirtualNetwork [[-Name] <String>] [-VMMServe...
Cmdlet          Get-VirtualNetworkAdapter                           Get-VirtualNetworkAdapter [-VMMServer <ServerCon...
Cmdlet          Get-VirtualSCSIAdapter                              Get-VirtualSCSIAdapter [-VMMServer <ServerConnec...
Cmdlet          Get-VM                                              Get-VM [[-Name] <String>] [-VMMServer <ServerCon...
Cmdlet          Get-VMCheckpoint                                    Get-VMCheckpoint [-VMMServer <ServerConnection>]...
Cmdlet          Get-VMHost                                          Get-VMHost [[-ComputerName] <String>] [-VMMServe...
Cmdlet          Get-VMHostCluster                                   Get-VMHostCluster [[-Name] <String>] [-VMMServer...
Cmdlet          Get-VMHostDisk                                      Get-VMHostDisk [[-Name] <String>] -VMHost <Host>...
Cmdlet          Get-VMHostGroup                                     Get-VMHostGroup [[-Name] <String>] [-VMMServer <...
Cmdlet          Get-VMHostNetworkAdapter                            Get-VMHostNetworkAdapter [[-Name] <String>] [-VM...
Cmdlet          Get-VMHostRating                                    Get-VMHostRating [-CPUPriority <UInt16>] [-DiskP...
Cmdlet          Get-VMHostVolume                                    Get-VMHostVolume [[-Name] <String>] -VMHost <Hos...
Cmdlet          Get-VMMManagedComputer                              Get-VMMManagedComputer [[-ComputerName] <String>...
Cmdlet          Get-VMMServer                                       Get-VMMServer [-ComputerName] <String> [-TCPPort...
Cmdlet          Get-VMMUserRole                                     Get-VMMUserRole [[-Name] <String>] [-VMMServer <...
Cmdlet          Get-VMPerformance                                   Get-VMPerformance [-VM] <VM> [-RunAsynchronously...
Cmdlet          Get-VMwareResourcePool                              Get-VMwareResourcePool -VMHost <Host> [-Verbose]...
Cmdlet          Get-VMXMachineConfig                                Get-VMXMachineConfig [-VMMServer <ServerConnecti...

Pues eso a sido todo. :o))

3 comentarios to “PowerShell: Usar los Cmdlets de SCVMM 2008 R2 en cualquier consola de PowerShell”

  1. jabrajam said

    Buenos días fernando,
    Primeramente agradecerte toda la ayuda que nos bridas,

    tengo una duda sobre una sript y he visto que ayudas a mucha gente, pero he intentado escribirte al correo que publicas (freyes.champú@champú.mvps.org) pero me da error, y te escribo por si me pudieras ayudar. Podrías mandarme tu correo para poderte enviar mi problema.

    Muchas gracias por anticipado

  2. Hola
    Matizar si no me equivoco..que eso solo sirve en una maquina que tenga scvmm instalado, si lo haces en la consola powershell de otro servidor no funciona. Saludos

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: