Ondersteunde platforms voor een programma wijzigen
Uw toepassing kan ondersteunde platforms toevoegen aan een pakket, in Configuration Manager, door specifieke exemplaren van de SMS_Package
klassen en SMS_Program
op te halen en vervolgens een exemplaar van de SMS_OS_Details
klasse toe te voegen aan de SupportedOperatingSystems
eigenschap.
De ondersteunde platforms voor een programma wijzigen
Een verbinding met de SMS-provider instellen.
Een bestaand pakketobject verkrijgen met behulp van de
SMS_Package
klasse.Een bestaand programmaobject verkrijgen met behulp van de
SMS_Program
klasse.Maak en vul een exemplaar van de
SMS_OS_Details
klasse in.Voeg het nieuwe
SMS_OS_Details
exemplaar toe aan deSupportedOperatingSystems
eigenschap van het programmaobject (uit stap 3).
Voorbeeld
In de volgende voorbeeldmethode ziet u hoe u ondersteunde platforms toevoegt voor een programma.
Opmerking
Een kleine variatie van dit voorbeeld kan eigenschapswaarden wijzigen voor alle programma's die zijn gekoppeld aan een specifiek pakket. Zie het codevoorbeeld Alle programma's en hun maximale uitvoeringswaarde weergeven voor een voorbeeld. Voor een efficiƫntere methode voor toegang tot een specifiek programma, met behulp van en PackageID
ProgramName
, raadpleegt u het codevoorbeeld Programma-eigenschappen wijzigen .
Zie Aanroepen Configuration Manager codefragmenten voor meer informatie over het aanroepen van de voorbeeldcode.
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;
}
}
De voorbeeldmethode heeft de volgende parameters:
Parameter | Type | Beschrijving |
---|---|---|
connection |
-Beheerd: WqlConnectionManager - VBScript: SWbemServices |
Een geldige verbinding met de SMS-provider. |
existingPackageID |
-Beheerd: String -Vbscript: String |
De pakket-id voor een bestaand pakket. |
existingProgramName |
-Beheerd: String -Vbscript: String |
De programmanaam voor een bestaand programma. |
newMaxVersion |
-Beheerd: String -Vbscript: String |
De maximaal ondersteunde versie. |
newMinVersionsion |
-Beheerd: String -Vbscript: String |
De minimaal ondersteunde versie. |
newName |
-Beheerd: String -Vbscript: String |
De gewijzigde programmanaam. |
newPlatform |
-Beheerd: String -Vbscript: String |
Het nieuwe platform. |
De code compileren
Voor het C#-voorbeeld is het volgende vereist:
Naamruimten
Systeem
System.Collections.Generic
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
Vergadering
adminui.wqlqueryengine
microsoft.configurationmanagement.managementprovider
mscorlib
Robuust programmeren
Zie Over Configuration Manager fouten voor meer informatie over foutafhandeling.