miércoles, 25 de enero de 2012

Administrando equipos en Workgroups o en Sitios sin relaciones de confianza

Hola!

Bueno vamos a dejar claro como funciona SCCM en equipos que estan fuera del dominio o en sitios donde no hay relaciones de confianza.

Necesitamos 5 cosas:
  1. El rol de Server Locator Point.
  2. Configurar la cuenta de Network Access Account.
  3. Resolver el nombre del servidor Server Locator Point.
  4. Instalar el agente manualmente.
  5. Conectividad y puertos configurados correctamente.
1.- Para empezar debemos tener instalado el rol de Server Locator Point. Este rol se encargará de suministrar a los agentes el Management Point correcto con el que deben contactar. Si no lo tenemos debemos instalarlo.

2.- Debemos configurar la cuenta de Network Access Account para que los equipos fuera del dominio utilicen esta cuenta para acceder a los recursos que estan dentro del dominio, como por ejemplo los paquetes que estan en los Distribution Points.


3.- Dado que estos equipos no tienen acceso al directorio activo deben buscar al SLP utilizando DNS o WINS (igualmente ocurre si no extendemos el esquema de Directorio Activo).
Suele ocurrir que los equipos en workgroups no tienen ni DNS ni WINS configurados, por lo que hará falta modificar el fichero HOST (dentro de C:\Windows\System32\drivers\etc) para que puedan resolver el nombre.
Recomiendo agregar tanto una entrada para el nombre Netbios como otro para el FQDN del servidor.

4.- Por otro lado el agente de SCCM no se puede lanzar utilizando el Client Push Installation por lo que hay que realizarlo manualmente:

Utilizar los parametros:
CCMSETUP.EXE /MP:SERVIDORSCCM /SMSSLP:SERVIDORSCCM /FSP:SERVIDORSCCM /SITECODE:XXX

Con esto nos garantizaremos que los agentes se instalen apuntando al servidor/sitio de SCCM que deseemos. (En caso de que no asignemos a mano el Management Point, el Server Locator Point deberemos modificar tambien el fichero LMHOST dentro de C:\Windows\System32\drivers\etc, si tienen dudas pregunten y les detallo como editarlo.)

