Coup de projecteur sur les utilitairesApplets de commande SMS pour Windows PowerShell

Don Brown

Télécharger le code de cet article: Utility2007_11.exe (1211KB)

Auparavant, il n'existait aucun moyen de gérer vos clients Microsoft System Management Server (SMS) 2003 à partir de la ligne de commande. Heureusement, parmi les nombreuses technologies d'exception qui ont récemment émergé pour aider les administrateurs à gérer la complexité, les modifications et la configuration, Windows PowerShell est arrivé pour résoudre ce problème.

Pour l'exploiter, j'ai écrit un petit « utilitaire », SMS2003PowerShellSnapinSample (que vous pouvez trouver dans le téléchargement de code qui accompagne cet article, disponible en ligne à l'adresse technetmagazine.com/code07.aspx). L'utilitaire se limite, en fait, à une collection de six applets de commande assemblées en un seul composant logiciel enfichable Windows PowerShellTM. À l'aide de ces applets de commande, vous pouvez configurer la stratégie locale du client SMS à partir de Windows PowerShell pour l'ordinateur local ou les groupes d'ordinateurs distants.

Plus je joue avec la stratégie locale du client SMS, plus je la trouve logique. Avantage collatéral, cela m'a permis d'en découvrir davantage sur le fonctionnement de SMS. J'ai appris qu'en appliquant soigneusement la stratégie locale du client SMS, il était possible de le contrôler d'une toute nouvelle façon : il n'est pas nécessaire de configurer de la même façon tous les ordinateurs sous l'autorité du même site. Des nouvelles idées ont commencé à germer dans mon esprit : configuration de certains ordinateurs pour qu'ils puissent être contrôlés à distance sans qu'aucune autorisation ne soit exigée, modification de la fréquence de contrôle de la nouvelle stratégie de la part du client, désactivation de composants spécifiques à diverses heures du jour, et bien d'autre. L'utilisation de la stratégie locale du client SMS n'est limitée qu'à la mesure de vos idées. Examinons cela de plus près.

À propos de la stratégie locale du client avancé SMS

Programmation de ressources

Tous les clients avancés SMS 2003 fonctionnels ont une stratégie de configuration, laquelle se résume à une liste de paramètres pilotant leurs divers composants. Tous les paramètres du client, du regroupement Inventaire et de la distribution logicielle (entre autres) sont inclus dans ces stratégies de configuration. Les stratégies elles-mêmes sont créées sur le serveur du site et fournies au Client avancé via le point de gestion SMS.

Le véritable corps d'une stratégie SMS est similaire à un fichier MOF (Managed Object Format) en ce sens qu'il contient une série d'instances qui seront compilées dans les espaces de noms\\.\root\CCM WMI (Windows® Management Instrumentation) sur le client avancé. Les divers autres agents liront ensuite ces paramètres, qui se trouvent dans l'espace de noms \\.\root\ccm\policy\machine\requestedconfig. En appliquant la stratégie locale via MOF, cependant, vous ne pouvez compiler qu'un seul MOF sur un seul ordinateur et il doit être exécuté localement (ou plutôt, lorsque vous avez ouvert une session directement sur l'ordinateur). Mais WMI, du fait de sa nature distribuée, est accessible à la fois localement et à distance, ce qui engendre un plus large éventail d'options destinées à aider les administrateurs SMS. En d'autres termes, vous pouvez vous connecter à WMI sur un ordinateur distant aussi facilement que vous pouvez vous connecter à WMI sur votre ordinateur local, sous réserve que vous disposiez des droits administratifs appropriés.

La stratégie du client SMS se compose de paramètres de configuration pour les divers composants clients, mais elle peut également inclure des instructions permettant d'exécuter le contenu du package logiciel. À l'instar de la stratégie de groupe Active Directory®, la stratégie du client avancé SMS 2003 obtenue à parti d'un point de gestion SMS peut être remplacée par la stratégie locale du client SMS. Vous ne pouvez pas remplacer toutes les parties d'une stratégie, mais certaines propriétés vraiment intéressantes peuvent être remplacées. Cela donne aux administrateurs SMS un plus haut niveau de contrôle sur la configuration et sur les opérations du client SMS car cela autorise des exceptions à la configuration standard appliquée au site SMS.

