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

26

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

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

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

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

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


источник

Ответы:

28

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

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

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

Джефф
источник
4
Расположение AppCmd.exe (% systemroot% \ system32 \ inetsrv) не является частью PATH автоматически. Вы можете добавить его в свой путь или запустить appcmd с помощью: "% systemroot% \ system32 \ inetsrv \ AppCmd.exe"
ashtonium
1
Вы не цитируете удаленную команду для PsExec; Вы отправляете имя команды, за которым следуют аргументы, разделенные пробелами. Таким образом, команда должна быть:Psexec \\computer c:\windows\system32\inetsrv\appcmd.exe" recycle apppool AppPoolName
Карл G
6

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

На самом деле это очень просто с помощью командлета Invoke-WMIMethod PowerShell, но вы должны указать -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

Jaykul
источник
3
Может потребоваться включить «Совместимость IIS 6 WMI» на IIS7, чтобы было доступно пространство имен root \ MicrosoftIISv2. forums.iis.net/t/1158882.aspx
Брайан Лоу
3

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

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

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

Аналогично ответу @ Jeff, с Powershell remoting это будет:

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

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

appcmd recycle apppool my-app-pool

перезапустить пул приложений.

Фактор Мистик
источник
0

Перезапустите AppPool в 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()
UZ-он
источник