Bagikan melalui


Memproses Pengaturan Model untuk ProcessModel Kumpulan <Aplikasi>

Gambaran Umum

Dengan menggunakan elemen , <processModel> Anda dapat mengonfigurasi banyak fitur keamanan, performa, kesehatan, dan keandalan kumpulan aplikasi pada IIS 7 dan yang lebih baru. Ini mencakup fitur-fitur berikut:

  • Identitas kumpulan aplikasi, yang merupakan nama layanan atau akun pengguna tempat proses pekerja kumpulan aplikasi berjalan. Ini didefinisikan oleh atribut identityType . Secara default, mulai dari IIS 7.5 kumpulan aplikasi berjalan di bawah akun ApplicationPoolIdentity bawaan , yang dibuat secara dinamis oleh Windows Process Activation Service (WAS). (Di IIS 7.0 identitas default adalah akun NetworkService .) Anda dapat mengubah nilai atribut identityType ke akun NetworkService bawaan, akun LocalService , akun LocalSystem bawaan, atau akun kustom yang Anda buat. Jika Anda memilih akun kustom, tentukan kredensial akun menggunakan atribut userName dan password . Namun, ketahuilah bahwa akun NetworkService, LocalService , dan LocalSystem memiliki lebih banyak hak pengguna daripada akun ApplicationPoolIdentity . (Peringatan: Ini adalah risiko keamanan serius untuk menjalankan kumpulan aplikasi menggunakan hak pengguna tingkat tinggi.) Selain itu, Anda dapat menggunakan atribut logonType untuk menentukan apakah identitas proses harus masuk sebagai pengguna atau layanan batch. (Untuk informasi tambahan tentang jenis masuk, lihat artikel Fungsi LogonUser .)
  • Berkebun web dan penggunaan perangkat keras Akses Memori Non-Seragam (NUMA), yang dapat Anda konfigurasi dengan mengatur atribut maxProcesses . Untuk berkebun Web, lihat maxProcesses ke nilai yang lebih besar dari satu. Untuk penggunaan perangkat keras NUMA, atur maxProcesses ke nilai "0" untuk menentukan bahwa IIS menjalankan jumlah proses pekerja yang sama karena ada simpul NUMA.
  • Pengaturan batas waktu diam, yang memungkinkan Anda mengatur berapa lama proses pekerja tetap menganggur sebelum dimatikan. Edit atribut idleTimeout untuk mengonfigurasi pengaturan ini.
  • Pemantauan kesehatan dengan mengaktifkan ping terhadap proses pekerja, waktu maksimum yang diizinkan bagi proses pekerja untuk merespons ping, dan frekuensi ping yang dikirim ke proses pekerja untuk memantau kesehatannya. Edit atribut pingEnabled, pingInterval, dan pingResponseTime untuk mengonfigurasi pengaturan ini.
  • Batas waktu penonaktifan dan pengaktifan proses pekerja. Batas pertama ditetapkan oleh atribut shutdownTimeLimit dan menentukan interval bahwa IIS 7 dan yang lebih baru memberikan proses pekerja untuk menyelesaikan semua permintaan sebelum layanan WWW mengakhiri proses pekerja. Batas kedua ditetapkan oleh atribut startupTimeLimit dan menentukan jumlah waktu IIS 7 dan yang lebih baru memungkinkan kumpulan aplikasi untuk memulai.

Kompatibilitas

Versi Catatan
IIS 10.0 Elemen <processModel> tidak dimodifikasi di IIS 10.0.
IIS 8.5 Atribut idleTimeoutAction ditambahkan memungkinkan proses pekerja yang menganggur selama durasi idleTimeout atribut dihentikan atau ditangguhkan, bukan hanya dihentikan.
IIS 8.0 Atribut setProfileEnvironment ditambahkan yang memungkinkan lingkungan diatur berdasarkan profil pengguna untuk proses baru. Nilai ditambahkan untuk maxProcesses atribut , termasuk dukungan untuk Akses Memori Non-Seragam (NUMA). Atribut logEventOnProcessModel ditambahkan untuk menentukan tindakan yang diambil dalam proses dicatat.
IIS 7.5 Elemen <processModel><add> elemen diperbarui di IIS 7.5 untuk menyertakan pengaturan yang memungkinkan Anda menjalankan aplikasi menggunakan ApplicationPoolIdentity baru dan menentukan jenis login untuk identitas proses.
IIS 7.0 Elemen <processModel> ini diperkenalkan di IIS 7.0.
IIS 6.0 Elemen menggantikan <processModel> beberapa pengaturan di objek metabase IIS 6.0 IIsApplicationPools .