Prenons l'exemple d'un environnement sécurisé et consolidé, où les administrateurs SMS gèrent des serveurs et des postes de travail en tant que clients d'un site principal SMS unique. Dans cet environnement imaginaire, une stratégie de sécurité peut déterminer qu'une autorisation doit être demandée à un utilisateur avant que les techniciens du support technique puissent prendre le contrôle à distance de son ordinateur. Cela pose évidemment un problème si les techniciens de support technique veulent utiliser le contrôle à distance pour se connecter aux serveurs : en principe, aucun utilisateur n'est connecté aux serveurs, donc personne n'accorde d'autorisation pour le contrôle à distance. En appliquant soigneusement la stratégie locale, cependant, l'exigence d'autorisation de l'utilisateur peut être supprimée sur des clients spécifiques. Vous pouvez probablement imaginer des douzaines d'autres circonstances dans lesquelles la stratégie locale SMS peut être utile pour l'octroi d'une exception à la configuration d'un agent de client SMS particulier.

Au cœur du composant logiciel enfichable Windows PowerShell

Une fois vous connaissez les principes fondamentaux de Windows PowerShell, vous pouvez ajouter des éléments à l'exemple de code source fourni dans cet article afin de compléter la stratégie locale du client SMS à partir de la ligne de commande. Certains attributs spécifiques doivent être appliqués à une classe avant d'être exposés à Windows PowerShell. Vous devez décider de la fonction de l'applet de commande et de l'action à exécuter. C'est ce que l'on appelle l'association « Verbe-Nom ». Add, Get et Set sont quelques verbes courants utilisés dans Windows PowerShell. La partie Nom décrit l'objet sur lequel vous voulez agir. En principe, les applets de commande intègrent des paramètres qui sont déclarés dans une classe Cmdlet en tant que propriétés publiques de divers types. Enfin, la fonction ProcessRecord est l'endroit principal dans lequel vous effectuez la plupart de votre travail. La figure 1 illustre un modèle générique que vous pouvez utiliser pour vos propres applets de commande.

Figure 1 Modèle d'applet de commande

[Cmdlet( "Verb", "Noun", SupportsShouldProcess = true )]
public class Verb_Noun : PSCmdlet
{
    [Parameter( ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, 
        HelpMessage = "Parameter" )]
    [ValidateNotNullOrEmpty]
    [Alias( "param" )]
    public string Parameter
    {
        get { return MyParameter; }
        set { MyParameter = value; }
    }
    private string MyParameter;

    protected override void ProcessRecord( )
    {
        //Do your stuff here!
    }
}

Lorsque vous avez compilé votre composant logiciel enfichable, vous l'inscrivez auprès de Windows PowerShell en incluant dans votre projet une classe possédant le jeu d'attribut RunInstaller et quelques propriétés spécifiques définies. Pour plus de détails, consultez le code source accompagnant cet article. Pour inscrire votre composant logiciel enfichable, vous devez utiliser l'outil InstallUtil.exe inclus avec Microsoft® .NET Framework. La figure 2 illustre la syntaxe que vous devez utiliser pour inscrire votre composant logiciel enfichable. Notez que dans Windows Vista®, cette opération nécessite l'élévation des privilèges. Vous devez donc ouvrir Windows PowerShell avec l'option « Ouvrir en tant qu'administrateur » ou utiliser les PowerToys d'élévation de script pour Windows Vista (que vous pouvez télécharger à l'adresse technetmagazine.com/issues/2007/06/UtilitySpotlight).

Figure 2 Installation du composant logiciel enfichable Windows PowerShell

PS> set-alias installutil $env:windir\Microsoft.NET\Framework\v2.0.50727\installutil 
PS> installutil C:\MySMSTools\SMS2003PowerShellSnapinSample.dll 
Microsoft (R) .NET Framework Installation utility Version 2.0.50727.42 
Copyright (C) Microsoft Corporation. All rights reserved. 
Running a transacted installation. 
... 
The transacted install has completed.

