Como criar uma janela de manutenção para uma coleção

Seu aplicativo pode criar uma janela de manutenção do Configuration Manager usando SMS_CollectionSettings classe WMI do servidor e SMS_ServiceWindow classe WMI do servidor e propriedades.

Para criar uma janela de manutenção

  1. Configurar uma conexão com o Provedor de SMS. Para obter mais informações, consulte Fundamentos básicos do Provedor de SMS.

  2. Obter a instância de configurações de coleção existente usando a ID da coleção fornecida.

  3. Crie e preencha as propriedades de um novo objeto de janela de serviço usando a classe WMI SMS_ServiceWindow Server.

  4. Adicione o novo SMS_ServiceWindow objeto à instância de configurações de coleção obtida anteriormente.

  5. Salve a instância e as propriedades de configurações da coleção.

Observação

O exemplo a seguir inclui etapas adicionais, principalmente para lidar com a sobrecarga de lidar com os objetos de janela de manutenção, que são armazenados como objetos incorporados na instância de configurações da coleção.

Exemplo

O método de exemplo a seguir cria uma janela de manutenção para uma coleção, supondo que a instância da coleção possa ser modificada. Isso pode não ser o caso em sites filho, onde as coleções são de propriedade dos sites pai.

Para obter informações sobre como chamar o código de exemplo, consulte Calling Configuration Manager Code Snippets.


Sub CreateMaintenanceWindow(connection,                                 _  
                            targetCollectionID,                         _  
                            newMaintenanceWindowName,                   _  
                            newMaintenanceWindowDescription,            _  
                            newMaintenanceWindowServiceWindowSchedules, _  
                            newMaintenanceWindowIsEnabled,              _  
                            newMaintenanceWindowServiceWindowType)  

    ' Build a query to get the specified collection.   
     collectionSettingsQuery = "SMS_CollectionSettings.CollectionID='" & targetCollectionID & "'"  

    ' Get the collection settings instance for the targetCollectionID.  
    Set allCollectionSettings = connection.ExecQuery("Select * From SMS_CollectionSettings Where CollectionID = '" & targetCollectionID & "'")  

    ' If a collection settings instance does not exist for the target collection, create one.  
    If allCollectionSettings.Count = 0 Then  
        Wscript.Echo "Creating collection settings instance."  
        Set collectionSettingsInstance = connection.Get("SMS_CollectionSettings").SpawnInstance_  
        collectionSettingsInstance.CollectionID = targetCollectionID  
        collectionSettingsInstance.Put_  
    End If    

    ' Get the specific collection settings instance.  
    Set collectionSettingsInstance = connection.Get("SMS_CollectionSettings.CollectionID='" & targetCollectionID &"'" )  

    ' Create and populate a temporary SMS_ServiceWindow object with the new maintenance window values.   
    Set tempServiceWindowObject = connection.Get("SMS_ServiceWindow").SpawnInstance_  

    ' Populate temporary SMS_ServiceWindow object with the new maintenance window values.  
    tempServiceWindowObject.Name = newMaintenanceWindowName  
    tempServiceWindowObject.Description = newMaintenanceWindowDescription  
    tempServiceWindowObject.ServiceWindowSchedules = newMaintenanceWindowServiceWindowSchedules  
    tempServiceWindowObject.IsEnabled = newMaintenanceWindowIsEnabled  
    tempServiceWindowObject.ServiceWindowType = newMaintenanceWindowServiceWindowType  

    ' Populate the local array list with the existing service window objects (from the target collection).  
    tempServiceWindowArray = collectionSettingsInstance.ServiceWindows  

    ' Add the newly created service window object to the temporary array.  
    ReDim Preserve tempServiceWindowArray (Ubound(tempServiceWindowArray) + 1)  
    Set tempServiceWindowArray(Ubound(tempServiceWindowArray)) = tempServiceWindowObject  

    ' Replace the existing service window objects from the target collection with the temporary array that includes the new service window.  
    collectionSettingsInstance.ServiceWindows = tempServiceWindowArray  

    ' Save the collection settings instance with the new service window object.  
    collectionSettingsInstance.Put_  

    ' Output success message.  
    wscript.echo "New Maintenance Window created."  

End Sub  


