Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В предыдущих пошаговом руководстве показано, как запрашивать и изменять параметры конфигурации 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 заключается в том, что они могут быть переработаны. Командлет для перезапуска AppPools называется Restart-WebItem, а не Recycle-WebItem. PowerShell имеет довольно строгие правила именования, и нам пришлось остановиться на Restart-WebItem. Давайте расширим этот пример немного, добавив...
- Выполнение запроса на страницу по умолчанию веб-сайта 'Default Web Site'.
- Запрос PID рабочего процесса, который обрабатывает запросы.
- Повторное использование пула приложений.
- Запросив PID еще раз, чтобы убедиться, что процесс был перезапущен.
1. Запрос страницы по умолчанию
Для запроса http://localhost/используется класс Net.WebClient. Вместо отображения выходных данных на экране мы просто просматриваем длину ответа.
PS IIS:\AppPools> $response = (new-object Net.WebClient).DownloadString("http://localhost/")
PS IIS:\AppPools> $response.Length
689
2. Запрос пин-код рабочего процесса
Если у вас нет других активных веб-сайтов и приложений на компьютере, следующая команда должна возвращать только один пин-код:
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
В настоящее время выполняются запросы
Если ваш сервер не является сервером продуктивной среды, вам будет сложно просмотреть текущие выполняемые запросы. Запрос устарел до тех пор, пока вы не выполните его через Internet Explorer и не вернетесь в консоль 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. Вы узнали, как начать и остановить их. Вы также узнали, как просматривать рабочие процессы и текущие выполняющиеся запросы.