{How-To} Actualizar todos los agentes de VMM usando PowerShell

SystemCenter2012

 

Cuando trabajamos con una consola con unos cuantos hosts de virtualizacion e instalamos un update rollup suele ser una tarea engorrosa seleccionar cada uno de los hosts para marcar la actualización del agente, aca es donde PowerShell viene al rescate!

Lo único que debemos hacer es abrir una consola de Virtual Machine Manager Command Shell  y escribir:

$Cred = Get-Credential ; Get-SCVMMManagedComputer | Update-SCVMMManagedComputer -Credential $Cred -RunAsynchronously

Este cmdlet nos pedirá las credenciales con las que realizara el update de los agentes y luego seleccionara todos los equipos que esta controlando el VMM para luego generar un job de actualización por cada uno de ellos.

 

Workaround: System Center Configuration Manager 2012 Stop Windows Server 2012 Hyper-V Virtual Machine Management

Hi, a few weeks ago I installed a Windows Server 2012 in production environment, some days later I found that the “Hyper-V Virtual Machine Management” is stoped.

I start the vmms service and it’s stopped again at the next day, searching about this issue, I found this post in technet, in the post some people resolve the problems uninstalling the System Center Configuration Manager 2012 Agent from the Hyper-V Host, in my case this is not the best option, I use the Agent for a lot of activities.

Reading the Hyper-V Event Viewer I found some EentID 19040 when the service is stopping, I create a scheduled task that use this events as trigger. in the action I write a powershell line that start the vmms service again

This is not a definitive solution, just a workaround.

This are the options to create the scheduled task.

Select “Run whether user is logged or not” and use an account with rights in the server.

 

 

In the trigger tab click new adn select a event trigger.

 

 

In the event trigger use Log, Source and EventID from the previous image

 

In the Action tab click at new and select Start a program.

 

 

In program use powershell and in arguments write:

-command “sleep 30 ; start-service vmms”

 

It’s done, when the vmms service is stopped again by SCCM Agent, this task will start it again.

Lanzamiento de #NubePrivada – VMM desde PowerShell


Amigos, les dejo el material de la presentación que realice junto a Mariano Lopez sobre cómo administrar VMM desde PowerShell

 

En esta charla mostramos dos escenarios los cuales se basaban en:

  • Reconfigurar un servidor por medio de scripts
  • Realizar Deploy de WebServers utilizando diferentes scripts de powershell

A continuación pueden ver la presentación de PowerPoint que utilizamos como material de Soporte.

 

 

 

 

Gracias a Hernan Diaz, tenemos un video de la charla el cual les dejo a continuación.

 

 

 

 

 

 

Y como punto final acá pueden encontrar los scripts que utilizamos en la demostración.

Scripts de PowerShell para VMM

Saludos y nos estamos viendo en el próximo evento de #NubePrivada!

 

{How-To} desmontar todos los VirtualDVD de nuestras VM de un saque!

A menudo en la utilización de nuestras VM nos van quedando los VirtualDVD insertados con alguna imagen .iso y eso desparramado por toda nuestra infraestructura, como hacer para ir sacando estos medios virtuales de las diferentes VM, una forma seria desde VMM entrar una por una, entrar a las propiedades, Hardware Configuration, Virtual DVD drive y seleccionar no media….

Pero… cuando tenemos unas 80 VM… se torna un poco tedioso… ahí es donde vale la pena ponerse un ratito y armar algún pequeño script de PoweShell (digo esto mientras meto la mano en el bolsillo cual MacGyver buscando la Victorinox) y de un saque setear el VirtualDVD de nuestras VM en “No Media”

Lo que deberiamos de hacer es ejecutar una Ventana de PowerShell e incluir el PSSnapin de Virtual Machine Manager o directamente ejecutar “Windows PowerShell – Virtual Machine Manager”

luego ejecutar los siguientes cmdlets

Get-VM | where { $_.VMHost -like “patron”} | ForEach-Object {Get-VirtualDVDDrive  -VM $_.Name | Set-VirtualDVDDrive -NoMedia}

Vamos a analizarlo parte por parte para ver su funcionamiento, el primer cmdlet

Get-VM | where { $_.VMhost -kile “patron”} 

lo que hace es seleccionar todas las objetos VM que esten en los hosts (Hyper-V) cuyo nombre coincida con el patron, por ejemplo si nuestra nombenclatura para servidores de Hyper-V es que empiecen con el nombre SRVHyperV deberiamos poner: Get-VM | where { $_.VMhost -kile “SRVHyperV*”}

la salida de este cmdlet la redrigimos con pipe ( | ) hacia el siguiente cmdlet en este caso