Siapkan

Koleksi <applicationPools> disertakan dalam penginstalan default IIS 7 dan yang lebih baru.

Bagaimana Caranya

Cara mengedit pengaturan konfigurasi model proses

  1. Buka Manajer Layanan Informasi Internet (IIS):

    • Jika Anda menggunakan Windows Server 2012 atau Windows Server 2012 R2:

      • Pada bilah tugas, klik Manajer Server, klik Alat, lalu klik Manajer Layanan Informasi Internet (IIS).
    • Jika Anda menggunakan Windows 8 atau Windows 8.1:

      • Tahan tombol Windows, tekan huruf X, lalu klik Panel Kontrol.
      • Klik Alat Administratif, lalu klik dua kali Manajer Layanan Informasi Internet (IIS).
    • Jika Anda menggunakan Windows Server 2008 atau Windows Server 2008 R2:

      • Pada taskbar, klik Mulai, arahkan ke Alat Administratif, lalu klik Manajer Layanan Informasi Internet (IIS).
    • Jika Anda menggunakan Windows Vista atau Windows 7:

      • Pada taskbar, klik Mulai, lalu klik Panel Kontrol.
      • Klik dua kali Alat Administratif, lalu klik dua kali Manajer Layanan Informasi Internet (IIS).
  2. Di panel Koneksi , perluas nama server, klik Kumpulan Aplikasi, dan klik kumpulan aplikasi yang ingin Anda edit. Cuplikan layar jendela I I S Manager yang menampilkan halaman Kumpulan Aplikasi.

  3. Di panel Tindakan , klik Pengaturan Tingkat Lanjut...

  4. Dalam kotak dialog Pengaturan Tingkat Lanjut , klik properti model proses yang ingin Anda edit, lalu edit di bagian nilai properti dari kotak dialog, lalu klik OK. Misalnya, ubah Batas Waktu Matikan (detik) dan Batas Waktu Mulai (detik) menjadi 30.
    Cuplikan layar kotak dialog Pengaturan Tingkat Lanjut. Model Proses disorot.

Cara mengonfigurasi IIS untuk digunakan dengan perangkat keras Non-Uniform Memory Access (NUMA)

  1. Buka Manajer Layanan Informasi Internet (IIS):

    • Jika Anda menggunakan Windows Server 2012 atau yang lebih baru:

      • Pada bilah tugas, klik Manajer Server, klik Alat, lalu klik Manajer Layanan Informasi Internet (IIS).
    • Jika Anda menggunakan Windows 8 atau yang lebih baru:

      • Tahan tombol Windows, tekan huruf X, lalu klik Panel Kontrol.
      • Klik Alat Administratif, lalu klik dua kali Manajer Layanan Informasi Internet (IIS).
  2. Di panel Koneksi , perluas nama server, lalu klik Kumpulan Aplikasi.

  3. Di panel Kumpulan Aplikasi , pilih kumpulan yang ingin Anda konfigurasi untuk NUMA.

  4. Di panel Tindakan , pilih Pengaturan Tingkat Lanjut.

  5. Di bawah panel Model Proses , atur Proses Pekerja Maksimum ke 0.

    Cuplikan layar panel Pengaturan Tingkat Lanjut. Proses Pekerja Maksimum disorot dalam daftar.

Cara mengonfigurasi tindakan batas waktu diam

  1. Buka Manajer Layanan Informasi Internet (IIS):

    • Jika Anda menggunakan Windows Server 2012 R2:

      • Pada bilah tugas, klik Manajer Server, klik Alat, lalu klik Manajer Layanan Informasi Internet (IIS).
    • Jika Anda menggunakan Windows 8.1:

      • Tahan tombol Windows, tekan huruf X, lalu klik Panel Kontrol.
      • Klik Alat Administratif, lalu klik dua kali Manajer Layanan Informasi Internet (IIS).
  2. Di panel Koneksi , klik dua kali nama server, klik dua kali Kumpulan Aplikasi, lalu pilih kumpulan aplikasi untuk dikonfigurasi.

  3. Di panel Tindakan , klik Pengaturan Tingkat Lanjut.

  4. Di bagian Model Proses dari kotak dialog Pengaturan Tingkat Lanjut , untuk idleTimeoutAction, pilih Hentikan atau Tangguhkan.

  5. Klik OK.

    Cuplikan layar kotak dialog Pengaturan Tingkat Lanjut. Tindakan Waktu Diam habis disorot dan Hentikan dipilih di menu drop-down.

