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


Параметры модели процесса для объекта processModel пула приложений <>

Общие сведения

С помощью <processModel> элемента можно настроить многие функции безопасности, производительности, работоспособности и надежности пулов приложений в IIS 7 и более поздних версий. В их числе можно назвать следующие.

  • Удостоверение пула приложений— имя службы или учетной записи пользователя, под которой выполняется рабочий процесс пула приложений. Это определяется атрибутом identityType . По умолчанию, начиная с IIS 7.5, пул приложений запускается под встроенной учетной записью ApplicationPoolIdentity , которая динамически создается службой активации процессов Windows (WAS). (В IIS 7.0 удостоверением по умолчанию была учетная запись NetworkService .) Вы можете изменить значение атрибута identityType на встроенную учетную запись NetworkService , учетную запись LocalService , встроенную учетную запись LocalSystem или пользовательскую учетную запись, которую вы создаете. Если вы выбираете пользовательскую учетную запись, определите учетные данные учетной записи, используя атрибуты userName и password . Однако имейте в виду, что учетные записи NetworkService, LocalService и LocalSystem имеют больше прав пользователя, чем учетная запись ApplicationPoolIdentity . (Предупреждение. Запуск пула приложений с использованием высокоуровневых прав пользователя представляет серьезную угрозу безопасности.) Кроме того, можно использовать атрибут logonType , чтобы указать, следует ли удостоверению процесса входить в систему как пакетный пользователь или служба. (Дополнительные сведения о типах входа см. в статье Функция LogonUser .)
  • Веб-садоводство и использование оборудования NUMA, которое можно настроить, задав атрибут maxProcesses . Сведения о веб-садоводствах см. в разделе maxProcesses со значением больше единицы. Для использования оборудования NUMA присвойте параметру maxProcesses значение "0", чтобы указать, что СЛУЖБЫ IIS выполняют такое же количество рабочих процессов, что и узлы NUMA.
  • Параметры времени ожидания простоя, которые позволяют указать, как долго рабочий процесс остается в состоянии простоя до завершения работы. Измените атрибут idleTimeout , чтобы настроить этот параметр.
  • Мониторинг работоспособности путем включения проверки пингов по рабочему процессу, максимального времени, разрешенного рабочему процессу для реагирования на проверку проверки подлинности, и частоты ping-запросов, отправляемых рабочему процессу для отслеживания его работоспособности. Измените атрибуты pingingEnabled, pingInterval и pingResponseTime , чтобы настроить эти параметры.
  • Ограничения времени завершения рабочего процесса и запуска. Первое ограничение устанавливается атрибутом shutdownTimeLimit и определяет интервал, который IIS 7 и более поздних версий предоставляет рабочему процессу, чтобы завершить все запросы до того, как служба WWW завершит рабочий процесс. Второе ограничение задается атрибутом startupTimeLimit и указывает время, в течение которого IIS 7 и более поздних версий позволяет запускать пул приложений.

Совместимость

Версия Примечания
IIS 10.0 Элемент <processModel> не был изменен в IIS 10.0.
IIS 8,5 Добавлен idleTimeoutAction атрибут , позволяющий завершить или приостановить рабочий процесс, который находится в состоянии простоя на протяжении idleTimeout всего атрибута, а не просто завершить работу.
IIS 8,0 Добавлен setProfileEnvironment атрибут , позволяющий задать среду на основе профиля пользователя для нового процесса. Для атрибута maxProcesses добавлены значения, включая поддержку неоднородного доступа к памяти (NUMA). Добавлен logEventOnProcessModel атрибут , чтобы указать, что действие, выполняемое в процессе, регистрируется в журнале.
IIS 7,5 Элемент <processModel><add> элемента был обновлен в IIS 7.5, чтобы включить параметры, позволяющие запускать приложения с помощью нового ApplicationPoolIdentity , и указать тип входа для удостоверения процесса.
IIS 7.0 Элемент <processModel> появился в IIS 7.0.
IIS 6,0 Элемент <processModel> заменяет некоторые параметры в объекте метабазы IIS 6.0 IIsApplicationPools .

