viernes, 20 de enero de 2012

Como poner en mantenimiento de SCOM los equipos de una colección de SCCM?

Hola a todos!

Ayer mismo y como suele ocurrir muchas veces me han solicitado resolver una idea genial de un administrador en el mismo día...

Este administrador de SCOM deseaba poner en mantenimiento a las máquinas que aparecian en una colección de SCCM por medio de un script en powershell...

¿Como poner en mantenimiento en SCOM las máquinas que se encuentran en una colección de SCCM?

Primero genero una consulta de SQL para obtener los datos de la colección y lo guardamos en C:\coleccion.sql

use sms_SITE
Set nocount on
select distinct System_Resource_N_ARR.Resource_Names0
from v_FullCollectionMembership inner join v_GS_COMPUTER_SYSTEM on v_FullCollectionMembership.ResourceID = v_GS_COMPUTER_SYSTEM.ResourceID join v_Collection on v_Collection.CollectionID = v_FullCollectionMembership.CollectionID
join System_Resource_N_ARR on v_GS_COMPUTER_SYSTEM.ResourceID = System_Resource_N_ARR.ItemKey
where v_Collection.Name like 'NOMBRE DE LA COLECCION DE SCCM'


Reemplazar sms_SITE y 'NOMBRE DE LA COLECCION DE SCCM' por el su base de datos de SCCM y el nombre de la colección que desean obtener las máquinas.

Luego creamos el siguiente scritp de powershell:

osql -E -n -S ServidorSQL\Instancia -iC:\Coleccion.sql -h-1 -s "," -w 380 -oC:\Coleccion.txt
(gc C:\Coleccion.txt) -replace ' ' | sc C:\Coleccion.txt
$maquinas =  (get-content -path C:\Coleccion.txt)
foreach ($maquinas in $maquinas)
{
$rootMS = 'ServidorRMS'
$computerPrincipalName = $maquinas
$minutes = '20'
$comment = 'Reiniciando-desde-SCCM TRUE'
$reason =  'PlannedOther'


Add-PSSnapin "Microsoft.EnterpriseManagement.OperationsManager.Client" -ErrorVariable errSnapin;
Set-Location "OperationsManagerMonitoring::" -ErrorVariable errSnapin;
new-managementGroupConnection -ConnectionString:$rootMS -ErrorVariable errSnapin;
set-location $rootMS -ErrorVariable errSnapin;

$computerClass = get-monitoringclass -name:Microsoft.Windows.Computer
$computerCriteria = "PrincipalName='" + $computerPrincipalName + "'"
$computer = get-monitoringobject -monitoringclass:$computerClass -criteria:$computerCriteria
$startTime = [System.DateTime]::Now
$endTime = $startTime.AddMinutes($minutes)
if($computer.InMaintenanceMode -eq $false)
{
    "Putting " + $computerPrincipalName + " into maintenance mode"
   New-MaintenanceWindow -startTime:$startTime -endTime:$endTime -comment:$comment -Reason:$reason -monitoringObject:$computer
}

}

Reemplazar los siguientes campos:
$rootMS = 'ServidorRMS' Con el servidor RMS de SCOM
$minutes = '20' Con los minutos que van a estar en mantenimiento

$comment = 'Reiniciando-desde-SCCM TRUE' Descripción del reinicio
$reason = 'PlannedOther'

NOTA IMPORTANTE: En el equipo que ejecutemos este powershell deberemos tener instalada la consola de SCOM y el usuario deberá ser administrador de SCOM y de SCCM.

Esta claro que el script se puede mejorar y bastante pero dado que me lo solicitaron "para ayer" creo que ya estoy contento con que funcione.

Saludos!

Gastón

No hay comentarios:

Publicar un comentario

Por favor deja tu comentario