У меня есть PowerShell script, который запускается автоматически, когда наша служба мониторинга обнаруживает, что веб-сайт не работает.
Он должен остановить AppPool (используя Stop-WebAppPool -name $AppPool;
), дождаться, пока он действительно остановится, а затем перезапустите его.
Иногда этот процесс фактически не останавливается, что проявляется в ошибке
Cannot Start Application Pool:
The service cannot accept control messages at this time.
(Exception from HRESULT: 0x80070425)"
когда вы попытаетесь запустить его снова.
Если для остановки требуется больше, чем определенное количество секунд (я выберу это количество времени после того, как я проведу несколько остановок, чтобы увидеть, как долго это обычно требуется), я хочу просто убить процесс.
Я знаю, что могу получить список процессов, используемых рабочими в AppPool, выполнив dir IIS:\AppPools\MyAppPool\WorkerProcesses\
,
Process ID State Handles Start Time
---------- ----- ------- ----------
7124 Running
но я не могу понять, как реально захватить идентификатор процесса, чтобы я мог его убить.