Установка

Коллекция <applicationPools> включена в установку iis 7 и более поздних версий по умолчанию.

Инструкции

Изменение параметров конфигурации модели процессов

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 или Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
    • Если вы используете Windows 8 или Windows 8.1:

      • Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
      • Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
    • Если вы используете Windows Server 2008 или Windows Server 2008 R2:

      • На панели задач нажмите кнопку Пуск, наведите указатель на пункт Администрирование, а затем выберите Пункт Диспетчер служб IIS.
    • Если вы используете Windows Vista или Windows 7:

      • На панели задач нажмите кнопку Пуск, а затем панель управления.
      • Дважды щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
  2. В области Подключения разверните имя сервера, щелкните Пулы приложений и выберите пул приложений, который требуется изменить. Снимок экрана: окно диспетчера I IS со страницей пулов приложений.

  3. В области Действия щелкните Дополнительные параметры...

  4. В диалоговом окне Дополнительные параметры щелкните свойство модели процесса, которое требуется изменить, а затем измените его в разделе значения свойства диалогового окна, а затем нажмите кнопку ОК. Например, измените ограничения времени завершения работы (в секундах) и Ограничения времени запуска (в секундах) на 30.
    Снимок экрана: диалоговое окно

Настройка СЛУЖБ IIS для использования с оборудованием NUMA

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 или более поздней версии:

      • На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
    • Если вы используете Windows 8 или более поздней версии:

      • Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
      • Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
  2. В области Подключения разверните имя сервера и щелкните Пулы приложений.

  3. В области Пулы приложений выберите пул, который вы хотите настроить для NUMA.

  4. В области Действия выберите Дополнительные параметры.

  5. В области Модель процесса задайте для параметра Максимальное число рабочих процессов значение 0.

    Снимок экрана: панель

Настройка действия времени ожидания простоя

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
    • Если вы используете Windows 8.1:

      • Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
      • Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
  2. В области Подключения дважды щелкните имя сервера, дважды щелкните Пулы приложений, а затем выберите пул приложений для настройки.

  3. В области Действия щелкните Дополнительные параметры.

  4. В разделе Модель процесса диалогового окна Дополнительные параметры для параметра idleTimeoutAction выберите Завершить или Приостановить.

  5. Нажмите кнопку ОК.

    Снимок экрана: диалоговое окно

Конфигурация

Элемент настраивается <processModel> на уровне сервера в файле ApplicationHost.config.

Атрибуты

Атрибут Описание
identityType Необязательный атрибут перечисления.

Указывает удостоверение учетной записи, под которой выполняется пул приложений.

Примечание: Начиная с IIS 7.5 значением по умолчанию является ApplicationPoolIdentity. (В IIS 7.0 значением по умолчанию было NetworkService.)

Атрибут identityType может быть одним из следующих возможных значений. Значение по умолчанию — NetworkService.

Значение Описание
ApplicationPoolIdentity Указывает, что пул приложений выполняется под динамически созданной учетной записью удостоверения пула приложений. Начиная с IIS 7.5— это удостоверение по умолчанию, ApplicationPoolIdentity с которым нужно запускать пулы приложений. (В IIS 7.0 удостоверением по умолчанию было NetworkService.)

Когда пул приложений работает под учетной записью ApplicationPoolIdentity , пул приложений обращается к ресурсам как "IIS AppPool< AppPool>" удостоверение. Например, для DefaultAppPool используется удостоверение IIS AppPool\DefaultAppPool. Это удостоверение позволяет администраторам указывать разрешения, относящиеся только к удостоверению, под которым работает пул приложений, тем самым повышая безопасность сервера.

Числовое значение равно 4.
LocalService Указывает, что пул приложений выполняется под встроенной учетной записью LocalService , которая имеет те же права пользователя, что и NetworkService.

