Cómo modificar las plataformas admitidas para un programa
La aplicación puede agregar plataformas admitidas a un paquete, en Configuration Manager, obteniendo instancias específicas de las SMS_Package
clases ySMS_Program
, a continuación, agregando una instancia de la SMS_OS_Details
clase a la SupportedOperatingSystems
propiedad .
Para modificar las plataformas admitidas para un programa
Configure una conexión con el proveedor de SMS.
Obtenga un objeto de paquete existente mediante la
SMS_Package
clase .Obtenga un objeto de programa existente mediante la
SMS_Program
clase .Cree y rellene una instancia de la
SMS_OS_Details
clase .Agregue la nueva
SMS_OS_Details
instancia a laSupportedOperatingSystems
propiedad del objeto de programa (del paso 3).
Ejemplo
El siguiente método de ejemplo muestra cómo agregar plataformas admitidas para un programa.
Nota:
Una ligera variación de este ejemplo podría cambiar los valores de propiedad de todos los programas asociados a un paquete específico. Para obtener un ejemplo, vea el ejemplo de código How to List All Programs and Their Maximum Run Time Value (Cómo enumerar todos los programas y su valor máximo de tiempo de ejecución ). Sin embargo, para obtener un método más eficaz para acceder a un programa específico, use y PackageID
ProgramName
, vea el ejemplo de código How to Modify Program Properties (Cómo modificar propiedades del programa ).
Para obtener información sobre cómo llamar al código de ejemplo, vea Llamar a fragmentos de código de 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;
}
}
El método de ejemplo tiene los parámetros siguientes:
Parámetro | Tipo | Descripción |
---|---|---|
connection |
-Administrado: WqlConnectionManager - VBScript: SWbemServices |
Una conexión válida al proveedor de SMS. |
existingPackageID |
-Administrado: String -Vbscript: String |
Identificador de paquete de un paquete existente. |
existingProgramName |
-Administrado: String -Vbscript: String |
Nombre del programa de un programa existente. |
newMaxVersion |
-Administrado: String -Vbscript: String |
La versión máxima admitida. |
newMinVersionsion |
-Administrado: String -Vbscript: String |
La versión mínima admitida. |
newName |
-Administrado: String -Vbscript: String |
Nombre del programa modificado. |
newPlatform |
-Administrado: String -Vbscript: String |
La nueva plataforma. |
Compilar el código
El ejemplo de C# requiere:
Espacios de nombres
System
System.Collections.Generic
Microsoft. ConfigurationManagement.ManagementProvider
Microsoft. ConfigurationManagement.ManagementProvider.WqlQueryEngine
Ensamblado
adminui.wqlqueryengine
microsoft.configurationmanagement.managementprovider
mscorlib
Programación sólida
Para obtener más información sobre el control de errores, consulte Acerca de los errores de Configuration Manager.