如何在 IIS 8 中远程停止/启动应用程序池

Posted

技术标签:

【中文标题】如何在 IIS 8 中远程停止/启动应用程序池【英文标题】:How to remotely stop/start an application pool in IIS 8 【发布时间】:2015-03-12 16:08:16 【问题描述】:

警告:每人使用一行!

我在 IIS 6 中使用了这些命令,它们运行良好。

开始:

(get-wmiobject -namespace 'root\MicrosoftIISv2' -computername 'REMOTE_SERVER' -class 'IIsApplicationPool' | where-object $_.Name -eq 'W3SVC/AppPools/MY_FANCY_APPPOOL').InvokeMethod('Stop', $null)"

-和-

停止:

(get-wmiobject -namespace 'root\MicrosoftIISv2' -computername 'REMOTE_SERVER' -class 'IIsApplicationPool' | where-object $_.Name -eq 'W3SVC/AppPools/MY_FANCY_APPPOOL').InvokeMethod('Start', $null)

我正在 IIS 8 中寻找替代方案。我需要几个单行代码,并且它们必须是 Powershell 命令。我通过 TFS 中的 InvokePowerShellCommand 活动调用它们。有没有人可以帮助我?

【问题讨论】:

您不应该在构建过程中使用应用程序池。部署与构建是分开的——为此使用发布管理工具。过度扩展构建过程来进行部署通常是非常痛苦和不灵活的。 完全同意@DanielMann。 “构建”作业的目标是生成一个成功测试的候选发布工件。 让构建执行部署步骤对于 CI 或 CD 构建来说并不少见。虽然我不确定为什么在保存 web.config 文件或更改 bin 文件夹强制回收时需要明确回收应用程序池。 如果您正在部署使用 IIS(进程外)托管的 ASP.NET Core 应用程序,您可能需要这样做。应用程序文件在运行时被锁定,因此您需要停止池,进行部署,然后重新启动。 【参考方案1】:

您可以执行以下操作来启动您的应用程序池:

Invoke-Command -ComputerName "REMOTE_SERVER" -ScriptBlock  Start-WebAppPool -Name "MY_FANCY_APPPOOL" 

您可以执行以下操作来停止您的应用程序池:

Invoke-Command -ComputerName "REMOTE_SERVER" -ScriptBlock  Stop-WebAppPool -Name "MY_FANCY_APPPOOL" 

【讨论】:

在运行Stop-WebAppPool 之前,您需要Import-Module 吗?即使安装了 IIS,我也遇到了这些命令工作的问题。 我现在无法检查,但我想您必须先在 REMOTE_SERVER 上启用 IIS 的远程管理。 @Pred 是的,将其添加到 ScriptBlock 的开头:Import-Module WebAdministration; 我在使用上述命令时遇到异常:[XXX.XX.X.XX] 连接到远程服务器 XXX.XX.X.XX 失败,并显示以下错误消息:WinRM 客户端无法处理请求。默认身份验证可在以下条件下与 IP 地址一起使用:传输为 HTTPS 或目标位于 TrustedHosts 列表中,并且提供了显式凭据。使用 winrm.cmd 配置 TrustedHosts。请注意,TrustedHosts 列表中的计算机可能未经过身份验证。有关如何设置 TrustedHosts 的更多信息,请运行以下命令:winrm... 我没有在我的 Win10 开发盒上加载 WebAdministration,我能够在 Server 2012 R2 实验室盒上执行此操作而没有任何错误。【参考方案2】:

首先,有时您需要添加显式等待,以便应用程序池响应控制消息:

Invoke-Command -ComputerName "$REMOTE_SERVER" -ScriptBlock  Import-Module WebAdministration; Start-Sleep -s 10; Start-WebAppPool -Name "$APP_POOL_NAME" 

然后停下来:

Invoke-Command -ComputerName "$REMOTE_SERVER" -ScriptBlock  Import-Module WebAdministration; Stop-WebAppPool -Name "$APP_POOL_NAME" 

【讨论】:

以上是关于如何在 IIS 8 中远程停止/启动应用程序池的主要内容,如果未能解决你的问题,请参考以下文章

如何在不同域中的远程服务器上启动或停止IIS-8.5网站

IIS应用程序池服务停止,如何解决?

IIS 应用程序池 - 停止/启动与回收

IIS6.0 IIS7.5应用程序池自动停止怎么办

windows 7 sp1 版本下的IIS应用程序池总是自动停止?

IIS应用程序池自动停止是为啥?