Partager via


Comment modifier les plateformes prises en charge pour un programme

Votre application peut ajouter des plateformes prises en charge à un package, dans Configuration Manager, en obtenant des instances spécifiques des SMS_Package classes et , SMS_Program puis en ajoutant une instance de la SMS_OS_Details classe à la SupportedOperatingSystems propriété .

Pour modifier les plateformes prises en charge pour un programme

  1. Configurez une connexion au fournisseur SMS.

  2. Obtenez un objet package existant à l’aide de la SMS_Package classe .

  3. Obtenez un objet de programme existant à l’aide de la SMS_Program classe .

  4. Créez et remplissez une instance de la SMS_OS_Details classe .

  5. Ajoutez la nouvelle SMS_OS_Details instance à la SupportedOperatingSystems propriété de l’objet programme (à partir de l’étape 3).

Exemple

L’exemple de méthode suivant montre comment ajouter des plateformes prises en charge pour un programme.

Remarque

Une légère variation de cet exemple peut modifier les valeurs des propriétés pour tous les programmes associés à un package spécifique. Pour obtenir un exemple, consultez l’exemple de code Guide pratique pour répertorier tous les programmes et leur valeur maximale d’exécution . Toutefois, pour obtenir une méthode plus efficace d’accès à un programme spécifique, en utilisant et PackageIDProgramName, consultez l’exemple de code How to Modify Program Properties .

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

Sub ModifySupportedPlatformsForProgram(connection,          _  
                                       existingPackageID,   _  
                                       existingProgramName, _  
                                       newMaxVersion,       _  
                                       newMinVersion,       _  
                                       newName,             _  
                                       newPlatform)   

' Define a constant with the hexadecimal value for RUN_ON_ANY_PLATFORM.   
    Const wbemFlagReturnImmediately = 16  
    Const wbemFlagForwardOnly = 32  
    Const RUN_ON_ANY_PLATFORM = &H08000000  
    Dim packageQuery  
    Dim package  
    Dim allProgramsForPackage  
    Dim programQuery  
    Dim program  
    Dim programPath  
    Dim checkPlatformValue  
    Dim tempSupportedPlatform  
    Dim tempSupportedPlatformsArray  
    ' Build a query to get the specified package.   
     packageQuery = "SMS_Package.PackageID='" & existingPackageID & "'"  
    ' Run the query to get the package.   
    Set package = connection.Get(packageQuery)      
    ' Output package name and ID.   
    WScript.Echo "Package ID:     "  & package.PackageID  
    WScript.Echo "Package Name:   "  & package.Name      
    ' Build a query to get the programs for the package.   
    programQuery = "SELECT * FROM SMS_Program WHERE PackageID='" & existingPackageID & "'"      
    ' Run the query to get the programs.   
    Set allProgramsForPackage = connection.ExecQuery(programQuery, , wbemFlagForwardOnly Or wbemFlagReturnImmediately)      
    'The query returns a collection of program objects that needs to be enumerated.   
    For Each program In allProgramsForPackage                         
        If program.ProgramName = existingProgramName Then              
            ' Get all program object properties (in this case we specifically need some lazy properties).   
            programPath = program.Put_  
            programPath = Mid(programPath, InStr(1, programPath, ":") + 1)   
            Set program = connection.Get(programPath)   
            ' Check whether RUN_ON_ANY_PLATFORM is set.   
            checkPlatformValue = (program.ProgramFlags AND RUN_ON_ANY_PLATFORM)   
            If checkPlatformValue <> 0 Then  
               ' RUN_ON_ANY_PLATFORM is set. Removing RUN_ON_ANY_PLATFORM value.   
                program.ProgramFlags = (program.ProgramFlags XOR RUN_ON_ANY_PLATFORM)   
            End If                           
            ' Output the program name that is being checked for supported platforms.   
            WScript.Echo "Program Name: "  & program.ProgramName             
            ' Create  
            Set tempSupportedPlatform = connection.Get("SMS_OS_Details").SpawnInstance_  
            ' Populate tempSupportedPlatform values.   
            tempSupportedPlatform.MaxVersion = newMaxVersion  
            tempSupportedPlatform.MinVersion = newMinVersion  
            tempSupportedPlatform.Name       = newName  
            tempSupportedPlatform.Platform   = newPlatform  
            ' Get the array of supported operating systems.   
            tempSupportedPlatformsArray = program.SupportedOperatingSystems  
            ' Add the new supported platform values (object) to the temporary array.   
            ReDim Preserve tempSupportedPlatformsArray (Ubound(tempSupportedPlatformsArray) + 1)   
            Set tempSupportedPlatformsArray(Ubound(tempSupportedPlatformsArray)) = tempSupportedPlatform  
            ' Replace the SupportedOperatingSystems object array with the new updated array.   
            program.SupportedOperatingSystems = tempSupportedPlatformsArray  
            ' Save the program.   
            program.Put_  
            ' Output success message.   
            WScript.Echo "Supported Platforms Updated "  
        End If  
    Next  
