PowerShell Snap-in: Run-time Data

oleh Thomas Deml

Panduan sebelumnya memperlihatkan kepada Anda cara mengkueri dan mengubah pengaturan konfigurasi IIS. Namun, ada satu area yang tidak dijelajahi yang tersisa: data run-time.

Pengantar

Hal-hal yang berubah, IIS tidak berbeda. Situs dimulai atau dihentikan, daur ulang atau waktu habis Kumpulan Aplikasi, permintaan masuk dan respons dikirim, AppDomains diluncurkan atau dimatikan. IIS mengimplementasikan antarmuka yang disebut RSCA (status run-time dan API kontrol) yang memungkinkan Anda memantau apa yang terjadi dalam sistem.

IIS PowerShell Snap-in menggunakan antarmuka ini dan mengekspos beberapa datanya melalui namespace IIS Snap-in. Status Situs dan Kumpulan Aplikasi dapat dikonfigurasi melalui cmdlet Get-WebItemState, Start-WebItem, Stop-WebItem dan Restart-WebItem. Status run-time seperti proses pekerja yang sedang berjalan, saat ini menjalankan permintaan dan AppDomain yang dimuat diekspos melalui namespace IIS.

Panduan ini menggunakan situs, aplikasi, dan direktori virtual yang dibuat dalam panduan sebelumnya.

Situs dan Status Kumpulan Aplikasi

Kami memulai dengan mengkueri status situs web kami.

Status Situs

PS IIS:\> cd Sites
PS IIS:\Sites> Get-WebItemState IIS:\Sites\DemoSite
Started

Menghentikan DemoSite dapat dicapai dengan cmdlet Stop-WebItem:

PS IIS:\Sites> Stop-WebItem DemoSite
PS IIS:\Sites> Get-WebItemState IIS:\Sites\DemoSite
Stopped

Memulai bekerja dengan cara yang sama tentu saja:

PS IIS:\Sites> Start-WebItem DemoSite
PS IIS:\Sites> Get-WebItemState IIS:\sites\DemoSite
Started

Status AppPool

Kami ingin melakukan hal yang sama untuk Kumpulan Aplikasi

PS IIS:\> cd AppPools
PS IIS:\AppPools> Get-WebItemState DemoAppPool
Started
PS IIS:\AppPools> Stop-WebItem DemoAppPool
PS IIS:\AppPools> Get-WebItemState DemoAppPool
Stopped

Tetapi ada juga properti status yang dapat Anda baca di simpul AppPools. Mari kita bersenang-senang dengan contoh berikutnya. Aktifkan speaker Anda dan jalankan perintah berikut:

dir 'iis:\AppPools' | foreach {[void](new-object -com Sapi.SPVoice).Speak("Application Pool State:");}{$poolState = "Application Pool " + $_.Name +" is " + $_.State;$poolState;[void](new-object -com Sapi.SPVoice).Speak($poolState);}

Sekarang mulai DemoAppPool lagi:

PS IIS:\AppPools> Start-WebItem DemoAppPool

Mendaur ulang AppPools

Satu perbedaan dengan AppPools adalah bahwa mereka dapat didaur ulang. Cmdlet untuk mendaur ulang AppPools disebut Restart-WebItem dan bukan Recycle-WebItem. PowerShell memiliki aturan penamaan yang cukup ketat dan kami harus menyelesaikan Restart-WebItem. Mari kita perluas contoh ini sedikit dengan

  1. Membuat permintaan ke halaman default 'Situs Web Default'.
  2. Mengkueri PID proses pekerja adalah yang menangani permintaan.
  3. Mendaur ulang Kumpulan Aplikasi.
  4. Meminta PID lagi untuk mengonfirmasi bahwa proses telah dimulai ulang.

1. Meminta halaman default

Kami menggunakan kelas Net.WebClient untuk meminta http://localhost/. Alih-alih menampilkan output di layar, kita hanya melihat panjang respons.

PS IIS:\AppPools> $response = (new-object Net.WebClient).DownloadString("http://localhost/")
PS IIS:\AppPools> $response.Length
689

2. Mengkueri PID Proses Pekerja

Dengan asumsi Anda tidak memiliki situs web aktif dan aplikasi lain di komputer Anda, perintah berikut harus mengembalikan hanya satu PID:

PS IIS:\AppPools> get-process w3wp | select processname,id
ProcessName                                                                                      Id
-----------                                                                                      --
w3wp                                                                                           3684

Ada cara yang lebih baik untuk sampai ke proses pekerja, ditangani sedikit kemudian dalam panduan ini.

3. Mendaur ulang Kumpulan Aplikasi

Kami mendaur ulang Kumpulan Aplikasi dengan menggunakan cmdlet Restart-WebItem:

PS IIS:\AppPools> Restart-WebItem DefaultAppPool

4. Mengkueri PID Proses Pekerja

Jika AppPool berhasil didaur ulang, ID Proses Anda seharusnya telah diubah.

PS IIS:\AppPools> get-process w3wp | select processname,id
ProcessName                                                                                      Id
-----------                                                                                      --
w3wp                                                                                           5860

Proses dan Permintaan Pekerja

Cmdlet get-process tidak membantu Anda mencari tahu Kumpulan Aplikasi mana yang dilayani oleh proses pekerja tertentu. Namun, ini dapat dengan mudah dilakukan:

PS IIS:\AppPools> dir DefaultAppPool\WorkerProcesses
               processId                  Handles                    state StartTime
               ---------                  -------                    ----- ---------
                    6612                      326                        1 3/28/2008 12:20:27 PM

Permintaan yang Sedang Dijalankan

Jika mesin Anda bukan mesin produksi, Anda akan kesulitan melihat permintaan yang saat ini dijalankan. Permintaan sudah lama hilang sampai Anda membuat permintaan melalui Internet Explorer dan kembali ke konsol PowerShell. Inilah pembantu kecil; permintaan yang membutuhkan waktu lama.

Set-Content "$env:systemdrive\inetpub\wwwroot\long.aspx" "<%@ Page language=`"C#`"%><%System.Threading.Thread.Sleep(30000);Response.Write(`"slept for 30 seconds`");%>"

Jika Anda ingin melihat permintaan yang sedang dijalankan, Anda dapat mengetik perintah berikut (CATATAN: id proses yang harus Anda gunakan untuk perintah get-item akan berbeda di komputer Anda):

PS IIS:\AppPools\DefaultAppPool\WorkerProcesses> dir
Process  State      Handles  Start Time
Id
-------- -----      -------  ----------
6612     Running    737      3/31/2008 8:18:15 AM
PS IIS:\AppPools\DefaultAppPool\WorkerProcesses> (get-item 6612).GetRequests(0).Collection
requestId    : d8000001800000f5
connectionId : d8000001600000f3
verb         : GET
url          : /long.aspx
siteId       : 1

Atau jika Anda ingin melihat berapa banyak waktu yang sudah berlalu sejak Anda memulai permintaan:

PS IIS:\AppPools\DefaultAppPool\WorkerProcesses> (get-item 6612).GetRequests(0).Collection | select url,timeElapsed
url                                                                                     timeElapsed
---                                                                                     -----------
/long.aspx                                                                                     2637

Ringkasan

Selesai. Dalam panduan ini Anda mempelajari cara mengkueri status Kumpulan Aplikasi dan Situs IIS. Anda menemukan cara memulai dan menghentikannya. Anda juga mempelajari cara melihat proses pekerja dan saat ini menjalankan permintaan.