5.- Comprobar que podemos acceder al Management Point desde el equipo en workgroup. Para ello abrimos un Internet Explorer e ingresamos a los siguientes sitios (reemplazar SERVIDORSCCM por su servidor de SCCM.

http://SERVIDORSCCM/sms_mp/.sms_aut?mplist
http://SERVIDORSCCM/sms_mp/.sms_aut?mpcert
Si nos resuelve la pagina veremos unas webs con un XML.

Y eso es todo! No olviden de leer detalladamente las limitaciones que tiene trabajar con equipos fuera del dominio.

http://technet.microsoft.com/en-us/library/bb632435.aspx
http://technet.microsoft.com/en-us/library/bb932160.aspx
http://technet.microsoft.com/en-us/library/bb632476.aspx
http://technet.microsoft.com/en-us/library/bb680962.aspx
http://technet.microsoft.com/en-us/library/cc161989.aspx

Saludos!

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

jueves, 19 de enero de 2012

Ventanas de mantenimiento en SCCM

Hola a todos

Últimamente me han realizado varias consultas de como funcionan exactamente las ventanas de mantenimiento dado que a varios conocidos les ha traído dolores de cabeza.

Lo que debemos saber de las ventanas de mantenimiento:

1.       Las ventanas no vienen configuradas por defecto en SCCM. Eso significa que por defecto se va a ejecutar advertisements, actualizaciones y task sequences sin restricciones de tiempo.

2.       Las ventanas de mantenimiento se configuran a nivel de colección por lo que afecta a todos los equipos dentro de ella.

3.       Comúnmente un equipo se encuentra dentro de varias colecciones por lo que puede tener varias ventanas de mantenimiento. En ese caso el equipo sumará todas las ventanas, ya estén separadas o se solapen en tiempo.

4.       Si en algún momento un equipo deja de pertenecer a la colecciones con ventana de mantenimiento, este comenzará a trabajar como si nunca haya tenido ventana, instalando y reinciando cuando este configurado en el advertisement, actualizació o task sequence.

Seguramente el punto 4 es el que trae más dolores de cabeza a los administradores de SCCM y es el que voy a tratar.

Como por defecto no hay ventanas de mantenimiento tendremos disponibilidad de ejecutar tareas las 24 horas.

Cuando configuramos 1 ventana de mantenimiento pasamos a crear una restricción en la ejecución de tareas.

En este ejemplo configuramos una ventana de mantenimiento de 3 horas, de 13:00 a 16:00.


  • De 00:00 a 14:59 no se ejecutará nada ni se reiniciará el equipo.*
  • De 13:00 a 16:00. Se ejecutarán tareas y se reiniciará el equipo.
  • De 16:01 a 23:59 no se ejecutará nada ni se reiniciará el equipo.*
*Se pueden llegar a configurar tareas que ignoren la configuración de la ventana de mantenimiento permitiendo instalar y/o reiniciar el equipo.

Ahora pregunto, ¿Qué sucede si le quitamos a este equipo la ventana de mantenimiento?

Ejecutará todo nuevamente y reiniciará el servidor si lo requiriera, volverá al comportamiento por defecto.


Recomendación:

Si tenemos equipos que siempre tienen una ventana de mantenimiento y las vamos configurando nosotros es mejor siempre dejar una ventana de mantenimiento “antigua” que tenga una ventana con una fecha que ya pasó para evitar que el equipo cambie al estado por defecto.

Espero que les sea de utilidad y responda a sus preguntas.

Por favor, comentar si desean algun teman específico.

Saludos

Gastón Gardonio

martes, 17 de enero de 2012

Modificando el inventario para reportar CPU y Cores correctamente

Hola,

Vamos a hablar de como obtener información de procesadores.

Actualmente existe un problema para obtener esta información en los sistemas Windows 2003 / Windows XP. Estos sistemas operativos no diferencian en WMI los Cores de los Cores Lógicos, es decir si tenemos 2 CPUs con 2 cores cada uno y habilitamos HyperThreading el SCCM nos mostrará un total de 16 Cores...

Hace ya un tiempo se lanzaron hotfixs para solucionar este problema:

KB932370 El número de procesadores físicos hyperthreading habilitado o el número de procesadores multinúcleo físicos se informa incorrectamente en Windows Server 2003
http://support.microsoft.com/kb/932370/es

KB936235 El número de procesadores físicos hyperthreading habilitado o el número de procesadores multinúcleo físicos se informa incorrectamente en Windows XP
http://support.microsoft.com/kb/936235

Luego de tener desplegado este KB podremos modificar el inventario de SCCM para que obtenga dicha información:

Modificar el smsdef.mof agregando este contenido al final (no hace falta deshabilitar la clase sms_processor):

[ SMS_Report (TRUE),
SMS_Group_Name ("Processor_Cores"),
SMS_Class_ID ("CUSTOM|Processor_Cores|1.0")]

class win32_processor : SMS_Class_Template
{
[SMS_Report (FALSE) ] uint16 AddressWidth;
[SMS_Report (FALSE) ] uint16 Architecture;
[SMS_Report (FALSE) ] uint16 Availability;
[SMS_Report (FALSE) ] string Caption;
[SMS_Report (FALSE) ] uint32 ConfigManagerErrorCode;
[SMS_Report (FALSE) ] boolean ConfigManagerUserConfig;
[SMS_Report (FALSE) ] uint16 CpuStatus;
[SMS_Report (FALSE) ] uint32 CurrentClockSpeed;
[SMS_Report (FALSE) ] uint16 CurrentVoltage;
[SMS_Report (FALSE) ] uint16 DataWidth;
[SMS_Report (FALSE) ] string Description;
[SMS_Report (TRUE), key ] string DeviceID;
[SMS_Report (FALSE) ] boolean ErrorCleared;
[SMS_Report (FALSE) ] string ErrorDescription;
[SMS_Report (FALSE) ] uint32 ExtClock;
[SMS_Report (FALSE) ] uint16 Family;
[SMS_Report (FALSE) ] datetime InstallDate;
[SMS_Report (FALSE) ] uint32 L2CacheSize;
[SMS_Report (FALSE) ] uint32 L2CacheSpeed;
[SMS_Report (FALSE) ] uint32 LastErrorCode;
[SMS_Report (FALSE) ] uint16 Level;
[SMS_Report (FALSE) ] uint16 LoadPercentage;
[SMS_Report (FALSE) ] string Manufacturer;
[SMS_Report (FALSE) ] uint32 MaxClockSpeed;
[SMS_Report (FALSE) ] string Name;
[SMS_Report (TRUE) ] uint32 NumberOfCores;
[SMS_Report (TRUE) ] uint32 NumberOfLogicalProcessors;
[SMS_Report (FALSE) ] string OtherFamilyDescription;
[SMS_Report (FALSE) ] string PNPDeviceID;
[SMS_Report (FALSE) ] uint16 PowerManagementCapabilities[];
[SMS_Report (FALSE) ] boolean PowerManagementSupported;
[SMS_Report (FALSE) ] string ProcessorId;
[SMS_Report (FALSE) ] uint16 ProcessorType;
[SMS_Report (FALSE) ] uint16 Revision;
[SMS_Report (FALSE) ] string Role;
[SMS_Report (FALSE) ] string SocketDesignation;
[SMS_Report (FALSE) ] string Status;
[SMS_Report (FALSE) ] uint16 StatusInfo;
[SMS_Report (FALSE) ] string Stepping;
[SMS_Report (FALSE) ] string SystemName;
[SMS_Report (FALSE) ] string UniqueId;
[SMS_Report (FALSE) ] uint16 UpgradeMethod;
[SMS_Report (FALSE) ] string Version;
[SMS_Report (FALSE) ] uint32 VoltageCaps;
};


Por último solo queda crear el reporte y esperar que las máquinas reporten la información al servidor de SCCM:

SELECT
SYS.Netbios_Name0 as [Nombre],
Processor.Name0 as [Tipo de Procesador], 
Processor.NormSpeed0 as [Velocidad de CPU],
ProcCores.NumberOfCores0 as [Cantidad de Cores],
ProcCores.NumberOfLogicalProcessors0 as [Cantidad de Cores Logicos]
FROM v_R_System SYS
JOIN v_GS_PROCESSOR Processor on SYS.ResourceID=Processor.ResourceID
left join v_gs_Processor_Cores as ProcCores on Processor.ResourceID = ProcCores.ResourceID


Saludos!

Gastón Gardonio

jueves, 12 de enero de 2012

Los reportes de DCM no muestran el nombre del Item - Baseline

Hola

Les voy a comentar un problema que ha tenido un administrador amigo cuando comenzó a utilizar Desired Configuration Management.

Luego de crear sus Configuration Items, un Configuration Baseline y aplicarlo sobre una colección comprobó que el cliente de SCCM había recibido la configuración y debería reportar la información correctamente al servidor.
Al utilizar el reporte "Summary compliance by configuration baseline" se dió cuenta que en la columna de Configuration Baseline Name estaba vacía pero la columna Configuration Baseline Unique ID si tenía información.

Al analizar el problema me di cuenta que DCM si utiliza la configuración de Localización cuando se crea. Existe una columna en las tablas llamada LocaleID.

Al ver esto y ver el idioma de Windows pude detectar confirmar que estaba pasando. Al tener el sistema operativo en español y el SCCM a ser en ingles la columna de LocaleID se completaba con un código de idioma que no dejaba funcionar correctamente el reporte.

Las soluciones que propuse:

1.- Utilizar la consola de SCCM desde un Windows en ingles con el localización de United States. (seguramente la menos intrusiva)

2.- Se podría cambiar el reporte original de "Summary compliance by configuration baseline"  y "Summary compliance by configuration  item" para que utilice la tabla v_LocalizedCIProperties en vez de la tabla v_LocalizedCIProperties_SiteLoc dado que v_LocalizedCIProperties no trae problemas con la diferencia de idioma.

3.- Esta última funciona pero no creo que haya necesidad llegar a utilizarla dado que se tiene que modificar a mano la tabla desde SQL. Se debería cambiar el LocaleID de la tabla CI_LocalizedProperties por el que aparece en el LocaleID que aparece en la tabla dbo.SMSData.LocaleID.

Este problema seguramente se va a presentar en todas aquellas personas que instalan el sistema operativo en Español asi que espero que les sea de mucha utilidad.

Saludos

Gastón Gardonio

lunes, 9 de enero de 2012

Como mover la base de datos de WSUS?

Hola

Justo acabo de realizar este procedimiento y creo que es buena idea compartirlo dado que el procedimiento que realicé no me dió ni un problema.

Este procedimiento se aplica cuando las bases de datos no sos Windows Internal Databases/SQL Server Express Edition

1.- Ejecute el WSUS Server Cleanup Wizard para reducir el tamaño de la base de datos.













 
2.- Detener los servicios de IIS y Update Services.

3.- Realizar un backup de la base de datos utilizando el Management Studio y copiar la base de datos a el SQL destino.

4.- Realizar un Attach de la base de datos en el nuevo servidor.

5.- Agregar la cuenta de máquina como usuario de la base de datos. Ejemplo: Dominio\Servidor$

6.- En el servidor de WSUS ejecutar Regedit y dirigirse a : HKLM\Software\Microsoft\Update Services\Server\Setup






7.- Modificar el valor de SqlServerName por el nombre de la instanacion de SQL. Ejemplo: Servidor\Instancia

8.- Volver a iniciar los servicios de IIS y Update Services

Para comprobar que todo funciona correctamente solo hace falta abrir la consola de WSUS y ver si conecta correctamente a su BBDD.

Saludos!

Gastón Gardonio