Administración

Inventarios de clientes avanzados con SMS

Wes Dobry

 

Resumen:

  • Uso del Agente de inventario de hardware de SMS 2003
  • Expansión de inventarios con archivos MIF
  • Archivos MOF dinámicos frente a estáticos

Descargar el código de este artículo: DobrySMSInventory2007_04.exe (152KB)

Siempre llega un momento en la vida de todo administrador en el que su jefe le pide alguna información que no se puede recopilar sin cantidades arduas del trabajo. Pero se imagina que es un administrador proactivo

que ya ha recogido estos datos. Usted podría proporcionar a su jefe la información al momento, con lo que evitaría un tiempo de inactividad innecesario, evitaría horas extra y posiblemente ahorraría mucho dinero a la empresa. Usted podría ser un héroe.

Listo para usar, Microsoft ® Systems Management Server (SMS) 2003 recopila una enorme cantidad de información. Pero no lo recopila todo. Por ejemplo, de forma predeterminada SMS 2003 no realiza informes sobre grupos locales y sus miembros o sobre usuarios locales y sus atributos. La falta de esta información puede suponer un problema si, por ejemplo, un técnico pone Usuarios del dominio o, todavía peor, Todos en el grupo de administradores locales de cada sistema en los que ellos trabajan. O, por ejemplo, una empresa no tiene ninguna forma de saber qué archivo local y listas de exclusión de carpetas están en la solución de antivirus o anti software espía de su empresa. Esto puede no parecer un problema importante, hasta que alguien en TI se da cuenta de que los usuarios ponen c:\*.* en la lista de exclusiones.

Con la combinación apropiada de secuencias de comandos, el servicio Instrumental de administración de Windows® (WMI) y el conocimiento SMS, usted puede expandir los inventarios de SMS para que contengan casi cualquier información. Esto es posible a través del uso de archivos MIF (formato de información de administración) y MOF (formato de objeto de administración).

Realizar un inventario

Con SMS, las organizaciones pueden realizar implementaciones personalizadas, supervisar los objetivos y mantener los sistemas implementados. Mediante la expansión de inventarios SMS, se puede crear y administrar un objetivo mucho más personalizado. Por ejemplo, usted puede aplicar directivas de seguridad locales corporativas implementando sus directivas de seguridad en sistemas en los que un usuario ha modificado las directivas. También se pueden deshabilitar cuentas de usuario locales no aprobadas y quitar administradores locales superfluos.

Naturalmente, las organizaciones confían también en SMS para obtener información puntual y detallada acerca de sistemas cliente. La expansión de inventarios le permite crear informes que contengan información completamente personalizada que no está fácilmente disponible cuando sólo se confía en los inventarios predeterminados. Y la información puede ser muy granular. Por ejemplo, usted puede crear un informe que contenga el número de sistemas que tienen una clave del registro específica que señale a una granja de servidores determinada. Esto permitiría a los administradores calcular aproximadamente cuántos clientes se señalan para cada granja en un momento determinado. De igual forma, el equipo de seguridad puede comprobar qué sistemas de la red ejecutan un proceso específico que es conocido por ser un software espía.

El valor de los archivos MIF y MOF procede de la capacidad de introducir información desde casi cualquier fuente con su correspondiente traducción. Siempre que la información esté basada en texto, la información puede manipularse y colocarse en WMI con un archivo MOF, o recogerse en forma de archivo MIF y enviarse en el siguiente ciclo de inventario de hardware. La implementación de una expansión del inventario requiere conocimientos de VBScript o JScript®, así como saber qué se va a recopilar. Teniendo en cuenta que se puede recopilar casi todo, este conocimiento necesario puede abarcar desde WMI a conocimientos avanzados de SQL. Por supuesto, la comprensión de SQL es obligatoria independientemente del tipo de información que recopile, ya que necesitará este conocimiento cuando realice informes de los datos recogidos.

Cómo funcionan los inventarios

