Condividi tramite


Come specificare le piattaforme supportate per un driver

In Configuration Manager specificare le piattaforme supportate di un driver nella SDMPackageXML proprietà XML dell'oggetto classe WMI SMS_Driver Server del driver. Il codice XML contiene un nodo PlatformApplicabilityConditions a cui si aggiungono PlatformApplicabilityCondition elementi per ogni piattaforma supportata dal driver.

Nota

È consigliabile aggiungere solo le piattaforme elencate in un oggetto classe WMI SMS_SupportedPlatforms Server . I driver possono essere condizionati solo per le versioni principali del sistema operativo, ovvero non è possibile impostare come destinazione i driver nei Service Pack.

Attenzione

La parte relativa alle piattaforme supportate di SDMPackageXML è l'unica parte dello schema CI-XML che può essere modificata. Non è consigliabile apportare modifiche ad altre parti del codice XML.

Il codice XML seguente illustra un driver che supporta due piattaforme. Per altre informazioni sullo schema delle piattaforme supportate, vedere Schema delle piattaforme supportate dal driver di distribuzione del sistema operativo.

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

Per convalidare i requisiti di applicabilità della piattaforma, usare la proprietà della classe Conditionclasse WMI SMS_SupportedPlatforms Server per la piattaforma richiesta.

Per specificare le piattaforme supportate per un driver

  1. Configurare una connessione al provider SMS. Per altre informazioni, vedere Nozioni fondamentali sul provider SMS.

  2. Ottenere l'oggetto classe WMI SMS_Driver Server per il driver. Il driver è identificato dalla proprietà CI_IDkey . Per informazioni sul recupero di oggetti tramite una proprietà key, vedere How to Read a Configuration Manager Object by Using Managed Code (Come leggere un oggetto Configuration Manager tramite codice gestito)

  3. Aggiornare il codice XML del driver.

  4. Eseguire il commit delle modifiche nel provider SMS.

Esempio

Il metodo di esempio seguente aggiunge una piattaforma supportata al driver identificato da objDriver. Ad esempio, il codice chiamante seguente aggiunge il sistema operativo Windows XP Professional x64 all'elenco dei driver objDriver delle piattaforme supportate. È possibile ottenere i dettagli per una piattaforma specifica dalla relativa SMS_SupportedPlatforms istanza dell'oggetto.

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"

Per informazioni sulla chiamata del codice di esempio, vedere Chiamata di frammenti di codice 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;  
    }  
}  

Il metodo di esempio include i parametri seguenti:

Parametro Tipo Descrizione
driver

objDriver
-Gestito: IResultObject
- VBScript: SWbemObject
- Oggetto SMS_Driver valido. Per altre informazioni, vedere Come importare un driver Windows descritto da un file INF in Configuration Manager.
displayName

sDisplayName
-Gestito: String
-Vbscript: String
Nome visualizzato per la condizione visualizzata nella console di Configuration Manager.
maxVersion

sMaxVersion
-Gestito: String
-Vbscript: String
Versione massima supportata.
minVersion

sMinVersion
-Gestito: String
-Vbscript: String
Versione minima supportata.
name

sName
-Gestito: String
-Vbscript: String
Nome del sistema operativo.
platform

sPlatform
-Gestito: String
-Vbscript: String
Nome della piattaforma.
query1

sQuery1
-Gestito: String
-Vbscript: String
Prima query usata per identificare la piattaforma client.
query2

sQuery2
-Gestito: String
-Vbscript: String
Seconda query usata per identificare la piattaforma client.

Compilazione del codice

Questo esempio C# richiede:

Namespaces

Sistema

System.collections.generic

System.Text

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

System.Xml

System.io

Assembly

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

Programmazione efficiente

Per altre informazioni sulla gestione degli errori, vedere Informazioni sugli errori di Configuration Manager.

Sicurezza di .NET Framework

Per altre informazioni sulla protezione delle applicazioni Configuration Manager, vedere Configuration Manager'amministrazione basata sui ruoli.

Vedere anche

Classe WMI del server SMS_SupportedPlatforms
Panoramica degli oggettiCome connettersi a un provider SMS in Configuration Manager tramite codice gestito
Come connettersi a un provider SMS in Configuration Manager tramite WMI
Come spostare un passaggio in un gruppo di sequenze di attività di distribuzione del sistema operativo diverso
Come creare un gruppo di attività di distribuzione del sistema operativo
Come rimuovere un passaggio da un gruppo di distribuzione del sistema operativo
Panoramica della sequenza di attivitàSMS_SupportedPlatforms classe WMI del server