Comment spécifier les plateformes prises en charge pour un pilote

Dans Configuration Manager, vous spécifiez les plateformes prises en charge d’un pilote dans la SDMPackageXML propriété XML de l’objet classe WMI SMS_Driver Server du pilote. Le code XML contient un nœud PlatformApplicabilityConditions auquel vous ajoutez PlatformApplicabilityCondition des éléments pour chaque plateforme prise en charge par le pilote.

Remarque

Vous devez ajouter uniquement les plateformes répertoriées dans un objet de classe WMI SMS_SupportedPlatforms Server . Les pilotes ne peuvent être conditionnés que pour les versions principales du système d’exploitation, c’est-à-dire qu’il n’est pas possible de cibler les pilotes sur les Service Packs.

Attention

La partie plateformes prises en charge de SDMPackageXML est la seule partie du schéma CI-XML pouvant être modifiée. Vous ne devez pas apporter de modifications à d’autres parties du code XML.

Le code XML suivant illustre un pilote qui prend en charge deux plateformes. Pour plus d’informations sur le schéma des plateformes prises en charge, consultez Schéma des plateformes prises en charge par le pilote de déploiement de système d’exploitation.

<PlatformApplicabilityConditions>  
    <PlatformApplicabilityCondition DisplayName="All x64 Windows XP Professional" MaxVersion="5.20.9999.9999" MinVersion="5.20.3790.0" Name="Win NT" Platform="x64">  
        <Query1>SELECT * FROM Win32_OperatingSystem WHERE BuildNumber = '3790' AND OSType=18 AND ProductType=1</Query1>   
        <Query2>SELECT * FROM Win32_Processor WHERE Architecture=9 AND DataWidth=64</Query2>   
        </PlatformApplicabilityCondition>  
    <PlatformApplicabilityCondition DisplayName="All x86 Windows 2000" MaxVersion="5.00.9999.9999" MinVersion="5.00.0000.0" Name="Win NT" Platform="I386">  
        <Query1>SELECT * FROM Win32_OperatingSystem WHERE BuildNumber = '2195' AND OSType=18 AND ServicePackMajorVersion >= 4</Query1>   
        <Query2>SELECT * FROM Win32_Processor WHERE Architecture=0</Query2>   
    </PlatformApplicabilityCondition>  
</PlatformApplicabilityConditions>  

Pour valider les exigences d’applicabilité de la plateforme, utilisez la propriété de classe ConditionWMI SMS_SupportedPlatforms Server pour la plateforme requise.

Pour spécifier les plateformes prises en charge pour un pilote

  1. Configurez une connexion au fournisseur SMS. Pour plus d’informations, consultez Notions de base du fournisseur SMS.

  2. Obtenez l’objet de classe WMI SMS_Driver Server pour le pilote. Le pilote est identifié par la propriété CI_IDkey . Pour plus d’informations sur l’obtention d’objets à l’aide d’une propriété de clé, consultez Guide pratique pour lire un objet Configuration Manager à l’aide du code managé

  3. Mettez à jour le code XML du pilote.

  4. Validez les modifications dans le fournisseur SMS.

Exemple

L’exemple de méthode suivant ajoute une plateforme prise en charge au pilote identifié par objDriver. Par exemple, le code d’appel suivant ajoute le système d’exploitation Windows XP Professionnel x64 à la liste des pilotes objDriver des plateformes prises en charge. Vous pouvez obtenir les détails d’une plateforme spécifique à partir de son SMS_SupportedPlatforms instance d’objet.

AddSupportedPlatform objDriver, "All x64 Windows XP Professional", "5.20.9999.9999","5.20.3790.0", "Win NT","x64", "SELECT * FROM Win32_OperatingSystem WHERE BuildNumber = 3790 AND OSType=18 AND ProductType=1", "SELECT * FROM Win32_Processor WHERE Architecture=9 AND DataWidth=64"

Pour plus d’informations sur l’appel de l’exemple de code, consultez Appel d’extraits de code Configuration Manager.