SMS contiene dos tipos de procesos de inventario: hardware y software. Los inventarios de software sólo contienen información acerca de archivos, por ejemplo, dónde están ubicados, de qué versiones son, su tamaño y otros atributos de archivo. Sin embargo, el proceso de inventario de software le permite también recopilar archivos y almacenarlos en el servidor del sitio.

La expansión de los inventarios de hardware se realiza fácilmente ya que estos inventarios contienen la matriz más grande de información acerca de un sistema. La información de los inventarios de hardware proviene principalmente de WMI, del Registro y del sistema BIOS.

Los inventarios de hardware se recopilan en una programación, que se configura en las opciones del sitio de Agente de Inventario de hardware en SMS 2003. Las recopilaciones pueden configurarse con tanta frecuencia como una vez cada minuto o de forma tan poco frecuente como una vez cada varios meses. Normalmente, se quiere encontrar un equilibrio que recopile esta información a la mayor velocidad requerida por la administración pero sin recargar la red, los servidores del sitio, los puntos de administración o los clientes.

Cuando el Agente de inventario de hardware se instala por primera vez, compila el archivo sms_def.mof. Éste contiene toda la información que SMS recopila inicialmente. Cuando se compila este archivo, todos los espacios de nombres de SMS y las clases asociadas requeridas por el Agente de inventario de hardware se crean en WMI. La mayor parte de ellos se localizan en el espacio de nombres \\.\root\CIMv2\SMS. Después de la instalación, el Agente de inventario de hardware examina la mayoría de estas clases para construir la información que se envía después al punto de administración y finalmente a la base de datos del sitio.

Archivos MIF

Además de extraer información de estas clases de WMI, el Agente de inventario de hardware busca archivos MIF en las carpetas de recopilación NOIDMIF e IDMIF. Todos los archivos MIF que encuentra el agente en estas ubicaciones se procesan en el siguiente inventario de hardware.

Los archivos MIF ofrecen la manera más fácil de expandir el Inventario de hardware de SMS. Existen dos tipos de archivos MIF: NOIDMIF e IDMIF. Estos archivos son archivos estáticos, similares a XML, y pueden contener casi cualquier información que un usuario podría querer incluir en la base de datos de SMS. Pueden crearse por cualquier medio usado para crear archivos de texto ordinarios. Así, estos archivos pueden crearse con la mayoría de lenguajes de secuencias de comandos o, simplemente, de forma manual.

Normalmente, los archivos MIF se usan en situaciones en las que la información no está incluida ni en el Registro ni WMI o cuando es necesario escribir la información manualmente. Estos archivos se pueden crear, por ejemplo, cuando su equipo de implementación de hardware proporciona un nuevo sistema. El técnico de implementación puede desplazarse a una aplicación HTML del sistema e introducir toda la información de activos que se vaya a usar para actualizar una base de datos de administración de activos. Esa aplicación crea entonces dinámicamente un archivo NOIDMIF y permite al técnico descargar el archivo a la carpeta de la recopilación de archivos NOIDMIF. Este archivo NOIDMIF puede contener toda la información escrita por el técnico y se incorpora a la base de datos de SMS.

Los archivos NOIDMIF y IDMIF tienen pocas diferencias. Un archivo IDMIF contiene un encabezado único que proporciona la información de la arquitectura y un Id. exclusivo. Los archivos IDMIF se pueden usar para incorporar dispositivos que no sean de sistema a SMS como sus propias entidades. Por ejemplo, un script puede usarse para crear sistemas en SMS que sean realmente impresoras y escribir información acerca de ellas en la base de datos de SMS.

Los archivos NOIDMIF y IDMIF se almacenan en ubicaciones estándar, que se dictan por claves del registro. La mayor parte del tiempo, son %SYSTEMROOT%\sys­tem32\ccm\Inven­tory\NOIDMIF e ...\IDMIF, suponiendo que el agente de SMS se haya instalado en la ubicación predeterminada. Si el agente se ha instalado en una ubicación personalizada, los directorios MIF debe estar en %CC­MAGENTINSTALLDIR%\Inventory\NO­IDMIF e ...\IDMIF. Pero si existe cualquier duda en cuanto a las ubicaciones de estos directorios, puede localizar las siguientes claves del Registro:

HKEY_LOCAL_MACHINE\Software\Microsoft\SMS\
Client\Configuration\Client Properties\NOIDMIF Directory

HKEY_LOCAL_MACHINE\Software\Microsoft\SMS\
Client\Configuration\Client Properties\IDMIF Directory

Los archivos MIF tienen siempre el mismo formato, con independencia de la información recogida. Si se observa el archivo MIF mostrado en la Figura 1, verá que el archivo comprende un solo componente que contiene múltiples grupos y un solo atributo en cada grupo. Se requieren todas las secciones, aunque no es necesario que tenga más de un grupo o entrada de atributo. Puede observarlo como si cada grupo del archivo MIF fuera una fila de los datos de la sección nombrada en el inventario de hardware y cada atributo del grupo una columna de esa fila.

Figure 1 Localadmins.mif

Start Component
  Name = “WORKSTATION”
    Start Group
        Name = “Local Admins”
        ID = 1
        Class = “Microsoft|LocalAdminsMIF|1.0”
        Start Attribute
            Name = “Account”
            ID = 1
            ACCESS = READ-ONLY
            Storage = Specific
            Type = String(100)
            Value = “Win32_UserAccount.Domain=’Contoso’,Name=’Domain Admins’”
        End Attribute
    End Group
    Start Group
        Name = “Local Admins”
        ID = 2
        Class = “Microsoft|LocalAdminsMIF”
        Start Attribute
            Name = “Account”
            ID = 1
            ACCESS = READ-ONLY
            Storage = Specific
            Type = String(100)
            Value = “Win32_UserAccount.Domain=’Contoso’,Name=’Technicians’”
        End Attribute
    End Group
    Start Group
        Name = “Local Admins”
        ID = 3
        Class = “Microsoft|LocalAdminsMIF”
        Start Attribute
            Name = “Account”
            ID = 1
            ACCESS = READ-ONLY
            Storage = Specific
            Type = String(100)
            Value = “Win32_UserAccount.Domain=’Example-PC’,Name=’Administrator’”
        End Attribute
    End Group
    Start Group
        Name = “Local Admins”
        ID = 4
        Class = “Microsoft|LocalAdminsMIF”
        Start Attribute
            Name = “Account”
            ID = 1
            ACCESS = READ-ONLY
            Storage = Specific
            Type = String(100)
            Value = “Win32_UserAccount.Domain=’Example-PC’,Name=’RandomUser’”
        End Attribute
    End Group
End Component

El ejemplo LocalAdmin.vbs, que se muestra en la Figura 2, es un VBScript bastante sencillo. Consulta el directorio NOIDMIF, elimina el archivo MIF temporal si existiera, crea el archivo MIF temporal, escribe de forma recursiva en el archivo información recopilada a través de una consulta WMI sencilla, elimina el archivo MIF que existe en la carpeta de recopilación NOIDMIF y, finalmente, mueve el NOIDMIF temporal a la carpeta de recopilación NOIDMIF.

Figure 2 Localadmin.vbs

On Error Resume Next

Const ForAppending = 8

Set objWshShell = CreateObject(“WScript.Shell”)
Set objFSO = CreateObject(“Scripting.FileSystemObject”)

strTempDir = objWshShell.ExpandEnvironmentStrings(“%TEMP%”)
strWinDir = objWshShell.ExpandEnvironmentStrings(“%WINDIR%”)
strComputerName = objWshShell.ExpandEnvironmentStrings(“%COMPUTERNAME%”)
strNoIDMifRegLocation = “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Client\Configuration\Client “ _
   & “Properties\NOIDMIF Directory”
