Administration

Inventaires de clients avancés avec SMS

Wes Dobry

 

Vue d'ensemble:

  • Utilisation de l'Agent d'inventaire matériel de SMS 2003
  • Développement de l'inventaire avec les fichiers MIF
  • Comparaison entre les fichiers MOF dynamiques et statiques

Télécharger le code de cet article: DobrySMSInventory2007_04.exe (152KB)

Dans la vie de chaque administrateur, il arrive un moment où son patron lui demande certaines informations qui ne peuvent pas être recueillies sans déployer de gros efforts. Mais imaginez que vous êtes un administrateur dynamique

et que vous avez déjà recueilli ces données. Vous pourriez envoyer ces informations à votre patron immédiatement et éviter ainsi des temps d'arrêt inutiles et des heures de travail supplémentaires. Vous pourriez même économiser beaucoup d'argent à l'entreprise. Vous pourriez être un héros.

Dès l'installation, Microsoft® Systems Management (SMS) 2003 recueille une grande quantité d'informations. Mais il ne recueille pas tout. Par exemple, par défaut, SMS 2003 ne fait pas de rapport sur les groupes locaux et leurs membres ou leurs utilisateurs locaux et leurs attributs. L'absence de ces informations peut poser un problème si, par exemple, un technicien met des Utilisateurs de domaine ou, pire, met tout le monde dans le groupe des administrateurs locaux sur chaque système qu'il traite. Ou si une entreprise n'a aucun moyen d'identifier les listes d'exclusion de fichier et dossier locaux sur l'antivirus ou la solution de protection contre les logiciels espions de l'entreprise. Cela peut ne pas sembler un problème majeur, du moins jusqu'à ce qu'un informaticien se rende compte que les utilisateurs mettent c:\*.* dans la liste d'exclusion.

À l'aide de la bonne combinaison de connaissances en écriture de script, de Windows® Management Instrumentation (WMI) et de SMS, vous pouvez développer les inventaires de SMS de sorte à ce qu'ils contiennent pratiquement n'importe quelle information. Cela est rendu possible par l'utilisation des fichiers MIF (Management Information Format) et MOF (Management Object Format).

Inventaires

Avec SMS, les entreprises peuvent exécuter des déploiements personnalisés, contrôler les cibles et maintenir les systèmes déployés. En développant les inventaires de SMS, vous pouvez créer et gérer une cible beaucoup plus personnalisée. Par exemple, vous pouvez appliquer des stratégies de sécurité locale d'entreprise en déployant vos stratégies de sécurité vers des systèmes dont les stratégies ont été modifiées par un utilisateur. Vous pouvez également désactiver des comptes utilisateur locaux non approuvés et supprimer des administrateurs locaux superflus.

Bien sûr, les entreprises comptent également sur SMS pour obtenir des informations détaillées et au moment opportun sur les systèmes client. Le développement des inventaires vous permet de créer des rapports qui contiennent des informations complètement personnalisées qui ne sont pas facilement disponibles avec les seuls inventaires par défaut. Et les informations peuvent être très précises. Par exemple, vous pourriez créer un rapport contenant le compte de systèmes qui possèdent une clé de registre spécifique pointant vers une batterie de serveurs particulière. Cela permettrait aux administrateurs d'évaluer le nombre de clients pointant vers chaque batterie à un moment donné. De même, l'équipe de sécurité peut vérifier quels systèmes sur le réseau exécutent un processus spécifique qui est reconnu comme un logiciel espion.

La valeur de fichiers MIF et MOF provient de leur capacité à entrer des informations à partir de presque n'importe quelle source avec un peu de traduction. Tant que les informations sont basées sur du texte, elles peuvent être manipulées et placées dans le WMI avec un fichier MOF ou recueillies sous forme d'un fichier MIF et envoyées sur le cycle d'inventaire matériel suivant. L'implémentation d'une expansion d'inventaire nécessite des connaissances en VBScript ou en JScript®, ainsi que sur ce qui doit être collecté. Puisque n'importe quelle information peut être collectée, ces connaissances requises peuvent s'étendre du WMI à des connaissances avancées de SQL. Bien sûr, la compréhension de SQL est une obligation, quel que soit le type d'informations que vous collectez, puisque vous aurez besoin de cette connaissance quand il s'agit de faire un rapport sur les données recueillies.

Comment fonctionnent les inventaires