Sub AddSupportedPlatform( objDriver, sDisplayName, sMaxVersion, sMinVersion, sName, sPlatform, sQuery1, sQuery2 )  

    Dim xmlDoc  
    Dim objPlatformNode  
    Dim objAttr  
    Dim objQuery1Node  
    Dim objQuery2Node  
    Dim objPlatformsNode  
    Dim objDriverNode  

    ' Load the SDM Package XML.  
    Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0")  

    xmlDoc.async = False  
    xmlDoc.loadXML(objDriver.Properties_.item("SDMPackageXML"))  
    xmlDoc.setProperty _  
     "SelectionNamespaces","xmlns:dcm='http://schemas.microsoft.com/SystemsCenterConfigurationManager/2006/03/24/DesiredConfiguration'"  

    ' Create a new platform node.  
    Set objPlatformNode = xmlDoc.createNode _  
    ( 1, "PlatformApplicabilityCondition", _  
     "http://schemas.microsoft.com/SystemsCenterConfigurationManager/2006/03/24/DesiredConfiguration")  

    ' Set DisplayName.  
    Set objAttr = xmlDoc.createAttribute("DisplayName")  
    objAttr.value = sDisplayName  
    objPlatformNode.setAttributeNode(objAttr)  

    ' Set MaxVersion.  
    Set objAttr = xmlDoc.createAttribute("MaxVersion")  
    objAttr.value = sMaxVersion  
    objPlatformNode.setAttributeNode(objAttr)  

    ' Set MinVersion.  
    Set objAttr = xmlDoc.createAttribute("MinVersion")  
    objAttr.value = sMinVersion  
    objPlatformNode.setAttributeNode(objAttr)  

    ' Set Name.  
    Set objAttr = xmlDoc.createAttribute("Name")  
    objAttr.value = sName  
    objPlatformNode.setAttributeNode(objAttr)  

    ' Set Platform.  
    Set objAttr = xmlDoc.createAttribute("Platform")  
    objAttr.value = sPlatform  
    objPlatformNode.setAttributeNode(objAttr)  

    ' Set Query1.  
    Set objQuery1Node = xmlDoc.createNode(1, "Query1", "http://schemas.microsoft.com/SystemsCenterConfigurationManager/2006/03/24/DesiredConfiguration")  
    objQuery1Node.text = sQuery1  
    objPlatformNode.appendChild(objQuery1Node)  

    ' Set Query2.  
    Set objQuery2Node = xmlDoc.createNode(1, "Query2", "http://schemas.microsoft.com/SystemsCenterConfigurationManager/2006/03/24/DesiredConfiguration")  
    objQuery2Node.text = sQuery2  
    objPlatformNode.appendChild(objQuery2Node)  

    ' Append to platforms node.  
    Set objPlatformsNode = xmlDoc.selectSingleNode("/dcm:DesiredConfigurationDigest/dcm:Driver/dcm:PlatformApplicabilityConditions")      
    objPlatformsNode.appendChild(objPlatformNode)  

    ' Increment the version number.  
    Set objDriverNode = xmlDoc.selectSingleNode("/dcm:DesiredConfigurationDigest/dcm:Driver")  
    Set objAttr = objDriverNode.attributes.getNamedItem("Version")  
    objAttr.value = objAttr.value + 1  

    ' Save the object.  
    objDriver.Properties_.item("SDMPackageXML") = xmlDoc.xml  
    objDriver.Put_  

