Оснастка PowerShell: данные времени выполнения
В предыдущих пошаговых руководствах показано, как запрашивать и изменять параметры конфигурации IIS. Однако остается одна неизученная область: данные времени выполнения.
Введение
Все изменилось, IIS не отличается. Сайты начинаются или останавливаются, пулы приложений перезапускаются или истекают, поступают запросы и отправляются ответы, возникают домены приложений или завершаются. СЛУЖБЫ IIS реализуют интерфейс RSCA (API состояния среды выполнения и управления), который позволяет отслеживать, что происходит в системе.
Оснастка IIS PowerShell использует этот интерфейс и предоставляет некоторые данные через пространство имен оснастки IIS. Состояние сайтов и пулов приложений можно настроить с помощью командлетов Get-WebItemState, Start-WebItem, Stop-WebItem и Restart-WebItem. Состояние времени выполнения, например текущее выполнение рабочих процессов, выполнение запросов и загруженных доменов приложений, предоставляется через пространство имен IIS.
В этом пошаговом руководстве используются сайты, приложения и виртуальные каталоги, созданные в предыдущем пошаговом руководстве.
Сайты и состояние пула приложений
Мы начинаем с запроса состояния наших веб-сайтов.
Состояние сайта
PS IIS:\> cd Sites
PS IIS:\Sites> Get-WebItemState IIS:\Sites\DemoSite
Started
Остановить DemoSite можно с помощью командлета Stop-WebItem:
PS IIS:\Sites> Stop-WebItem DemoSite
PS IIS:\Sites> Get-WebItemState IIS:\Sites\DemoSite
Stopped
Запуск работает так же:
PS IIS:\Sites> Start-WebItem DemoSite
PS IIS:\Sites> Get-WebItemState IIS:\sites\DemoSite
Started
Состояние AppPool
Мы хотим сделать то же самое для пулов приложений
PS IIS:\> cd AppPools
PS IIS:\AppPools> Get-WebItemState DemoAppPool
Started
PS IIS:\AppPools> Stop-WebItem DemoAppPool
PS IIS:\AppPools> Get-WebItemState DemoAppPool
Stopped
Но есть также свойство состояния, которое можно считывать на узле AppPools. Давайте повеселимся со следующим примером. Включите динамики и выполните следующую команду:
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);}
Теперь снова запустите DemoAppPool:
PS IIS:\AppPools> Start-WebItem DemoAppPool
Утилизация пулов приложений
Одно различие с AppPools заключается в том, что они могут быть переработаны. Командлет для перезапуска AppPools называется Restart-WebItem, а не Recycle-WebItem. В PowerShell есть довольно строгие правила именования, и нам пришлось согласиться на Restart-WebItem. Давайте немного развернем этот пример на
- Отправка запроса на страницу по умолчанию веб-сайта по умолчанию.
- Запрос к ИДЕНТИФИКАТОРу рабочего процесса обрабатывается.
- Перезапуск пула приложений.
- Запрос PID еще раз, чтобы убедиться, что процесс был перезапущен.
1. Запрос страницы по умолчанию
Мы используем класс Net.WebClient для запроса http://localhost/
. Вместо отображения выходных данных на экране мы просто смотрим на длину ответа.
PS IIS:\AppPools> $response = (new-object Net.WebClient).DownloadString("http://localhost/")
PS IIS:\AppPools> $response.Length
689
2. Запрос PID рабочего процесса
Если на компьютере нет других активных веб-сайтов и приложений, следующая команда должна возвращать только один ИДЕНТИФИКАТОР:
PS IIS:\AppPools> get-process w3wp | select processname,id
ProcessName Id
----------- --
w3wp 3684
Существует лучший способ получить сведения о рабочих процессах, которые описаны чуть позже в этом пошаговом руководстве.
3. Перезапуск пула приложений
Мы перезапускаем пул приложений с помощью командлета Restart-WebItem:
PS IIS:\AppPools> Restart-WebItem DefaultAppPool
4. Запрос piD рабочего процесса
Если AppPool успешно перезапущен, идентификатор процесса должен быть изменен.
PS IIS:\AppPools> get-process w3wp | select processname,id
ProcessName Id
----------- --
w3wp 5860
Рабочие процессы и запросы
Командлет get-process не помогает определить, какой пул приложений обслуживает конкретный рабочий процесс. Однако это можно легко сделать:
PS IIS:\AppPools> dir DefaultAppPool\WorkerProcesses
processId Handles state StartTime
--------- ------- ----- ---------
6612 326 1 3/28/2008 12:20:27 PM
Выполнение запросов в настоящее время
Если ваш компьютер не является рабочим компьютером, вам будет трудно присмотреться к выполнению запросов в настоящее время. Запрос давно не выполняется, пока вы не сделаете запрос через Интернет Обозреватель и не вернетесь в консоль PowerShell. Вот немного помощника; запрос, который занимает много времени.
Set-Content "$env:systemdrive\inetpub\wwwroot\long.aspx" "<%@ Page language=`"C#`"%><%System.Threading.Thread.Sleep(30000);Response.Write(`"slept for 30 seconds`");%>"
Если вы хотите просмотреть выполняемые в настоящее время запросы, введите следующую команду (ПРИМЕЧАНИЕ. Идентификатор процесса, который необходимо использовать для команды get-item, будет отличаться на вашем компьютере):
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
Или, если вы хотите узнать, сколько времени уже прошло с момента запуска запроса:
PS IIS:\AppPools\DefaultAppPool\WorkerProcesses> (get-item 6612).GetRequests(0).Collection | select url,timeElapsed
url timeElapsed
--- -----------
/long.aspx 2637
Итоги
Готово. В этом пошаговом руководстве вы узнали, как запрашивать состояние пулов приложений и сайтов IIS. Вы узнали, как начать и остановить их. Вы также узнали, как рассматривать рабочие процессы и выполняемые в настоящее время запросы.