strNoIDMifDirectory = objWshShell.RegRead(strNoIDMifRegLocation)
strMifFileName = “\LocalAdmins.mif”
strClassID = “Microsoft|LocalAdminsMIF|1.0”

If objFSO.FileExists(strTempDir & strMifFile) Then
   objFSO.DeleteFile(strTempDir & strMifFile)
End If

Set objMifFile = objFSO.OpenTextFile(strTempDir & strMifFileName, ForAppending, True)

objMifFile.Writeline “Start Component”
objMifFile.Writeline “ Name = “ & Chr(34) & “WORKSTATION” & Chr(34)

strWBEMQuery = “SELECT partcomponent FROM win32_groupuser WHERE groupcomponent = “ & Chr(34) _
   & “\\\\” & strComputerName & “\\root\\cimv2:Win32_Group.Domain=\” & Chr(34) & strComputerName _
   & “\” & Chr(34) & “,Name=\” & Chr(34) & “Administrators\” & Chr(34) & Chr(34)

Set objWBEM = CreateObject(“WbemScripting.SWbemLocator”)
Set objWBEMServer = objWBEM.ConnectServer(, “root\cimv2”)
Set colResults = objWBEMServer.ExecQuery(strWBEMQuery)

i = 1
For Each objItem in colResults
         objMifFile.Writeline “ Start Group”
         objMifFile.Writeline “ Name = “ & Chr(34) & “Local Admins” & Chr(34)
         objMifFile.Writeline “ ID = “ & i
         objMifFile.Writeline “ Class = “ & Chr(34) & strClassID & Chr(34)
         objMifFile.Writeline “ Start Attribute”
         objMifFile.Writeline “ Name = “ & Chr(34) & “Account” & Chr(34)
         objMifFile.Writeline “ ID = 1”
         objMifFile.Writeline “ ACCESS = READ-ONLY”
         objMifFile.Writeline “ Storage = Specific”
         objMifFile.Writeline “ Type = String(100)”
         strUserName = objItem.PartComponent
         strUserName = mid(strUserName, instr(1, strUserName, chr(58)) + 1)
         If Instr(1, strUserName, Chr(92), 1) > 0 Then 
                  strUserName = Replace(strUserName, Chr(92), Chr(92) & Chr(92), 1, -1, 1)
         End If
         If Instr(1, strUserName, Chr(34), 1) > 0 Then
                  strUserName = Replace(strUserName, Chr(34), Chr(39), 1, -1, 1)
         End If

         objMifFile.Writeline “ Value = “ & Chr(34) & strUserName & Chr(34)
         objMifFile.Writeline “ End Attribute”
         objMifFile.Writeline “ End Group”
         i = i + 1
Next

objMifFile.Writeline “End Component”
objMifFile.Close

If objFSO.FileExists(strNoIDMifDir & strMifFileName) Then
   objFSO.DeleteFile(strNoIDMifDir & strMifFileName)
End If

objFSO.MoveFile strTempDir & strMifFileName, strNoIDMifDir & strMifFileName

Mientras los archivos MIF ofrecen una manera fácil de expandir el Inventario de hardware de SMS, hay algunos problemas que deben tenerse en cuenta al usarlos. Los MIF se procesan en cada ciclo de inventario de hardware. Pero desde que estos archivos se crean, recopilan, analizan y, finalmente, se incluyen en un inventario, la aparición en el inventario de la información incluida en un MIF se puede retrasar hasta en un ciclo del inventario de hardware. Esto significa que si una empresa tiene ciclos de inventario de hardware de un día, los datos de la base de datos de su sitio podrían tener un retraso de dos días. Por lo tanto, debe tener especialmente en cuenta cuándo se anuncian los programas que crean los archivos MIF y cuándo se ejecuta el ciclo de inventario de hardware.