Когда пул приложений работает под учетной записью LocalService , пул приложений предоставляет анонимные учетные данные в сети.

Примечание: Запуск пула приложений под учетной записью с правами пользователя высокого уровня представляет серьезную угрозу безопасности.

Числовое значение равно 1.
LocalSystem Указывает, что пул приложений выполняется под встроенной учетной записью LocalSystem , которая имеет обширные привилегии на локальном компьютере и выступает в качестве компьютера в сети.

Примечание: Запуск пула приложений под учетной записью с правами пользователя высокого уровня представляет серьезную угрозу безопасности.

Числовое значение равно 0.
NetworkService Указывает, что пул приложений выполняется под встроенной учетной записью NetworkService . В IIS 7.0 это удостоверение по умолчанию для запуска пулов приложений; В IIS 7.5 значение по умолчанию было изменено на ApplicationPoolIdentity.

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

Числовое значение равно 2.
SpecificUser Указывает, что пул приложений выполняется под пользовательским удостоверением, которое настраивается с помощью атрибутов userName и password .

Примечание: Чтобы избежать сохранения незашифрованных строк паролей в файлах конфигурации, всегда используйте AppCmd.exe или диспетчер IIS для ввода паролей. При использовании этих средств управления строки паролей будут зашифрованы автоматически перед записью в XML-файлы конфигурации. Это обеспечивает лучшую защиту паролей, чем хранение незашифрованных паролей.

Примечание: Управляемые учетные записи служб можно использовать для предоставления службам и задачам общего доступа к собственным учетным записям домена, а также для включения автоматического управления паролями, устраняя необходимость администратора вручную администрировать пароли. Дополнительные сведения см. в статье Новые возможности управляемых учетных записей служб.

Числовое значение равно 3.
idleTimeout Необязательный атрибут timeSpan.

Указывает, как долго (в минутах) рабочий процесс должен выполняться в режиме простоя, если новые запросы не получены и рабочий процесс не обрабатывает запросы. По истечении выделенного времени рабочий процесс должен запросить его завершение службой WWW.

Значение по умолчанию — 00:20:00.

Чтобы отключить функцию тайм-аута простоя, присвойте этому значению значение 00:00:00.
idleTimeoutAction Необязательный атрибут перечисления.

Указывает действие, которое необходимо выполнить при достижении времени ожидания простоя. До iis 8.5 рабочий процесс, который был бездействующим в течение атрибута idleTimeout , будет завершен. После iis 8.5 вы можете завершать рабочий процесс, который достигает idleTimeout предела, или приостановить его, переместив его из памяти на диск. Приостановка процесса, скорее всего, займет меньше времени и потребляет меньше памяти, чем его прекращение.

