So ändern Sie die unterstützten Plattformen für ein Programm

Ihre Anwendung kann unterstützte Plattformen zu einem Paket im Configuration Manager hinzufügen, indem sie bestimmte Instanzen der SMS_PackageSMS_Program und-Klassen abruft und dann der Eigenschaft eine instance der SMS_OS_Details Klasse hinzufügtSupportedOperatingSystems.

So ändern Sie die unterstützten Plattformen für ein Programm

  1. Richten Sie eine Verbindung mit dem SMS-Anbieter ein.

  2. Rufen Sie mithilfe der SMS_Package Klasse ein vorhandenes Paketobjekt ab.

  3. Abrufen eines vorhandenen Programmobjekts mithilfe der SMS_Program Klasse.

  4. Erstellen und füllen Sie eine instance der SMS_OS_Details Klasse auf.

  5. Fügen Sie die neue SMS_OS_Details Instance zur SupportedOperatingSystems Eigenschaft des Programmobjekts hinzu (aus Schritt 3).

Beispiel

Die folgende Beispielmethode zeigt, wie Sie unterstützte Plattformen für ein Programm hinzufügen.

Hinweis

Eine leichte Variation dieses Beispiels kann Eigenschaftswerte für alle Programme ändern, die einem bestimmten Paket zugeordnet sind. Ein Beispiel finden Sie im Codebeispiel "Wie man alle Programme und ihre maximalen Laufzeitwerte auflistet ". Eine effizientere Methode für den Zugriff auf ein bestimmtes Programm finden Sie jedoch mithilfe der und PackageIDProgramNameim Codebeispiel Ändern der Programmeigenschaften .

Informationen zum Aufrufen des Beispielcodes finden Sie unter Aufrufen von Configuration Manager-Codeausschnitten.

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

Die Beispielmethode hat die folgenden Parameter:

Parameter Typ Beschreibung
connection - Verwaltet: WqlConnectionManager
- VBScript: SWbemDienste
Eine gültige Verbindung mit dem SMS-Anbieter.
existingPackageID - Verwaltet: String
- VBScript: String
Die Paket-ID für ein vorhandenes Paket.
existingProgramName - Verwaltet: String
- VBScript: String
Der Programmname für ein vorhandenes Programm.
newMaxVersion - Verwaltet: String
- VBScript: String
Die maximal unterstützte Version.
newMinVersionsion - Verwaltet: String
- VBScript: String
Die mindestens unterstützte Version.
newName - Verwaltet: String
- VBScript: String
Der geänderte Programmname.
newPlatform - Verwaltet: String
- VBScript: String
Die neue Plattform.

Kompilieren des Codes

Das C#-Beispiel erfordert:

Namespaces

System

System.Collections.Generic

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

adminui.wqlqueryengine

Microsoft.ConfigurationManagement.ManagementProvider

MSCorlib

Robuste Programmierung

Weitere Informationen zur Fehlerbehandlung finden Sie unter Informationen zu Configuration Manager-Fehlern.

Siehe auch

Übersicht über die Softwareverteilung