Hola
Ultimamente estoy trabajando bastante con DCM y una de las cosas que mas me molestaron fue que tenia que esperar unos 15 minutos para que el agente envíe el informe de la evaluación del DCM al sitio para ser luego procesado.
Para saltarse estos 15 minutos, que están configurados por código en el el agente, es necesario utilizar la herramienta SendSchedule.exe.
Esta herramienta viene dentro de las SCCM client tools (ConfigMgr 2007 Toolkit V2\ClientTools)
Si bien el SendSchedule.exe tiene varias opciones (ejecutar SendSchedule.exe /L) no esta clara cual sirve para enviar los informes de DCM
Debéis utilizar la opción "11"
Message GUID: {00000000-0000-0000-0000-000000000111} DisplayName: Send Unsent State Message
Ejecutar:
SendSchedule {00000000-0000-0000-0000-000000000111} MáquinaCliente
Cuando lo ejecutemos se enviará el informe instantáneamente y lo veremos procesado por el site rápidamente, seguramente antes de 15 minutos :D
Espero que les sea de utilidad
Saludos!
Gastón Gardonio
Mostrando entradas con la etiqueta Reporte. Mostrar todas las entradas
Mostrando entradas con la etiqueta Reporte. Mostrar todas las entradas
martes, 21 de febrero de 2012
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
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
Etiquetas:
CPU,
hardware inventory,
Reporte,
SCCM,
smsdef.mof
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
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, 19 de diciembre de 2011
Algunos reportes interesantes para SCCM
Hola!
Reportes!!! Seguramente tengan algunos reportes que utilicen bastante y que les sirven como base para crear otros reportes rápidamente.
Les dejo algunos bastantes interesantes
v_GS_COMPUTER_SYSTEM.Manufacturer0 as [Fabricante],
LDISK.VolumeName0 as [Nombre del disco],
LDISK.FreeSpace0 as [Espacio Libre (MB)],
LDISK.FreeSpace0/1024 as [Espacio Libre(GB)],
LDISK.Size0/1024 as [Total de espacio (GB)],
LDISK.FreeSpace0*100/LDISK.Size0 as C074
FROM v_FullCollectionMembership SYS
join v_GS_LOGICAL_DISK LDISK on SYS.ResourceID = LDISK.ResourceID
JOIN v_R_System RSYS ON SYS.ResourceID = RSYS.ResourceID
join v_GS_COMPUTER_SYSTEM on v_GS_COMPUTER_SYSTEM.ResourceID = RSYS.ResourceID
WHERE
LDISK.Size0 > 0
AND SYS.CollectionID = 'SMS000DS'
ORDER BY SYS.Name, LDISK.DeviceID0
v_FullCollectionMembership.CollectionID
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
where v_GS_COMPUTER_SYSTEM.Name0 = @computer
dbo.v_GS_OPERATING_SYSTEM.LastBootUpTime0, GETDATE()) AS [Días desde el ultimo reboot], dbo.v_GS_OPERATING_SYSTEM.Caption0
FROM dbo.v_GS_OPERATING_SYSTEM INNER JOIN
dbo.v_R_System ON dbo.v_GS_OPERATING_SYSTEM.ResourceID = dbo.v_R_System.ResourceID
WHERE (DATEDIFF(Day, dbo.v_GS_OPERATING_SYSTEM.LastBootUpTime0, GETDATE()) > 7)
ORDER BY [Días desde el ultimo reboot]
(cambiar el GETDATE()) > 7 por el numero de días que deseen)
Select distinct
v_R_System.Netbios_Name0 as [Servidor sin ARCHIVO.TXT],
v_R_System.Operating_System_Name_and0 as [Sistema Operativo]
FROM v_R_System
inner join v_FullCollectionMembership ON v_FullCollectionMembership.ResourceID = v_R_System.ResourceID
inner join v_Collection ON v_Collection.CollectionID = v_FullCollectionMembership.CollectionID
WHERE
v_R_System.Netbios_Name0 not in
(
select v_r_system.Netbios_Name0
from
v_GS_SoftwareFile inner join v_r_system on v_r_system.resourceid=v_GS_SoftwareFile.resourceid
where
v_GS_SoftwareFile.filename like 'ARCHIVO.TXT'
)
AND
v_Collection.Name like 'Servidores que deben tener el Archivo.txt'
order by v_R_System.Netbios_Name0
No duden en consultarme por algún otro ejemplo u otro tema!
Gastón!
Reportes!!! Seguramente tengan algunos reportes que utilicen bastante y que les sirven como base para crear otros reportes rápidamente.
Les dejo algunos bastantes interesantes
- Información de espacio en disco de servidores:
v_GS_COMPUTER_SYSTEM.Manufacturer0 as [Fabricante],
LDISK.VolumeName0 as [Nombre del disco],
LDISK.FreeSpace0 as [Espacio Libre (MB)],
LDISK.FreeSpace0/1024 as [Espacio Libre(GB)],
LDISK.Size0/1024 as [Total de espacio (GB)],
LDISK.FreeSpace0*100/LDISK.Size0 as C074
FROM v_FullCollectionMembership SYS
join v_GS_LOGICAL_DISK LDISK on SYS.ResourceID = LDISK.ResourceID
JOIN v_R_System RSYS ON SYS.ResourceID = RSYS.ResourceID
join v_GS_COMPUTER_SYSTEM on v_GS_COMPUTER_SYSTEM.ResourceID = RSYS.ResourceID
WHERE
LDISK.Size0 > 0
AND SYS.CollectionID = 'SMS000DS'
ORDER BY SYS.Name, LDISK.DeviceID0
- Listar las colecciones a las que pertenece una máquina:
v_FullCollectionMembership.CollectionID
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
where v_GS_COMPUTER_SYSTEM.Name0 = @computer
- Servidores con mas de 7 días sin reiniciarce:
dbo.v_GS_OPERATING_SYSTEM.LastBootUpTime0, GETDATE()) AS [Días desde el ultimo reboot], dbo.v_GS_OPERATING_SYSTEM.Caption0
FROM dbo.v_GS_OPERATING_SYSTEM INNER JOIN
dbo.v_R_System ON dbo.v_GS_OPERATING_SYSTEM.ResourceID = dbo.v_R_System.ResourceID
WHERE (DATEDIFF(Day, dbo.v_GS_OPERATING_SYSTEM.LastBootUpTime0, GETDATE()) > 7)
ORDER BY [Días desde el ultimo reboot]
(cambiar el GETDATE()) > 7 por el numero de días que deseen)
- Informa de las máquinas que no tienen un archivo y pertenece a una colección en particular
Select distinct
v_R_System.Netbios_Name0 as [Servidor sin ARCHIVO.TXT],
v_R_System.Operating_System_Name_and0 as [Sistema Operativo]
FROM v_R_System
inner join v_FullCollectionMembership ON v_FullCollectionMembership.ResourceID = v_R_System.ResourceID
inner join v_Collection ON v_Collection.CollectionID = v_FullCollectionMembership.CollectionID
WHERE
v_R_System.Netbios_Name0 not in
(
select v_r_system.Netbios_Name0
from
v_GS_SoftwareFile inner join v_r_system on v_r_system.resourceid=v_GS_SoftwareFile.resourceid
where
v_GS_SoftwareFile.filename like 'ARCHIVO.TXT'
)
AND
v_Collection.Name like 'Servidores que deben tener el Archivo.txt'
order by v_R_System.Netbios_Name0
No duden en consultarme por algún otro ejemplo u otro tema!
Gastón!
Etiquetas:
hardware inventory,
Reporte,
SCCM,
software inventory
Suscribirse a:
Entradas (Atom)