SMS contient deux types de processus d'inventaire : matériel et logiciel. Les inventaires logiciels s'occupent seulement des informations sur les fichiers, comme par exemple leur emplacement, leur version, leur taille et leurs autres attributs. Cependant, le processus d'inventaire logiciel vous permet également de recueillir des fichiers et de les enregistrer sur le serveur du site.

L'expansion de l'inventaire matériel est facile, parce que l'inventaire matériel contient la plus grande quantité d'informations sur un système. Les informations présentes dans les inventaires matériels sont en grande partie dérivées du WMI, du registre et du BIOS du système.

Les inventaires matériels sont recueillis sur une planification, qui est déterminée dans les paramètres de site de l'Agent d'inventaire matériel sur SMS 2003. Les collectes peuvent être paramétrées pour se produire à chaque minute ou seulement tous les X mois. En général, il vous faut trouver un équilibre pour collecter ces informations à la fréquence maximale demandée par l'administration, mais sans encombrer le réseau, les serveurs de site, les points de gestion ni les clients.

Lorsque l'Agent d'inventaire matériel est installé pour la première fois, il compile le fichier sms_def.mof. Ce fichier contient toutes les informations que SMS recueille initialement. Une fois ce fichier compilé, tous les espaces de noms de SMS et les classes associées requis pour l'Agent d'inventaire matériel sont créés dans le WMI. La plupart sont enregistrés dans l'espace de nom \\.\root\CIMv2\SMS. Après l'installation, l'Agent d'inventaire matériel examine la plupart de ces classes pour générer des informations qui sont ensuite envoyées au point de gestion, puis à la base de données du site.

Fichiers MIF

En plus d'extraire des informations sur ces classes WMI, l'Agent d'inventaire matériel cherche les fichiers MIF dans les dossiers de collection NOIDMIF et IDMIF. Tous les fichiers MIF trouvés par l'agent à ces emplacements sont traités dans l'inventaire matériel suivant.

Les fichiers MIF constituent la façon la plus facile de développer l'inventaire matériel de SMS. Il existe deux types de fichiers de MIF : les fichiers NOIDMIF et IDMIF. Ce sont des fichiers statiques de type XML qui peuvent contenir pratiquement n'importe quelle information qu'un utilisateur pourrait vouloir placer dans la base de données SMS. Ils peuvent être créés par n'importe quel moyen utilisé pour créer des fichiers texte ordinaires. Ainsi, ils peuvent être créés par la plupart des langages d'écriture de script, ou simplement à la main.

Généralement, les fichiers MIF sont utilisés si les informations ne figurent pas dans le registre ou le WMI, ou si elles doivent être saisies manuellement. Ces fichiers peuvent être créés, par exemple, lorsque votre équipe de déploiement de matériel livre un nouveau système. Le technicien de déploiement peut naviguer vers une application HTML sur le système et entrer toutes les informations d'évaluation utilisées pour la mise à jour d'une base de données de gestion d'évaluation. Cette application crée ensuite de façon dynamique un fichier NOIDMIF et permet au technicien de télécharger le fichier sur le dossier de collection de fichiers NOIDMIF. Ce fichier NOIDMIF peut contenir toutes les informations saisies par le technicien, et est incorporé dans la base de données SMS.

Les fichiers NOIDMIF et IDMIF possèdent seulement quelques différences. Un fichier IDMIF contient un en-tête unique qui fournit des informations sur l'architecture et une référence unique. Les fichiers IDMIF peuvent être utilisés pour intégrer des périphériques non système à SMS. Par exemple, un script peut être utilisé pour créer des systèmes dans SMS qui sont en fait des imprimantes et écrire des informations les concernant dans la base de données SMS.

Les fichiers NOIDMIF et IDMIF sont enregistrés dans les emplacements standard qui sont déterminés par les clés de registre. La plupart du temps, il s'agit de %SYSTEMROOT%\sys­tem32\ccm\Inventory\NOIDMIF et ...\IDMIF, en supposant que l'agent SMS ait été installé à l'emplacement par défaut. Si l'agent a été installé à un emplacement personnalisé, les annuaires MIF doivent se trouver dans %CC­MAGENTINSTALLDIR%\Inventory\NO­IDMIF et ...\IDMIF. En cas de doute concernant l'emplacement de ces annuaires, vous le trouverez dans les clés de registre suivantes :

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

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

