Назад | Перейти на главную страницу

Перезапустить пул удаленных приложений IIS из командной строки?

Можно ли повторно использовать пул приложений IIS7 из командной строки на другом компьютере?

Я нашел APPCMD (appcmd recycle apppool my-app-pool), но он работает только на том хосте, на котором запущен, AFAICT.

Я слышал слух, что это может быть способ сделать это с помощью Powershell, но я ничего об этом не знаю и, по-видимому, не очень хорошо разбираюсь в этом.

Я использую Vista / Server 2008, если это важно.

РЕДАКТИРОВАТЬ: я нашел что-то под названием WinRM что кто-то утверждает, что может запускать сам APPCMD, но я еще не уверен, как именно.

Кен, если это запускается из CMD, вы можете сделать это с помощью PSExec. Это не требует установки на сервере, к которому вы хотите получить доступ.

Просто скопируйте содержимое застегивать в ваш файл System32 (не включайте ELUA или файл DLL) компьютера, с которого вы хотите удаленно.
затем введите CMD
тип
Psexec \\{Computer Name of ISS7 Server} %systemroot%\System32\inetsrv\appcmd recycle apppool my-app-pool

Если вы не находитесь в том же домене в учетной записи администратора домена, вам нужно будет ввести учетные данные для административного доступа. Для получения дополнительной информации просто введите psexec в командной строке без аргументов.

Чтобы сделать это удаленно из PowerShell, вам нужно либо использовать удаленное взаимодействие PowerShell, либо использовать WMI.

На самом деле это очень просто использовать командлет PowerShell Invoke-WMIMethod, но вы должны указать -Authentication PacketPrivacy ... и если вам нужно указать разные учетные данные, вы можете сделать это с помощью параметра -Credential (Get-Credential) ... вот пример:

$pc = "serverName"

## List the app pools, note the __RELPATH of the one you want to kill:
Get-WMIObject IISApplicationPool 
              -Computer $pc 
              -Namespace root\MicrosoftIISv2 
              -Authentication PacketPrivacy 

## Recycle a specific one:
$Name = "W3SVC/APPPOOLS/ASP.NET v4.0 Classic"  ## This is the Name from above
$Path = "IISApplicationPool.Name='$Name'"      ## This is the __RELPATH

Invoke-WMIMethod Recycle 
                 -Path $Path 
                 -Computer $pc 
                 -Namespace root\MicrosoftIISv2 
                 -Authentication PacketPrivacy

Я написал красивую функцию, чтобы обернуть все это: http://poshcode.org/2466

Если вы выбрали командную строку, PsExec кажется решением, но для критически важных задач я бы не рекомендовал его. Причина в следующем: PsExec имеет проблемы с несколькими запусками.

Я предпочитаю использовать API для таких целей.

  1. WMI выполнит работу, как описано Вот (мое любимое решение).
  2. В качестве альтернативы вы можете использовать ServerManager API. Это позволяет управлять пулами приложений на удаленный machine, если вы запустите свой код с соответствующими учетными данными.

Подобно ответу @ Jeff, с удаленным взаимодействием Powershell это будет:

Enter-PSSession -ComputerName <your server> -Credential <username, or (Get-Credential)>

Затем в интерактивном сеансе:

appcmd recycle apppool my-app-pool

для перезапуска пула приложений.

Переработайте пул приложений в PowerShell

В этом примере: MSExchangeSyncAppPool

$appPool = Get-WmiObject -Authentication PacketPrivacy -Impersonation Impersonate -ComputerName (hostname) -namespace "root/MicrosoftIISv2" -class IIsApplicationPool | Where-Object {$_.Name -eq "W3SVC/AppPools/MSExchangeSyncAppPool" }
$appPool.Recycle()