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

Seu aplicativo pode criar uma janela de manutenção Configuration Manager usando as classes e propriedades da Classe WMI do Servidor SMS_CollectionSettings e SMS_ServiceWindow Classe WMI do Servidor.

Para criar uma janela de manutenção

  1. Configure uma conexão com o Provedor de SMS. Para obter mais informações, confira Os fundamentos do Provedor de SMS.

  2. Obtenha 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 SMS_ServiceWindow Classe WMI do Servidor .

  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 das configurações de coleção.

Observação

O exemplo a seguir inclui etapas adicionais, principalmente para lidar com a sobrecarga de lidar com os objetos da janela de manutenção, que são armazenados como objetos inseridos na instância de configurações de 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 de coleção possa ser modificada. Isso pode não ser o caso em sites filho, em que as coleções pertencem aos sites pai.

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


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 de exemplo 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
O serviço agenda 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 exemplo C# requer:

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 Sobre erros de Configuration Manager.

Segurança do .NET Framework

Para obter mais informações sobre como proteger aplicativos Configuration Manager, consulte Configuration Manager administração baseada em função.

Confira também

Sobre a visão geral dadistribuição de softwaredo Windows sobre implantações Visão geral de objetoscomo se conectar a um provedor de Configuration Manager usando código gerenciado
Como se conectar a um provedor de Configuration Manager usando o WMI
Classe WMI do servidor SMS_CollectionSettings
Classe WMI do servidor SMS_ServiceWindow
Sobre agendamentosComo criar um token de agendamento