La prochaine étape consiste à vérifier que votre composant logiciel enfichable est reconnu par Windows PowerShell. Utilisez l'applet de commande Get-PSsnapin avec le paramètre Registered, et Windows PowerShell résume les composants logiciel enfichables actuellement chargés, suivis d'une liste des composants logiciels enfichables inscrits à ajouter. Votre composant logiciel enfichable doit se trouver dans cette liste :

PS> Get-PSsnapin -registered

Vous pouvez maintenant ajouter le composant logiciel enfichable Windows PowerShell au noyau à l'aide de l'applet de commande Add-PSsnapin, comme suit :

PS> add-pssnapin SMS2003PowerShellSnapinSample

Si l'opération est réussie, vous pouvez exécuter les applets de commande dans votre composant logiciel enfichable Windows PowerShell.

Pour afficher toutes les applets de commande mises à disposition par les composants logiciels enfichables Windows PowerShell, il vous suffit de spécifier le composant logiciel enfichable particulier avec l'applet de commande Get-Command, en transmettant le nom de votre composant logiciel comme valeur du paramètre PSsnapin. L'exemple de composant logiciel enfichable décrit dans l'article affiche six applets de commande, parmi lesquelles le modèle d'Applet de commande Verb-Noun, comme décrit à la figure 3.

Figure 3 Affichage des applets de commande dans un composant logiciel enfichable

Figure 3** Affichage des applets de commande dans un composant logiciel enfichable **(Cliquer sur l'image pour l'agrandir)

Dans l'exemple de code source, je n'ai écrit l'aide pour l'applet de commande Get-SMSServerConnection que pour vous en expliquer la construction. Si vous voulez développer l'aide, vous aurez un exemple dont vous pouvez vous inspirer dans le fichier XML. La figure 4 illustre le résultat de l'aide.

Figure 4 Sortie de l'exemple Get-Help

PS > get-help Get-SMSServerConnection

NAME
    Get-SMSServerConnection

SYNOPSIS
    This cmdlet establishes a connection to the specified SMS primary site server using your current credentials. An object of type "SMSProvider" is returned through the pipeline.

SYNTAX
    Get-SMSServerConnection [-SMSServerName] [<string>] [<CommonParameters>]

DETAILED DESCRIPTION
    This Cmdlet makes a connection to the specified SMS primary site server.  An object of type "SMSProvider" is returned. The "SMSProvider" object is not serializable and is used only to forward on through the pipeline to other cmdlets.

RELATED LINKS

Maintenant que vous avez compris comment installer le composant logiciel enfichable Windows PowerShell, comment connaître les commandes présentes dans le composant logiciel enfichable et comment obtenir de l'aide sur une applet de commande type, nous pouvons commencer à utiliser les applets de commande. Pour afficher une liste de toutes les collections sur un serveur de site principal SMS, vous pouvez utiliser la commande suivante :

PS > Get-SMSServerConnection -server MYSMSSERVER | Get-Collections | Format-Table Name

Remarquez le pipeline. Il s'agit d'un élément fondamental du fonctionnement de Windows PowerShell et d'un outil très puissant. Il est possible de faire à peu près n'importe quoi dans Windows PowerShell sur une seule ligne. L'applet de commande Get-SMSServerConnection établit une connexion avec le serveur SMS. Puisque l'applet de commande Get-Collections ne comporte qu'un seul paramètre d'entrée du type qui est retourné par Get-SMSServerConnection, il vous suffit de transmettre la sortie de l'applet de commande Get-SMSServerConnection à l'applet de commande Get-Collections. C'est ainsi que fonctionne le pipeline et c'est un bon exemple de la façon dont vous pouvez faire passer des objets complexes d'une applet de commande à l'autre. Vous pouvez également stocker des objets dans des variables et si vous le faites dans un script Windows PowerShell, cela peut ressemble à quelque chose comme ceci :

$SMS = Get-SMSServerConnection 
     -server MYSMSSERVER
Get-Collections -SMSServerProvider $SMS

