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


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

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

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

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

EDIT: я нашел что-то названное WinRM что кто-то утверждает, что способен запускать APPCMD, но я точно не знаю, как это сделать.


25
2018-01-13 22:06


Источник




Ответы:


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

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

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


28
2018-01-17 19:16



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


Чтобы сделать это удаленно от 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


6
2018-01-18 19:35



Возможно, вам понадобится включить «IIS 6 WMI Compatibility» в IIS7 для того, чтобы было доступно пространство имен root \ MicrosoftIISv2. forums.iis.net/t/1158882.aspx - Brian Low


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

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

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

3
2017-11-30 12:20





Подобно ответу @ Джеффа, с удалением Powershell это было бы:

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

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

appcmd recycle apppool my-app-pool

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


1
2017-12-03 18:02





Recycle 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()

0
2017-08-07 08:36