Les fichiers de MIF possèdent toujours le même format, indépendamment de l'information collectée. En observant le fichier MIF illustré par la figure 1, vous verrez que le fichier comprend un seul composant qui contient des groupes multiples et un seul attribut dans chaque groupe. Toutes les sections sont obligatoires, mais vous n'avez pas besoin d'avoir plus d'une entrée de groupe ou d'attribut. Vous pouvez considérer chaque groupe du fichier MIF comme une ligne dans les données de la section nommée dans l'inventaire matériel, et chaque attribut du groupe comme une colonne de cette ligne.

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

L'exemple LocalAdmin.vbs, illustré par la figure 2, est un VBScript assez simple. Il recherche l'annuaire NOIDMIF, supprime le fichier MIF temporaire s'il existe, crée le fichier MIF temporaire et écrit de manière récursive sur le fichier des informations recueillies à l'aide d'une requête WMI simple. Il supprime ensuite le fichier MIF qui existe dans le dossier de collection NOIDMIF et transfère enfin le NOIDMIF temporaire dans le dossier de collection 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

Si les fichiers MIF sont une manière simple d'étendre l'inventaire matériel SMS, leur utilisation peut poser des problèmes. Les MIF sont traités dans chaque cycle d'inventaire matériel. Mais étant donné que ces fichiers sont créés, recueillis et analysés avant d'être enfin ajoutés à l'inventaire, l'affichage dans l'inventaire des informations contenues dans un MIF peut connaître des délais pouvant aller jusqu'à un cycle d'inventaire matériel. Cela signifie que si une entreprise a des cycles d'inventaire matériel quotidiens, les données de leur base de données de site peuvent avoir jusqu'à deux jours de retard. Donc, il vous faut réfléchir soigneusement et déterminer le moment où les programmes qui créent les fichiers MIF sont publiés et où le cycle d'inventaire matériel est exécuté.

Disons qu'une entreprise appelée Contoso a des cycles d'inventaire quotidiens qui s'exécutent à minuit. Lundi à 1h du matin un VBScript s'exécute, créant un fichier NOIDMIF qui contient la production d'un scanneur de rootkit. Cette production est recueillie à minuit et publiée au point de gestion. L'administrateur SMS de Contoso examine ensuite les informations mercredi soir à environ 22h00 et découvre qu'elles datent de 45 heures. C'est parce que l'administrateur SMS n'a pas pensé à choisir soigneusement le moment auquel le programme utilisé pour créer le fichier NOIDMIF doit être publié.

Fichiers MOF

Les fichiers MOF sont plus compliqués que les fichiers MIF. Ils possèdent un avantage sur les MIF, parce qu'ils entrent leurs informations directement dans le WMI et sont intégrés dans le processus de collecte de données standard de l'agent d'inventaire matériel. Ainsi, vous n'avez pas besoin de publier un VBScript à plusieurs reprises pour obtenir des informations, ce qui vous fait gagner du temps et vous évite beaucoup de tracas. Vous pouvez vous contenter de publier le MOF une fois par ordinateur, puis il est ensuite compilé.

Les fichiers MOF ont également l'avantage de posséder des informations aussi actuelles que le reste des informations contenues dans l'inventaire matériel. Chaque fois que l'Agent d'inventaire matériel parcourt son cycle, les fichiers et les fournisseurs détaillés dans le fichier MOF sont interrogés et les informations sont renvoyées rapidement. Lorsque vous avez besoin rapidement d'informations, vous pouvez exécuter un package qui contient votre fichier MOF et un VBScript pour lancer un inventaire matériel. Les informations dont vous avez besoin sont ensuite acquises dans un délai très court, pouvant aller jusqu'à un cycle de stratégie de programme publié.

Il existe trois classifications de fichiers MOF : les fichiers MOF pour une classe WMI et un espace de noms existants, les fichiers MOF pour une classe supplémentaire avec un fournisseur WMI existant et les fichiers MOF pour une classe supplémentaire qui n'a pas de fournisseur WMI.

Les fichiers MOF comprennent deux parties. La première partie est la section de définition d'espace de noms. C'est l'emplacement où les informations sur le fournisseur WMI sont identifiées. La deuxième section contient les attributs de rapport SMS. Cette section indique à l'Agent d'inventaire matériel où chercher et traiter les informations contenues dans les classes de WMI mentionnées. Puisque les fichiers MOF traitent directement avec le WMI, je vous conseille de prendre un peu de temps pour consulter le Kit de développement logiciel (SDK) de Microsoft WMI, si vous prévoyez de travailler avec ces fichiers (voir go.microsoft.com/fwlink/?LinkID=83121 pour plus d'informations).

