Поделиться через


Создание периода обслуживания для коллекции

Приложение может создать период обслуживания Configuration Manager с помощью классов и свойств класса WMI сервера SMS_CollectionSettings и класса WMI сервера SMS_ServiceWindow.

Создание периода обслуживания

  1. Настройте подключение к поставщику SMS. Дополнительные сведения см. в статье Основы поставщика SMS.

  2. Получение существующего экземпляра параметров коллекции с помощью предоставленного идентификатора коллекции.

  3. Создайте и заполните свойства нового объекта окна службы с помощью класса WMI сервера SMS_ServiceWindow .

  4. Добавьте новый SMS_ServiceWindow объект в экземпляр параметров коллекции, полученный ранее.

  5. Сохраните экземпляр и свойства параметров коллекции.

Примечание.

В приведенном ниже примере приведены дополнительные шаги, в основном для обработки затрат на работу с объектами периода обслуживания, которые хранятся в экземпляре параметров коллекции как внедренные объекты.

Пример

В следующем примере метода создается период обслуживания для коллекции, при условии, что экземпляр коллекции может быть изменен. Это может быть не так на дочерних сайтах, где коллекции принадлежат родительским сайтам.

Сведения о вызове примера кода см. в разделе Вызов фрагментов кода Configuration Manager.


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

Метод примера имеет следующие параметры:

Параметр Тип Описание
connection

swebemServices
-Управляемых: WqlConnectionManager
— VBScript: SWbemServices
Допустимое подключение к поставщику SMS.
targetCollectionID -Управляемых: String
-Vbscript: String
Идентификатор коллекции.
newMaintenanceWindowName -Управляемых: String
-Vbscript: String
Имя нового периода обслуживания.
newMaintenanceWindowDescription -Управляемых: String
-Vbscript: String
Описание нового периода обслуживания.
newMaintenanceWindowServiceWindowSchedules -Управляемых: String
-Vbscript: String
Расписание службы для нового периода обслуживания.
newMaintenanceWindowIsEnabled -Управляемых: Boolean
-Vbscript: Boolean
true Значение , если новый период обслуживания включен.
newMaintenanceWindowServiceWindowType -Управляемых: Integer
-Vbscript: Integer
Введите новый период обслуживания.

Компиляция программы

Для примера C# требуется следующее:

Пространства имен

System;

System.Collections.Generic;

System.ComponentModel

Майкрософт. ConfigurationManagement.ManagementProvider

Майкрософт. ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

adminui.wqlqueryengine

microsoft.configurationmanagement.managementprovider

Надежное программирование

Дополнительные сведения об обработке ошибок см. в разделе Сведения об ошибках Configuration Manager.

Безопасность .NET Framework

Дополнительные сведения о защите приложений Configuration Manager см. в статье Configuration Manager администрирование на основе ролей.

См. также

Сведения о периоде обслуживания в windowsОбзор распространения программного обеспеченияОбщие сведения об объектах развертыванияКак подключиться к поставщику Configuration Manager с помощью управляемого кода
Подключение к поставщику Configuration Manager с помощью WMI
Класс WMI сервера SMS_CollectionSettings
Класс WMI сервера SMS_ServiceWindow
Сведения о расписанияхСоздание маркера расписания