public void CreateMaintenanceWindow(WqlConnectionManager connection,   
                                    string targetCollectionID,   
                                    string newMaintenanceWindowName,   
                                    string newMaintenanceWindowDescription,   
                                    string newMaintenanceWindowServiceWindowSchedules,   
                                    bool newMaintenanceWindowIsEnabled,   
                                    int newMaintenanceWindowServiceWindowType)  
{  
    try  
    {  
        // Create an object to hold the collection settings instance (used to check whether a collection settings instance exists).   
        IResultObject collectionSettingsInstance = null;  

        // Get the collection settings instance for the targetCollectionID.  
        IResultObject allCollectionSettings = connection.QueryProcessor.ExecuteQuery("Select * from SMS_CollectionSettings where CollectionID='" + targetCollectionID + "'");  

        // Enumerate the allCollectionSettings collection (there should be just one item) and save the instance.  
        foreach (IResultObject collectionSetting in allCollectionSettings)  
        {  
            collectionSettingsInstance = collectionSetting;  
        }  

        // If a collection settings instance does not exist for the target collection, create one.  
        if (collectionSettingsInstance == null)  
        {  
            collectionSettingsInstance = connection.CreateInstance("SMS_CollectionSettings");  
            collectionSettingsInstance["CollectionID"].StringValue = targetCollectionID;  
            collectionSettingsInstance.Put();  
            collectionSettingsInstance.Get();  
        }  

        // Create a new array list to hold the service window object.  
        List<IResultObject> tempServiceWindowArray = new List<IResultObject>();  

        // Create and populate a temporary SMS_ServiceWindow object with the new maintenance window values.  
        IResultObject tempServiceWindowObject = connection.CreateEmbeddedObjectInstance("SMS_ServiceWindow");  

        // Populate temporary SMS_ServiceWindow object with the new maintenance window values.  
        tempServiceWindowObject["Name"].StringValue = newMaintenanceWindowName;  
        tempServiceWindowObject["Description"].StringValue = newMaintenanceWindowDescription;  
        tempServiceWindowObject["ServiceWindowSchedules"].StringValue = newMaintenanceWindowServiceWindowSchedules;  
        tempServiceWindowObject["IsEnabled"].BooleanValue = newMaintenanceWindowIsEnabled;  
        tempServiceWindowObject["ServiceWindowType"].IntegerValue = newMaintenanceWindowServiceWindowType;  

        // Populate the local array list with the existing service window objects (from the target collection).  
        tempServiceWindowArray = collectionSettingsInstance.GetArrayItems("ServiceWindows");  

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

        // Replace the existing service window objects from the target collection with the temporary array that includes the new service window.  
        collectionSettingsInstance.SetArrayItems("ServiceWindows", tempServiceWindowArray);  

        // Save the new values in the collection settings instance associated with the target collection.  
        collectionSettingsInstance.Put();  
    }  
    catch (SmsException ex)  
    {  
        Console.WriteLine("Failed. Error: " + ex.InnerException.Message);  
        throw;  
    }  
}  

O método example tem os seguintes parâmetros:

Parâmetro Tipo Descrição
connection

swebemServices
- Gerenciado: WqlConnectionManager
- VBScript: SWbemServices
Uma conexão válida com o Provedor de SMS.
targetCollectionID - Gerenciado: String
- VBScript: String
A ID da coleção.
newMaintenanceWindowName - Gerenciado: String
- VBScript: String
O nome da nova janela de manutenção.
newMaintenanceWindowDescription - Gerenciado: String
- VBScript: String
A descrição da nova janela de manutenção.
newMaintenanceWindowServiceWindowSchedules - Gerenciado: String
- VBScript: String
Os agendamentos de serviço para a nova janela de manutenção.
newMaintenanceWindowIsEnabled - Gerenciado: Boolean
- VBScript: Boolean
true se a nova janela de manutenção estiver habilitada.
newMaintenanceWindowServiceWindowType - Gerenciado: Integer
- VBScript: Integer
Digite para a nova janela de manutenção.

Compilando o código

O C# exemplo exige:

Namespaces

System

System.Collections.Generic

System.ComponentModel

Microsoft.ConfigurationManagement.ManagementProvider

Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

adminui.wqlqueryengine

microsoft.configurationmanagement.managementprovider

Programação robusta

Para obter mais informações sobre o tratamento de erros, consulte About Configuration Manager Errors.

Segurança do .NET Framework

Para obter mais informações sobre como proteger aplicativos do Configuration Manager, consulte Configuration Manager role-based administration.

Confira também

Sobre a manutenção do Windows Visão geral de distribuição de software Sobre implantações Visão geral dos objetos Como Conexão para um Provedor do Gerenciador de Configurações usando Código Gerenciado
Como Conexão um provedor do Configuration Manager usando o WMI
SMS_CollectionSettings Server WMI Class
SMS_ServiceWindow Server WMI Class
Sobre agendas Como criar um token de agendamento