Можно ли повторно использовать пул приложений 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 для таких целей.
Подобно ответу @ 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()