Il se peut que la sortie soit un peu difficile à lire sans mise en forme agréable, car Get-Collections renvoie un objet de type SMSCollections (qui est en gros un ensemble d'objets de type SMSCollection). En résumé, l'affichage n'est pas très joli. Vous devez donc filtrer les collections que vous ne souhaitez pas afficher ou formater l'affichage dans une table comprenant uniquement les propriétés qui vous intéressent. Pour ce faire, transmettez la sortie de l'applet de commande Get-Collections via le pipeline à l'applet de commande Format-Table, qui peut n'afficher que les propriétés que vous spécifiez. Par exemple, vous pouvez ajouter | Format-Table Name, Members.

Mais il existe un moyen encore plus efficace d'afficher tous les membres d'une collection particulière et dans cet exemple, il s'agit de Get-CollectionMembers. Cette applet de commande renvoie un ensemble de chaînes représentant le nom de chaque membre de la collection. Comme vous l'avez sûrement deviné, c'est un excellent candidat à transmettre à la prochaine applet de commande via le pipeline.

Jusqu'à présent, nous n'avons pas parlé de la stratégie locale du client avancé SMS, mais seulement des connexions au serveur du site principal SMS et de l'énumération des collections et des membres des collections. Cet exemple de composant logiciel enfichable Windows PowerShell comprend deux dernières applets de commande appelées respectivement Enable-SoftwareDistribution et Disable-SoftwareDistribution. C'est ici qu'intervient la stratégie locale du client SMS. Ces deux dernières applets de commande manipulent la stratégie locale du client SMS pour le composant Agent client de distribution logicielle sur le client avancé SMS. Comme vous l'avez deviné avec la partie verbe de l'applet de commande, Disable place un remplacement de la stratégie locale du client qui spécifie que l'agent client de distribution logicielle doit également être désactivé. De même, le verbe Enable supprime tous les remplacements de la stratégie locale du client, en ramenant l'agent client de distribution logicielle à son état normal, qui est défini par la stratégie SMS transmise par le point de gestion SMS. La figure 5 montre à quoi peut ressembler un exemple de code uniligne Windows PowerShell qui place un remplacement de la stratégie locale du client SMS sur l'agent client de distribution logicielle en le forçant à se désactiver pour tous les membres de la collection personnalisée des systèmes Windows Server 2003. Le code uniligne permettant de supprimer tous les remplacements de la stratégie locale du client SMS pour l'agent client de distribution logicielle sur cette même collection est également répertorié. Les applets de commande Disable-SoftwareDistribution et Enable-SoftwareDistribution peuvent également être utilisées seules si vous souhaitez manipuler la stratégie locale du client SMS sur quelques ordinateurs seulement.

Figure 5 Assemblage des applets de commande - exemples

PS >Get-SMSServerConnection -server MYSMSSERVER | Get-Collections | where-object {$_.Name -eq "Windows Server 2003 Systems"} | Get-CollectionMembers | Disable-SoftwareDistribution 
PS >
PS > Get-SMSServerConnection -server MYSMSSERVER | Get-Collections | where-object {$_.Name -eq "Windows Server 2003 Systems"} | Get-CollectionMembers | Enable-SoftwareDistribution
PS >
PS >Disable-SoftwareDistribution –hosts SMSCLIENT1, SMSCLIENT2, SMSCLIENT3
PS >
PS >Enable-SoftwareDistribution –hosts SMSCLIENT1, SMSCLIENT2, SMSCLIENT3

Étapes suivantes

L'exemple de code source proposé dans cet article peut vous fournir un excellent point de départ pour appliquer des remplacements de la stratégie locale du client SMS à des groupes d'ordinateurs. Cet exemple concerne uniquement l'agent client de distribution logicielle, et uniquement la propriété Enabled. Les autres agents client possèdent un nombre bien supérieur de propriétés sur lesquelles vous pouvez appliquer des remplacements de la même façon. Maintenant que vous avez un point de départ commun, la prochaine étape logique consiste à examiner les autres parties de la stratégie locale du client SMS. Réfléchissez aux groupes de systèmes gérés auxquels les remplacements de la stratégie locale du client SMS pourraient s'appliquer et aux remplacements de la stratégie locale qu'il serait intéressant d'utiliser. Une dernière remarque : il est important de savoir à l'avance où vous allez. Vous devez donc toujours tout tester de façon approfondie dans un environnement de laboratoire.

Don Brown est technicien principal senior chez Microsoft. Il travaille sur SMS (ahem, SCCM) depuis des lustres. Vous pouvez le contacter à l'adresse donbrown@microsoft.com.

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