Por ejemplo, una empresa llamada Contoso tiene ciclos de inventario de un día que ejecutan a medianoche. El lunes a la 1:00 a.m., se ejecuta un VBScript, lo que crea un archivo NOIDMIF que contiene el resultado de un escáner de rootkit. Este resultado se recopila a medianoche y se elabora un informe para el punto de administración. El administrador de SMS de Contoso mira entonces la información el miércoles por la noche a eso de las 10:00 p.m. y descubre que la información tiene una antigüedad de 45 horas. Esto sucede porque el administrador de SMS no pensó atentamente cuándo anunciar el programa usado para crear el archivo NOIDMIF.

Archivos MOF

Los archivos MOF son más complicados que los archivos MIF. Y tienen una ventaja sobre los archivos MIF ya que introducen su información directamente en WMI y pasan a formar parte del proceso de recopilación de datos estándar del agente de inventario de hardware. De ese modo, puede que no tenga que anunciar un VBScript una y otra vez para obtener información, lo que ahorra tiempo y problemas. En su lugar, puede anunciar el MOF una vez por equipo y entonces se recopila.

Los archivos MOF también tienen la ventaja de que la información está tan actualizada como el resto de la información del inventario de hardware. Cada vez que el Agente de inventario de hardware realiza su ciclo, se consulta a las clases y proveedores detallados en el archivo MOF y la información se devuelve rápidamente. Cuándo se necesita información rápidamente, se puede ejecutar un paquete que contiene su archivo MOF y un VBScript, con lo que se inicia un inventario de hardware. La información que necesita se adquiere entonces en tan poco tiempo como un ciclo de directiva de programa anunciado.

Existen tres clasificaciones de archivos MOF: Archivos MOF para una clase WMI y espacio de nombres existentes, archivos MOF para una clase adicional con un proveedor de WMI existente y archivos MOF para una clase adicional que no tenga un proveedor de WMI.

Los archivos MOF contienen dos partes. La primera parte es la sección de la definición del espacio de nombres. Aquí es donde se identifica la información del proveedor de WMI. La segunda sección contiene los atributos de elaboración de informes de SMS. Esta sección informa al Agente de inventario de hardware sobre dónde buscar y procesar la información incluida en las clases WMI mencionadas. Puesto que los archivos MOF tratan directamente con WMI, recomiendo tomarse algún tiempo y examinar el Kit del Desarrollo de Software (SDK) de Microsoft WMI si usted planea trabajar con estos archivos (consulte go.microsoft.com/fwlink/?LinkID=83121 para obtener más información).

Cada una de las clasificaciones de archivos MOF mencionadas puede ser estática o dinámica. Por ejemplo, tendría un archivo MOF estático si el procedimiento de creación de la empresa compiló un archivo MOF que incluía información relativa a quién construyó el sistema, qué versión de servidores usaron, cuáles fueron las versiones iniciales, la fecha en la que se fabricó el equipo, etc. Esta información no requiere nunca actualización y, por lo tanto, la información se puede introducir directamente en el archivo MOF y compilarse en WMI mediante mofcomp.exe. Después de que esto suceda, es necesario expandir el área en la que el agente de inventario de hardware realiza la búsqueda agregando la información del grupo y la clase en el archivo sms_def.mof del servidor del sitio.

Un archivo MOF dinámico es similar a un archivo MOF estático excepto porque en vez de escribir información recopilada directamente en WMI, los datos se recopilan a través de un proveedor de WMI. Un proveedor de WMI es un complemento que permite a una aplicación o servicio introducir la información directamente en WMI. Este proveedor permite obtener el acceso dinámico a otras áreas de WMI y el sistema, tal como el Registro, las ubicaciones de archivo y la información de Windows Installer.

A la hora de trabajar con archivos MOF, la manera más fácil de mejorar el inventario de hardware es tener más información sobre el catálogo del inventario de la que ya existe en WMI. Esto se puede hacer extendiendo el sms_def.mof o activando clases de elaboración de informes adicionales que están deshabilitadas actualmente. El archivo sms_def.mof está ubicado en la carpeta \\siteserver\SMS_<sitecode>\inboxes\clifiles.src\hinv Todos los dispositivos de la empresa colocarán el nuevo sms_def.mof en su siguiente ciclo de directiva de equipo y empezarán a recopilar información y elaborar informes sobre la misma.