End Sub  

public void ModifyProgramSupportedPlatforms(WqlConnectionManager connection,  
                                    string existingPackageID,  
                                    string existingProgramNameToModify,  
                                    string newMaxVersion,  
                                    string newMinVersion,  
                                    string newName,  
                                    string newPlatform)  
{  
    try  
    {  
        // Define a constant with the hexadecimal value for RUN_ON_ANY_PLATFORM.   
        const Int32 RUN_ON_ANY_PLATFORM = 0x08000000;  

        // Build query to get the programs for the package.   
        string query = "SELECT * FROM SMS_Program WHERE PackageID='" + existingPackageID + "'";  

        // Load the specific program to change (programname is a key value and must be unique).  
        IResultObject programsForPackage = connection.QueryProcessor.ExecuteQuery(query);  

        // The query returns a collection that needs to be enumerated.  
        foreach (IResultObject program in programsForPackage)  
        {  
            // If a match for the program name is found, make the change(s).  
            if (program["ProgramName"].StringValue == existingProgramNameToModify)  
            {  
                // Get all properties, specifically the lazy properties, for the program object.  
                program.Get();  

                // Check whether RUN_ON_ANY_PLATFORM is already set.  
                Int32 checkPlatformValue = (program["ProgramFlags"].IntegerValue & RUN_ON_ANY_PLATFORM);  

                if (checkPlatformValue != 0)  
                {  
                    // RUN_ON_ANY_PLATFORM is set. Removing RUN_ON_ANY_PLATFORM value.  
                    program["ProgramFlags"].IntegerValue = program["ProgramFlags"].IntegerValue ^ RUN_ON_ANY_PLATFORM;  
                }  

                // Create a new array list to hold the supported platform window objects.  
                List<IResultObject> tempSupportedPlatformsArray = new List<IResultObject>();  

                // Create and populate a temporary SMS_OS_Details object with the new operating system values.  
                IResultObject tempSupportedPlatformsObject = connection.CreateEmbeddedObjectInstance("SMS_OS_Details");  

                // Populate temporary SMS_OS_Details object with the new supported platforms values.  
                tempSupportedPlatformsObject["MaxVersion"].StringValue = newMaxVersion;  
                tempSupportedPlatformsObject["MinVersion"].StringValue = newMinVersion;  
                tempSupportedPlatformsObject["Name"].StringValue = newName;  
                tempSupportedPlatformsObject["Platform"].StringValue = newPlatform;  

                // Populate the local array list with the existing supported platform objects (type SMS_OS_Details).  
                tempSupportedPlatformsArray = program.GetArrayItems("SupportedOperatingSystems");  

                // Add the newly created service window object to the local array list.  
                tempSupportedPlatformsArray.Add(tempSupportedPlatformsObject);  

                // Replace the existing service window objects from the target collection with the temporary array that includes the new service window.  
                program.SetArrayItems("SupportedOperatingSystems", tempSupportedPlatformsArray);  

                // Save the new values in the collection settings instance associated with the Collection ID.  
                program.Put();  

                // Output program name.  
                Console.WriteLine("Modified program: " + program["ProgramName"].StringValue);  
            }  
        }  
    }  
    catch (SmsException ex)  
    {  
        Console.WriteLine("Failed to modify the program. Error: " + ex.Message);  
        throw;  
    }  
}  

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

Paramètre Type Description
connection -Géré: WqlConnectionManager
- VBScript : SWbemServices
Connexion valide au fournisseur SMS.
existingPackageID -Géré: String
-Vbscript: String
ID de package pour un package existant.
existingProgramName -Géré: String
-Vbscript: String
Nom du programme pour un programme existant.
newMaxVersion -Géré: String
-Vbscript: String
Version maximale prise en charge.
newMinVersionsion -Géré: String
-Vbscript: String
Version minimale prise en charge.
newName -Géré: String
-Vbscript: String
Nom du programme modifié.
newPlatform -Géré: String
-Vbscript: String
Nouvelle plateforme.

Compilation du code

L’exemple C# nécessite :

Espaces de noms

Système

System.Collections.Generic

Microsoft. ConfigurationManagement.ManagementProvider

Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

adminui.wqlqueryengine

microsoft.configurationmanagement.managementprovider

mscorlib

Programmation robuste

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

Voir aussi

Vue d’ensemble de la distribution de logiciels