Вы можете настроить действие приостановки бездействия с помощью фиктивного запроса инициализации приложения (см. раздел applicationInitialization.

Атрибут idleTimeoutAction может иметь следующие возможные значения. Значение по умолчанию — Terminate.
Значение Описание
Terminate Завершает неактивный рабочий процесс. Для этого требуется более длительный период запуска, когда пользователь впоследствии обращается к сайту и запускается рабочий процесс.

Числовое значение равно 0.
Suspend Приостанавливает неактивный рабочий процесс. Это оставляет рабочий процесс активным, но перемещается из памяти на диск, сокращая потребление системных ресурсов. При последующем запросе диспетчер памяти загружает файлы страниц, необходимые для запроса, с диска в память, что, скорее всего, делает рабочий процесс доступным быстрее, чем если бы он был ранее завершен.

Числовое значение равно 1.
loadUserProfile Дополнительный логический атрибут.

Указывает, загружает ли СЛУЖБА IIS профиль пользователя для удостоверения пула приложений. Установка этого значения false приводит к тому, что службы IIS отменить изменения на поведение IIS 6.0. IIS 6.0 не загружает профиль пользователя для удостоверения пула приложений.

Значение по умолчанию — false.
logEventOnProcessModel Необязательный атрибут flags.

Указывает, какое действие, выполненное в процессе, регистрируется в Просмотр событий. В IIS 8.0 применяется только действие времени ожидания простоя, в котором процесс завершается, так как он был бездействующим для периода idleTimeout.

Имя флага IdleTimeoutравно . Значение — 1.

Значение по умолчанию — IdleTimeout.
logonType Необязательный атрибут перечисления.

Указывает тип входа для удостоверения процесса. (Дополнительные сведения о типах входа см. в статье Функция LogonUser .)

Примечание: Этот атрибут появился в IIS 7.5.

Атрибут logonType может иметь одно из следующих возможных значений; значение по умолчанию — LogonBatch.
Значение Описание
LogonBatch Указывает, что удостоверение пула приложений должно выполнять вход в качестве пользователя пакетной службы.

Числовое значение равно 0.
LogonService Указывает, что удостоверение пула приложений должно выполнять вход в качестве службы.

Числовое значение равно 1.
manualGroupMembership Дополнительный логический атрибут.

Указывает, добавляется ли идентификатор безопасности (SID) группы IIS_IUSRS в маркер рабочего процесса. Если задано значение false, службы IIS автоматически используют удостоверение пула приложений, как если бы оно было членом встроенной группы IIS_IUSRS, которая имеет доступ к необходимым файловым и системным ресурсам. При значении true удостоверение пула приложений должно быть явно добавлено ко всем ресурсам, которые требуются рабочему процессу во время выполнения.

Значение по умолчанию — false.
maxProcesses Необязательный атрибут uint.

Указывает максимальное количество рабочих процессов, которые будут использоваться для пула приложений.
  • Значение "1" указывает максимум на один рабочий процесс для пула приложений. Это будет параметр на сервере без узлов NUMA.
  • Значение "2" или более указывает на веб-сад, который использует несколько рабочих процессов для пула приложений (при необходимости).
  • Значение "0" указывает, что СЛУЖБЫ IIS выполняют то же количество рабочих процессов, что и узлы NUMA. IIS определяет количество узлов NUMA, доступных на оборудовании, и запускает такое же количество рабочих процессов. Например, если у вас есть четыре узла NUMA, он будет использовать не более четырех рабочих процессов для этого пула приложений. В этом примере присвоение maxProcesses значения "0" или "4" будет иметь тот же результат.
Значение по умолчанию — 1.
password Необязательный строковый атрибут.

Указывает пароль, связанный с атрибутом userName . Этот атрибут необходим, только если параметр identityType имеет значение SpecificUser.

Примечание: Чтобы избежать сохранения незашифрованных строк паролей в файлах конфигурации, всегда используйте AppCmd.exe или диспетчер IIS для ввода паролей. При использовании этих средств управления строки паролей будут зашифрованы автоматически перед записью в XML-файлы конфигурации. Это обеспечивает лучшую защиту паролей, чем хранение незашифрованных паролей.
pingingEnabled Дополнительный логический атрибут.

Указывает, включена ли проверка проверки связь для рабочего процесса.

Значение по умолчанию — true.
pingInterval Необязательный атрибут timeSpan.

Указывает время между проверками связи мониторинга работоспособности, которые служба WWW отправляет рабочему процессу.

Значение по умолчанию — 00:00:30 (30 секунд).
pingResponseTime Необязательный атрибут timeSpan.

Указывает время, когда рабочий процесс получает ответ на проверку проверки работоспособности. После превышения предельного времени служба WWW завершает рабочий процесс.

Значение по умолчанию — 00:01:30 (1 минута 30 секунд).
requestQueueDelegatorIdentity Необязательный атрибут String.

Указывает удостоверение учетной записи, которое имеет разрешение на делегирование HTTP-запросов в пул приложений.

Примечание. Этот атрибут недоступен в пользовательском интерфейсе диспетчера служб IIS.
setProfileEnvironment Дополнительный логический атрибут.

Если setProfileEnvironment имеет значение True, WAS создает блок среды для передачи в CreateProcessAsUser при создании рабочего процесса. Это гарантирует, что среда будет настроена на основе профиля пользователя для нового процесса.

Значение по умолчанию — True.
shutdownTimeLimit Необязательный атрибут timeSpan.

Указывает время ожидания службы W3SVC после инициации перезапуска. Если рабочий процесс не завершает работу в пределах shutdownTimeLimit, он будет завершен службой W3SVC.

Значение по умолчанию — 00:01:30 (1 минута 30 секунд).
startupTimeLimit Необязательный атрибут timeSpan.

Указывает время ожидания iis для запуска пула приложений. Если пул приложений не запускается в startupTimeLimit, рабочий процесс завершается и увеличивается число защиты от быстрого сбоя.

Значение по умолчанию — 00:01:30 (1 минута 30 секунд).
userName Необязательный строковый атрибут.

Указывает удостоверение, под которым выполняется пул приложений, если identityType имеет значение SpecificUser.

Дочерние элементы

Отсутствует.

Образец конфигурации

В следующем примере конфигурации используется элемент пула <add> приложений для создания нового пула приложений с именем Contoso. Элемент <recycling> настраивает ведение журнала для перезапусков пула приложений, <periodicRestart> элемент настраивает при перезапуске пула приложений, а <processModel> элемент настраивает атрибуты shutdownTimeLimit и startupTimeLimit для завершения и запуска рабочих процессов в пуле приложений в течение 30 секунд каждый. При превышении этих временных ограничений службы IIS завершают рабочий процесс.

<add name="Contoso">
   <recycling logEventOnRecycle="Schedule">
      <periodicRestart>
         <schedule>
            <clear />
            <add value="03:00:00" />
         </schedule>
      </periodicRestart>
   </recycling>
   <processModel identityType="NetworkService" shutdownTimeLimit="00:00:30" startupTimeLimit="00:00:30" />
</add>

Пример кода

В следующих примерах значения свойств processModel.shutdownTimeLimit и processModule.startupTimeLimit изменяются на 30 секунд для пула приложений с именем Contoso.

AppCmd.exe

appcmd.exe set apppool "Contoso" /processModel.shutdownTimeLimit:00:00:30

appcmd.exe set apppool "Contoso" /processModel.startupTimeLimit:00:00:30

Можно также использовать следующий синтаксис:

appcmd.exe set config -section:system.applicationHost/applicationPools /[name='Contoso'].processModel.shutdownTimeLimit:"00:00:30" /commit:apphost

appcmd.exe set config -section:system.applicationHost/applicationPools /[name='Contoso'].processModel.startupTimeLimit:"00:00:30" /commit:apphost

Примечание

При использовании AppCmd.exe для настройки этих параметров для параметра apphostфиксации необходимо задать значение . Это зафиксирует параметры конфигурации в соответствующем разделе расположения в файле ApplicationHost.config.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection applicationPoolsSection = config.GetSection("system.applicationHost/applicationPools");
         ConfigurationElementCollection applicationPoolsCollection = applicationPoolsSection.GetCollection();

         ConfigurationElement addElement = FindElement(applicationPoolsCollection, "add", "name", @"Contoso");
         if (addElement == null) throw new InvalidOperationException("Element not found!");

         ConfigurationElement processModelElement = addElement.GetChildElement("processModel");
         processModelElement["shutdownTimeLimit"] = TimeSpan.Parse("00:00:30");
         processModelElement["startupTimeLimit"] = TimeSpan.Parse("00:00:30");

         serverManager.CommitChanges();
      }
   }

   private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
   {
      foreach (ConfigurationElement element in collection)
      {
         if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
         {
            bool matches = true;
            for (int i = 0; i < keyValues.Length; i += 2)
            {
               object o = element.GetAttributeValue(keyValues[i]);
               string value = null;
               if (o != null)
               {
                  value = o.ToString();
               }
               if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
               {
                  matches = false;
                  break;
               }
            }
            if (matches)
            {
               return element;
            }
         }
      }
      return null;
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim applicationPoolsSection As ConfigurationSection = config.GetSection("system.applicationHost/applicationPools")
      Dim applicationPoolsCollection As ConfigurationElementCollection = applicationPoolsSection.GetCollection
      Dim addElement As ConfigurationElement = FindElement(applicationPoolsCollection, "add", "name", "Contoso")

      If (addElement Is Nothing) Then
         Throw New InvalidOperationException("Element not found!")
      End If

      Dim processModelElement As ConfigurationElement = addElement.GetChildElement("processModel")
      processModelElement("shutdownTimeLimit") = TimeSpan.Parse("00:00:30")
      processModelElement("startupTimeLimit") = TimeSpan.Parse("00:00:30")
      serverManager.CommitChanges()
   End Sub

   Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
      For Each element As ConfigurationElement In collection
         If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
            Dim matches As Boolean = True
            Dim i As Integer
            For i = 0 To keyValues.Length - 1 Step 2
               Dim o As Object = element.GetAttributeValue(keyValues(i))
               Dim value As String = Nothing
               If (Not (o) Is Nothing) Then
                  value = o.ToString
               End If
               If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
                  matches = False
                  Exit For
               End If
            Next
            If matches Then
               Return element
            End If
         End If
      Next
      Return Nothing
   End Function


End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools", "MACHINE/WEBROOT/APPHOST");
var applicationPoolsCollection = applicationPoolsSection.Collection;

var addElementPos = FindElement(applicationPoolsCollection, "add", ["name", "Contoso"]);
if (addElementPos == -1) throw "Element not found!";

var addElement = applicationPoolsCollection.Item(addElementPos);
var processModelElement = addElement.ChildElements.Item("processModel");
processModelElement.Properties.Item("shutdownTimeLimit").Value = "00:00:30";
processModelElement.Properties.Item("startupTimeLimit").Value = "00:00:30";

adminManager.CommitChanges();

function FindElement(collection, elementTagName, valuesToMatch) {
   for (var i = 0; i < collection.Count; i++) {
      var element = collection.Item(i);
      if (element.Name == elementTagName) {
         var matches = true;
         for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
            var property = element.GetPropertyByName(valuesToMatch[iVal]);
            var value = property.Value;
            if (value != null) {
               value = value.toString();
            }
            if (value != valuesToMatch[iVal + 1]) {
               matches = false;
               break;
            }
         }
         if (matches) {
            return i;
         }
      }
   }
   return -1;
}

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools", "MACHINE/WEBROOT/APPHOST")
Set applicationPoolsCollection = applicationPoolsSection.Collection

addElementPos = FindElement(applicationPoolsCollection, "add", Array("name", "Contoso"))
If siteElementPos = -1 Then
   WScript.Echo "Element not found!"
   WScript.Quit
End If

Set addElement = applicationPoolsCollection.Item(addElementPos)
Set processModelElement = addElement.ChildElements.Item("processModel")
processModelElement.Properties.Item("shutdownTimeLimit").Value = "00:00:30"
processModelElement.Properties.Item("startupTimeLimit").Value = "00:00:30"

adminManager.CommitChanges()

Function FindElement(collection, elementTagName, valuesToMatch)
   For i = 0 To CInt(collection.Count) - 1
      Set element = collection.Item(i)
      If element.Name = elementTagName Then
         matches = True
         For iVal = 0 To UBound(valuesToMatch) Step 2
            Set property = element.GetPropertyByName(valuesToMatch(iVal))
            value = property.Value
            If Not IsNull(value) Then
               value = CStr(value)
            End If
            If Not value = CStr(valuesToMatch(iVal + 1)) Then
               matches = False
               Exit For
            End If
         Next
         If matches Then
            Exit For
         End If
      End If
   Next
   If matches Then
      FindElement = i
   Else
      FindElement = -1
   End If
End Function