ForEach-Object{}

este cmdlet lo que hace es para cada uno de los objetos (parametro que recivido desde el cmdlet anterior) ejecuta lo que tiene entre {} en el caso lo que se esta ejecutando es:

Get-VirtualDVDDrive  -VM $_.Name | Set-VirtualDVDDrive -NoMedia

lo cual tambien se divide en dos cmdlets

Get-VirtualDVDDrive  -VM $_.Name

el cual obtiene el objeto del VirtualDVDDrive del la VM haciendo referencia a esta con la variable $_ (variable con la que se obtiene el objeto desde el que se ha llamado a este) y la propiedad Name de dicho objeto. y luego redirigiendo con pipe el objeto VirtualDVDDrive hacia el siguiente cmdlet

Set-VirtualDVDDrive -NoMedia

Este cmdlet lo que realiza es setear el objeto VirtualDVDDrive, pasandole el modificador -NoMedia le indicamos que lo que queremos realizar es que deje configurado el Virtual DVD Drive del Servidor como si no tubiese ningun medio insertado.

En la siguiente imagen pueden ver como quedaría el cmdlet completo.

Todo esto puede resultar abrumador a primera vista, pero con el uso produce un gran alivio, ya que nos permite realizar en pocos pasos tareas que de otra forma serian muy monótonas.

 

PowerShell: 1 – PSSnapin y modules

Muy buenos días, en esta oportunidad y aprovechando el rediseño y paso a wordpress  de mi blog voy a escribir unas poco sobre una gran herramienta PowerShell.

En la descripción de wikipedia vemos que se trata de una interfaz de linea de comandos (CLI) orientada a objetos, la cual nos permite administrar nuestro servidores, ya sea en cuanto Sistema Operativo, Active Directory, Exchange, Lync, System Center, etc

A su vez nos permite armar scripts y concatenar la salida de un comando hacia la entrada de otro, esto hace que sea una herramienta sumamente versátil a la hora de accionar, un ejemplo practico de esta versatilidad en la concatenación seria por ej; usar un comando de PowerShell para obtener los miembros del grupo Contabilidad en Active Directory y redirigir la salida de este comando hacia un comando en PowerShell para habilitar la funcionalidad de meetings en Lync, de forma que de una sola vez podríamos darle ese permiso a todos los miembros de ese grupo, sin tener que realizar el cambio uno por uno.

Powershell es un sistema totalmente modular, lo cual quiere decir que nosotros podemos agregar o quitar módulos que son colecciones de cmdlets (comandos) y PSSnapin que son una colección de cmdlets y dlls para manejar diferentes sistemas y extender las funcionalidades de PowerShell, por ejemplo agregar PSSnapin de SQL para administrar nuestros servidores de Bases de Datos o de Virtual Machine Manager para trabajar con el entorno virtualizado.

Estos PSSnapin, generalmente están para instalar con las herramientas administrativas de los productos, como ser Exchange, SQL Server, etc

En este post nos dedicaremos a ver que PSSnapin y módulos tenemos en nuestro equipo y como cargarlos para luego utilizarlos.

Podemos ver que PSSnapin tenemos cargados con el comando: Get-PSSnapin

de forma que veríamos algo así:

Get-PSSnapin

Get-PSSnapin

con el mismo comando usando el modificador -Registered podemos ver los que tenemos disponibles para cargar, el comando quedaría Get-PSSnapin -Registered:

Get-PSSnapin -Registered

Get-PSSnapin -Registered

Luego con el comando Add-PSSnapin cargamos el PSSnapin seleccionado, un buen ejemplo de como se pueden concatenar los cmdlets es como podemos listar los PSSnapin disponibles y cargarlos haciendo Get-PSSnapin -Registered | Add-PSSnapin :

Get-PSSnapin -Registered | Add-PSSnapin

Get-PSSnapin -Registered | Add-PSSnapin

De la misma forma que añadimos los PSSnapin vamos a añadir los módulos que necesitemos en nuestra consola de PowerShell, el comando Get-Module -ListAvaiable nos va a mostrar que modulos estan disponibles en nuestro equipo

Get-Module -ListAvailable

Get-Module -ListAvailable

y de la misma forma que con el comando Get-PSSnapin redirigimos esta salida al comando Import-Module para activarlos todos, formando Get-Module -ListAvailable | Import-Module 

Get-Module -ListAvailable | Import-Module

Get-Module -ListAvailable | Import-Module

 

Continuara…. PowerShell: 2 – Comandos básicos

Fuentes:

http://technet.microsoft.com/es-es/library/ms714415(VS.85).aspx

http://technet.microsoft.com/es-ar/scriptcenter/dd742419