Konfigurasi

Anda mengonfigurasi <processModel> elemen di tingkat server dalam file ApplicationHost.config.

Atribut

Atribut Deskripsi
identityType Atribut enum opsional.

Menentukan identitas akun tempat kumpulan aplikasi berjalan.

Catatan: Mulai dari IIS 7.5, nilai defaultnya adalah ApplicationPoolIdentity. (Di IIS 7.0 nilai defaultnya adalah NetworkService.)

Atribut identityType dapat menjadi salah satu nilai yang mungkin berikut; defaultnya adalah NetworkService.

Nilai Deskripsi
ApplicationPoolIdentity Menentukan bahwa kumpulan aplikasi berjalan di bawah akun identitas kumpulan aplikasi yang dibuat secara dinamis. Mulai dari IIS 7.5, ApplicationPoolIdentity adalah identitas default untuk menjalankan kumpulan aplikasi. (Di IIS 7.0 identitas defaultnya adalah NetworkService.)

Ketika kumpulan aplikasi berjalan di bawah ApplicationPoolIdentity akun, kumpulan aplikasi mengakses sumber daya sebagai "IIS AppPool< Identitas AppPool>". Misalnya, untuk "DefaultAppPool", identitasnya adalah "IIS AppPool\DefaultAppPool". Identitas ini memungkinkan administrator untuk menentukan izin yang hanya berkaitan dengan identitas tempat kumpulan aplikasi berjalan, sehingga meningkatkan keamanan server.

Nilai numerik adalah 4.
LocalService Menentukan bahwa kumpulan aplikasi berjalan di bawah akun LocalService bawaan, yang memiliki hak pengguna yang sama dengan NetworkService.

Ketika kumpulan aplikasi berjalan di bawah akun LocalService , kumpulan aplikasi menyajikan kredensial anonim di jaringan.

Catatan: Menjalankan kumpulan aplikasi di bawah akun yang memiliki hak pengguna tingkat tinggi adalah risiko keamanan yang serius.

Nilai numerik adalah 1.
LocalSystem Menentukan bahwa kumpulan aplikasi berjalan di bawah akun LocalSystem bawaan, yang memiliki hak istimewa yang luas di komputer lokal dan bertindak sebagai komputer di jaringan.

Catatan: Menjalankan kumpulan aplikasi di bawah akun yang memiliki hak pengguna tingkat tinggi adalah risiko keamanan yang serius.

Nilai numerik adalah 0.
NetworkService Menentukan bahwa kumpulan aplikasi berjalan di bawah akun NetworkService bawaan. Di IIS 7.0 ini adalah identitas default untuk menjalankan kumpulan aplikasi; dalam default IIS 7.5 diubah menjadi ApplicationPoolIdentity.

Ketika kumpulan aplikasi berjalan di bawah akun NetworkService , kumpulan aplikasi mengakses sumber daya jaringan sebagai akun komputer.

Nilai numerik adalah 2.
SpecificUser Menentukan bahwa kumpulan aplikasi berjalan di bawah identitas kustom, yang dikonfigurasi dengan menggunakan atribut userName dan kata sandi .

Catatan: Untuk menghindari penyimpanan string kata sandi yang tidak terenkripsi dalam file konfigurasi, selalu gunakan AppCmd.exe atau IIS Manager untuk memasukkan kata sandi. Jika Anda menggunakan alat manajemen ini, string kata sandi akan dienkripsi secara otomatis sebelum ditulis ke file konfigurasi XML. Ini memberikan keamanan kata sandi yang lebih baik daripada menyimpan kata sandi yang tidak terenkripsi.

Catatan: Akun layanan terkelola dapat digunakan untuk mengaktifkan layanan dan tugas untuk berbagi akun domain mereka sendiri dan untuk mengaktifkan manajemen kata sandi otomatis, menghilangkan kebutuhan administrator untuk mengelola kata sandi secara manual. Untuk informasi selengkapnya, lihat Apa yang Baru untuk Akun Layanan Terkelola.

Nilai numerik adalah 3.
idleTimeout Atribut timeSpan opsional.

Menentukan berapa lama (dalam menit) proses pekerja harus berjalan diam jika tidak ada permintaan baru yang diterima dan proses pekerja tidak memproses permintaan. Setelah waktu yang dialokasikan berlalu, proses pekerja harus meminta agar dimatikan oleh layanan WWW.

Nilai defaultnya adalah 00:20:00.

Untuk menonaktifkan fitur batas waktu diam, atur nilai ini ke 00:00:00.
idleTimeoutAction Atribut enum opsional.