End Sub  
public void AddSupportedPlatform(  
    IResultObject driver,  
    string displayName,  
    string maxVersion,  
    string minVersion,  
    string name,  
    string platform,  
    string query1,  
    string query2)  
{  
    try  
    {  
        XmlDocument xmlDoc = new XmlDocument();  
        xmlDoc.LoadXml(driver["SDMPackageXML"].StringValue);  

        string dcmXmlNamespace = "http://schemas.microsoft.com/SystemsCenterConfigurationManager/2006/03/24/DesiredConfiguration";  
        XmlNode condition = xmlDoc.CreateNode  
         (XmlNodeType.Element, "PlatformApplicabilityCondition", dcmXmlNamespace);  

        XmlAttribute displayNameAttribute = xmlDoc.CreateAttribute("DisplayName");  
        displayNameAttribute.Value = displayName;  
        condition.Attributes.SetNamedItem(displayNameAttribute);  

        XmlAttribute osMaxVersionAttribute = xmlDoc.CreateAttribute("MaxVersion");  
        osMaxVersionAttribute.Value = maxVersion;  
        condition.Attributes.SetNamedItem(osMaxVersionAttribute);  

        XmlAttribute osMinVersionAttribute = xmlDoc.CreateAttribute("MinVersion");  
        osMinVersionAttribute.Value = minVersion;  
        condition.Attributes.SetNamedItem(osMinVersionAttribute);  

        XmlAttribute osNameAttribute = xmlDoc.CreateAttribute("Name");  
        osNameAttribute.Value = name;  
        condition.Attributes.SetNamedItem(osNameAttribute);  

        XmlAttribute osPlatformAttribute = xmlDoc.CreateAttribute("Platform");  
        osPlatformAttribute.Value = platform;  
        condition.Attributes.SetNamedItem(osPlatformAttribute);  

        // Create <Query1/> and <Query2/> child nodes.  
        // Then attach to <PlatformApplicabilityCondition/>.  
        XmlNode query1Node = xmlDoc.CreateNode  
            (XmlNodeType.Element, "Query1", dcmXmlNamespace);  
        query1Node.InnerText = query1;  
        condition.AppendChild(query1Node);  

        XmlNode query2Node = xmlDoc.CreateNode  
            (XmlNodeType.Element, "Query2", dcmXmlNamespace);  
        query2Node.InnerText = query2;  
        condition.AppendChild(query2Node);  

        XmlNode platformsNode = xmlDoc["DesiredConfigurationDigest"]["Driver"]["PlatformApplicabilityConditions"];  

         if (platformsNode == null)  
        {  
            Console.WriteLine("empty");  
        }  

        platformsNode.AppendChild(condition);  

        XmlNode driverNode = xmlDoc["DesiredConfigurationDigest"]["Driver"];  
        if (driverNode != null)  
        {  
            int driverVersion = int.Parse(driverNode.Attributes.GetNamedItem("Version").Value) + 1;  
            driverNode.Attributes.GetNamedItem("Version").Value = (driverVersion + 1).ToString();  
        }  
        else  
        {  
            throw new XmlException("Unable to find <Driver/> node while AddingSupportedPlatforms");  
        }  

        // Add the package XML to the driver.  
        StringBuilder xmlText = new StringBuilder();  
        xmlDoc.WriteContentTo(new XmlTextWriter(new StringWriter(xmlText)));  
        driver["SDMPackageXML"].StringValue = xmlText.ToString();  

       driver.Put();  
    }  
    catch (SmsException e)  
    {  
        Console.WriteLine("failed to add supported platform to driver " + e.Message);  
        throw;  
    }  
}  

L’exemple de méthode a les paramètres suivants :

Paramètre Type Description
driver

objDriver
-Géré: IResultObject
- VBScript : SWbemObject
- Objet SMS_Driver valide. Pour plus d’informations, consultez Comment importer un pilote Windows décrit par un fichier INF dans Configuration Manager.
displayName

sDisplayName
-Géré: String
-Vbscript: String
Nom complet de la condition affichée dans la console Configuration Manager.
maxVersion

sMaxVersion
-Géré: String
-Vbscript: String
Version maximale prise en charge.
minVersion

sMinVersion
-Géré: String
-Vbscript: String
Version minimale prise en charge.
name

sName
-Géré: String
-Vbscript: String
Nom du système d’exploitation.
platform

sPlatform
-Géré: String
-Vbscript: String
Nom de la plateforme.
query1

sQuery1
-Géré: String
-Vbscript: String
Première requête utilisée pour identifier la plateforme cliente.
query2

sQuery2
-Géré: String
-Vbscript: String
Deuxième requête utilisée pour identifier la plateforme cliente.

Compilation du code

Cet exemple C# nécessite :

Espaces de noms

Système

System.Collections.Generic

System.Text

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

System.Xml

System.io

Assembly

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Programmation robuste

Pour plus d’informations sur la gestion des erreurs, consultez À propos des erreurs Configuration Manager.

Sécurité de .NET Framework

Pour plus d’informations sur la sécurisation des applications Configuration Manager, consultez Configuration Manager’administration basée sur les rôles.

Voir aussi

Classe WMI du serveur SMS_SupportedPlatforms
Vue d’ensemble des objetsComment se connecter à un fournisseur SMS dans Configuration Manager à l’aide de code managé
Comment se connecter à un fournisseur SMS dans Configuration Manager à l’aide de WMI
Comment déplacer une étape vers un autre groupe de séquences de tâches de déploiement de système d’exploitation
Comment créer un groupe de séquences de tâches de déploiement de système d’exploitation
Comment supprimer une étape d’un groupe de déploiement de système d’exploitation
Vue d’ensemble de la séquencede tâches SMS_SupportedPlatforms classe WMI du serveur