Chacune des classifications de fichiers MOF mentionnées ci-dessus peut être statique ou dynamique. Par exemple, un fichier MOF est statique si la procédure de génération de l'entreprise compile un fichier MOF contenant des informations concernant le créateur du système, la génération des serveurs utilisés, les versions de la génération initiale, la date de fabrication de la machine, etc. Ces informations n'ont pas besoin d'être mises à jour et peuvent donc être placées directement dans le fichier MOF et compilées dans WMI à l'aide de mofcomp.exe. Après cela, la zone de recherche de l'Agent d'Inventaire matériel doit être étendue en ajoutant les informations de groupe et de classe au fichier sms_def.mod sur le serveur de site.

Un fichier MOF dynamique est similaire à un fichier MOF statique, sauf qu'au lieu d'écrire les informations collectées directement dans le WMI, les données sont recueillies à l'aide d'un fournisseur WMI. Un fournisseur WMI est un plug-in qui permet à une application ou un service d'entrer des informations directement dans le WMI. Ce fournisseur autorise l'accès dynamique à d'autres zones du WMI et du système, telles que le registre, les emplacements de fichier et les informations de Windows Installer.

Pour ce qui est des fichiers MOF, la manière la plus simple d'étendre l'inventaire logiciel est de le forcer à cataloguer plus d'informations que n'en possède déjà le WMI. Pour cela, vous devez étendre le sms_def.mot ou activer des classes de publication supplémentaires qui sont actuellement désactivées. Le fichier sms_def.mof se trouve dans le dossier \\siteserver\SMS_<sitecode>\inboxes\clifiles.src\hinv. Tous les périphériques de l'entreprise importeront le nouveau sms_def.mof dans leur cycle de stratégie d'ordinateur suivant et commenceront à collecter et à publier les informations.

L'étape suivante consiste à utiliser un fournisseur WMI existant, mais en créant une nouvelle classe. Un exemple de cette approche est affiché dans la figure 3. Dans cet exemple, à l'aide du fournisseur de registre intégré, la classe CU_Desktop est créée avec une propriété dynamique interrogeant HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper sur le périphérique local. Une fois ce fichier MOF compilé sur le client, les informations contenues dans SMS_Def_Extension.mof (voir la figure 4) doivent être ajoutées à sms_def.mof. Le fichier contient des informations concernant leur publication ou non par SMS, le nom du groupe, l'identificateur de classe, la classe que l'Agent d'inventaire matériel doit consulter dans le WMI pour trouver les informations à publier, en enfin les valeurs réelles.

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;
};

Les fichiers MOF ont également la possibilité d'accéder aux informations fournies par les fournisseurs WMI qui ne sont pas incluses par défaut sur les systèmes. Afin d'utiliser ces fournisseurs, le fournisseur WMI doit être tout d'abord distribué et installé avant que le fichier MOF ne soit compilé sur le client et que sms_def.mob ne soit étendu.

Conclusion

Les fichiers MIF et MOF sont des outils puissants servant à effectuer une collecte d'informations rapide et substantielle. Ces formats de fichier fournissent une infrastructure permettant d'entrer facilement des informations dans la base de données SMS sans modifier directement les tableaux. Avec un peu d'imagination, tout (ou presque tout) peut être inventorié et publié. Mieux encore, des situations problématiques peuvent être évitées, car les administrateurs peuvent agir de manière proactive pour rassembler des informations vitales.

Il faut du temps pour comprendre les fichiers MIF et MOF. Cependant, il existe des ressources très utiles qui peuvent vous aider à apprendre à utiliser ces fichiers. Pour commencer, consultez la Documentation sur le WMI et le SDK, ainsi que le Guide d'utilisation de Systems Management Server 2003. Si vous consacrez du temps à ces concepts, vous tirerez de gros avantages des inventaires SMS étendus.

Wes Dobry habite à Orlando (Floride) où il travaille comme consultant et administrateur réseau pour une grande entreprise de services médicaux. Contactez-le à l'adresse suivante : derekm@desktopstandard.com.

© 2008 Microsoft Corporation et CMP Media, LLC. Tous droits réservés. Toute reproduction, totale ou partielle, est interdite sans autorisation préalable.