Menentukan tindakan yang akan dilakukan ketika durasi batas waktu diam telah tercapai. Sebelum IIS 8.5, proses pekerja yang diam selama durasi idleTimeout atribut akan dihentikan. Setelah IIS 8.5, Anda memiliki pilihan untuk mengakhiri proses pekerja yang mencapai idleTimeout batas, atau menangguhkannya dengan memindahkannya dari memori ke disk. Menangguhkan proses kemungkinan akan memakan waktu lebih sedikit dan mengonsumsi lebih sedikit memori daripada mengakhirinya.

Anda dapat mengonfigurasi tindakan batas waktu diam ditangguhkan dengan permintaan palsu inisialisasi aplikasi (lihat applicationInitialization.

Atribut idleTimeoutAction dapat memiliki nilai yang mungkin berikut. Nilai defaultnya adalah Terminate.
Nilai Deskripsi
Terminate Mengakhiri proses pekerja diam. Ini memerlukan periode startup yang lebih lama ketika situs kemudian diakses oleh pengguna dan proses pekerja dimulai.

Nilai numerik adalah 0.
Suspend Menangguhkan proses pekerja menganggur. Ini membuat proses pekerja hidup, tetapi dipindahkan dari memori ke disk, mengurangi sumber daya sistem yang dikonsumsi. Ketika permintaan kemudian masuk, manajer memori memuat file halaman yang diperlukan untuk permintaan dari disk ke memori, kemungkinan membuat proses pekerja tersedia lebih cepat daripada jika sebelumnya telah dihentikan.

Nilai numerik adalah 1.
loadUserProfile Atribut Boolean opsional.

Menentukan apakah IIS memuat profil pengguna untuk identitas kumpulan aplikasi. Mengatur nilai ini ke false menyebabkan IIS kembali ke perilaku IIS 6.0. IIS 6.0 tidak memuat profil pengguna untuk identitas kumpulan aplikasi.

Nilai defaultnya adalah false.
logEventOnProcessModel Atribut bendera opsional.

Menentukan tindakan mana yang diambil dalam proses yang dicatat ke Pemantau Peristiwa. Di IIS 8.0, satu-satunya tindakan yang berlaku adalah tindakan batas waktu diam, di mana proses dihentikan karena diam untuk periode idleTimeout.

Nama bendera sama dengan IdleTimeout. Nilainya adalah 1.

Nilai defaultnya adalah IdleTimeout.
logonType Atribut enum opsional.

Menentukan jenis masuk untuk identitas proses. (Untuk informasi tambahan tentang jenis masuk, lihat artikel Fungsi LogonUser .)

Catatan: Atribut ini diperkenalkan di IIS 7.5.

Atribut logonType dapat menjadi salah satu nilai yang mungkin berikut; defaultnya adalah LogonBatch.
Nilai Deskripsi
LogonBatch Menentukan bahwa identitas kumpulan aplikasi harus masuk sebagai pengguna batch.

Nilai numerik adalah 0.
LogonService Menentukan bahwa identitas kumpulan aplikasi harus masuk sebagai layanan.

Nilai numerik adalah 1.
manualGroupMembership Atribut Boolean opsional.

Menentukan apakah Pengidentifikasi Keamanan (SID) grup IIS_IUSRS ditambahkan ke token proses pekerja. Ketika false, IIS secara otomatis menggunakan identitas kumpulan aplikasi seolah-olah itu adalah anggota grup IIS_IUSRS bawaan, yang memiliki akses ke file dan sumber daya sistem yang diperlukan. Jika true, identitas kumpulan aplikasi harus secara eksplisit ditambahkan ke semua sumber daya yang diperlukan proses pekerja pada runtime.

Nilai defaultnya adalah false.
maxProcesses Atribut uint opsional.

Menunjukkan jumlah maksimum proses pekerja yang akan digunakan untuk kumpulan aplikasi.
  • Nilai "1" menunjukkan maksimum satu proses pekerja untuk kumpulan aplikasi. Ini akan menjadi pengaturan pada server yang tidak memiliki simpul NUMA.
  • Nilai "2" atau lebih menunjukkan taman Web yang menggunakan beberapa proses pekerja untuk kumpulan aplikasi (jika perlu).
  • Nilai "0" menentukan bahwa IIS menjalankan jumlah proses pekerja yang sama dengan simpul Akses Memori Non-Seragam (NUMA). IIS mengidentifikasi jumlah simpul NUMA yang tersedia pada perangkat keras dan memulai jumlah proses pekerja yang sama. Misalnya, jika Anda memiliki empat simpul NUMA, ia akan menggunakan maksimal empat proses pekerja untuk kumpulan aplikasi tersebut. Dalam contoh ini, mengatur maxProcesses ke nilai "0" atau "4" akan memiliki hasil yang sama.
Nilai defaultnya adalah 1.
password Atribut string opsional.

Menentukan kata sandi yang terkait dengan atribut userName . Atribut ini hanya diperlukan ketika nilai identityType adalah SpecificUser.

Catatan: Untuk menghindari penyimpanan string kata sandi yang tidak terenkripsi dalam file konfigurasi, selalu gunakan AppCmd.exe atau IIS Manager untuk memasukkan kata sandi. Jika Anda menggunakan alat manajemen ini, string kata sandi akan dienkripsi secara otomatis sebelum ditulis ke file konfigurasi XML. Ini memberikan keamanan kata sandi yang lebih baik daripada menyimpan kata sandi yang tidak terenkripsi.
pingingEnabled Atribut Boolean opsional.

Menentukan apakah ping diaktifkan untuk proses pekerja.

Nilai defaultnya adalah true.
pingInterval Atribut timeSpan opsional.

Menentukan waktu antara ping pemantauan kesehatan yang dikirim layanan WWW ke proses pekerja.

Nilai defaultnya adalah 00:00:30 (30 detik).
pingResponseTime Atribut timeSpan opsional.

Menentukan waktu saat proses pekerja diberikan untuk merespons ping pemantauan kesehatan. Setelah batas waktu terlampaui, layanan WWW mengakhiri proses pekerja.

Nilai defaultnya adalah 00:01:30 (1 menit 30 detik).
requestQueueDelegatorIdentity Atribut String Opsional.

Menentukan identitas akun yang memiliki izin untuk mendelegasikan permintaan HTTP ke kumpulan aplikasi.

Catatan: Atribut ini tidak tersedia di UI Pengelola Layanan Informasi Internet (IIS).
setProfileEnvironment Atribut Boolean opsional.

Ketika setProfileEnvironment diatur ke True, WAS membuat blok lingkungan untuk diteruskan ke CreateProcessAsUser saat membuat proses pekerja. Ini memastikan bahwa lingkungan diatur berdasarkan profil pengguna untuk proses baru.

Nilai defaultnya adalah True.
shutdownTimeLimit Atribut timeSpan opsional.

Menentukan waktu tunggu layanan W3SVC setelah memulai daur ulang. Jika proses pekerja tidak dimatikan dalam shutdownTimeLimit, proses tersebut akan dihentikan oleh layanan W3SVC.

Nilai defaultnya adalah 00:01:30 (1 menit 30 detik).
startupTimeLimit Atribut timeSpan opsional.

Menentukan waktu IIS menunggu kumpulan aplikasi dimulai. Jika kumpulan aplikasi tidak memulai dalam startupTimeLimit, proses pekerja dihentikan dan jumlah perlindungan yang gagal cepat bertambah.

Nilai defaultnya adalah 00:01:30 (1 menit 30 detik).
userName Atribut string opsional.

Menentukan identitas tempat kumpulan aplikasi berjalan saat identityType adalah SpecificUser.

Elemen Anak

Tidak ada.

Sampel Konfigurasi

Sampel konfigurasi berikut menggunakan elemen kumpulan <add> aplikasi untuk membuat kumpulan aplikasi baru bernama Contoso. Elemen <recycling> mengonfigurasi pengelogan untuk restart kumpulan aplikasi, <periodicRestart> elemen dikonfigurasi saat kumpulan aplikasi dimulai ulang, dan <processModel> elemen mengonfigurasi atribut shutdownTimeLimit dan startupTimeLimit untuk mematikan dan memulai proses pekerja di kumpulan aplikasi masing-masing selama 30 detik. Jika batas waktu ini terlampaui, IIS mengakhiri proses pekerja.

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

Kode Sampel

Contoh berikut mengubah nilai properti processModel.shutdownTimeLimit dan processModule.startupTimeLimit menjadi 30 detik masing-masing untuk kumpulan aplikasi bernama Contoso.

AppCmd.exe

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

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

Anda juga dapat menggunakan sintaks berikut:

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

Catatan

Anda harus memastikan untuk mengatur parameter penerapan ke apphost saat Anda menggunakan AppCmd.exe untuk mengonfigurasi pengaturan ini. Ini menerapkan pengaturan konfigurasi ke bagian lokasi yang sesuai dalam file 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