El siguiente en la lista, en términos de dificultad, es usar un proveedor de WMI existente pero crear una nueva clase. Un ejemplo de este método se muestra en la Figura 3. En este ejemplo, mediante el uso de un proveedor integrado del Registro, la clase CU_Desktop se crea con una propiedad dinámica que consulta HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper en el dispositivo local. Después de que este archivo MOF se compila en el cliente, la información incluida en SMS_Def_Extension.mof (consulte la Figura 4) necesita agregarse a sms_def.mof. El archivo contiene información relativa a si SMS debe realizar un informe sobre la misma, el nombre del grupo, el Id. de clase, qué clase de Agente de inventario de hardware debe mirar en WMI para encontrar la información sobre la que elaborar el informe y, finalmente, los valores reales.

Figure 4 SMS_Def_Extentions.mof

#pragma namespace ("\\\\.\\root\\CIMv2\\sms")
 [ SMS_Report    (TRUE),
  SMS_Group_Name ("Current User Desktop"),
  SMS_Class_ID   ("MICROSOFT|CU_Desktop|1.0") ]
class Power_Mgmt : SMS_Class_Template
{
    [SMS_Report(TRUE),key]
        string  index;
    [SMS_Report(TRUE)]
    sint32   CurrentUserDesktop;
};

Figure 3 Currentuserdesktop.mof

#pragma namespace(“\\\\.\\root\\CIMv2”)
// Registry property provider
instance of __Win32Provider as $PropProv
{
    Name    =”RegPropProv” ;
    ClsID   = “{72967901-68EC-11d0-B729-00AA0062CBB7}”;
    ImpersonationLevel = 1;
    PerUserInitialization = “FALSE”;
};
instance of __PropertyProviderRegistration
{
    Provider       =$PropProv;
    SupportsPut    =TRUE;
    SupportsGet    =TRUE;
};
[DYNPROPS]
class CU_Desktop
{
    [key]
    string  index = “current”;
    sint32 CurrentUserDesktop;
};
[DYNPROPS]
instance of CU_Desktop
{
     [PropertyContext(“local|HKEY_CURRENT_USER\\Control Panel\\Desktop|Wallpaper”),
        Dynamic, Provider(“RegPropProv”)]
        CurrentUserDesktop;
};

Los archivos MOF tienen también la capacidad de obtener acceso a información ofrecida por proveedores de WMI que no están incluidos en sistemas de forma predeterminada. Para usar estos proveedores, el proveedor de WMI se debe distribuir e instalar primero antes de que el archivo MOF se compile en el cliente y sms_def.mof extendido.

Conclusión

Los archivos MIF y MOF son herramientas eficaces para una recopilación de información rápida y sustancial. Estos formatos de archivo ofrecen el marco para introducir fácilmente información en la base de datos de SMS sin modificar directamente las tablas. Con suficiente imaginación, se pueden realizar inventarios e informes de casi todo. Lo que es aún mejor, se pueden evitar situaciones problemáticas, ya que los administradores pueden actuar de forma proactiva para recopilar información esencial.

El conocimiento de los archivos MIF y MOF requiere algún tiempo. Sin embargo, existen recursos útiles que pueden ayudarle a saber cómo usar estos archivos. Para empezar, consulte la documentación WMI y el SDK, así como la Guía de operaciones de Systems Management Server 2003. Si hace el esfuerzo de entender estos conceptos, lo que consiga de la elaboración de inventarios de SMS expandidos compensará con creces todo ese esfuerzo.

Wes Dobry se encuentra en Orlando, área de Florida donde trabaja como consultor y administrador de red para una gran empresa del sector sanitario. Póngase en contacto con él wesdobry@wesdobry.com.

© 2008 Microsoft Corporation and CMP Media, LLC. Reservados todos los derechos; queda prohibida la reproducción parcial o total sin previa autorización.