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

31

注意:每行只能使用一行!

我曾经在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活动来调用它们。有没有人可以帮我?


1
在构建过程中不应该涉及应用程序池。部署是与构建分开的问题 - 使用发布管理工具来完成此任务。将构建过程扩展到部署通常非常痛苦和缺乏灵活性。 - Daniel Mann
完全同意@DanielMann的观点。"构建"任务的目标是生成一个成功测试的发布候选体。 - Andrew Gray
1
让构建执行部署步骤对于CI或CD构建来说并不是一种不寻常的做法。虽然我不确定为什么在保存web.config文件或更改bin文件夹时需要显式地回收应用程序池。 - StingyJack
3
如果您正在使用IIS(外部进程)托管ASP.NET Core应用程序,则可能需要执行此操作。在运行时,应用程序文件被锁定,因此您需要停止池、进行部署,然后重新启动。 - Mark Embling
2个回答

50

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

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

以下是停止应用程序池的方法:

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

1
在运行Stop-WebAppPool之前,您需要Import-Module任何内容吗?即使IIS已安装,我仍然遇到了这些命令无法正常工作的问题。 - FilBot3
我现在无法检查,但我猜您首先必须在REMOTE_SERVER上启用IIS的远程管理。 - Andrzej Martyna
2
@Pred 是的,请将以下内容添加到 ScriptBlock 的开头:Import-Module WebAdministration; - DonBecker
5
我在使用以上命令时遇到以下异常:[XXX.XX.X.XX] 连接到远程服务器 XXX.XX.X.XX 失败,并显示以下错误消息:WinRM 客户端无法处理该请求。对于以下情况下的 IP 地址,可以使用默认身份验证:传输是 HTTPS 或目标位于 TrustedHosts 列表中,并且提供了明确的凭据。请使用 winrm.cmd 配置 TrustedHosts。请注意,TrustedHosts 列表中的计算机可能无法进行身份验证。有关如何设置 TrustedHosts 的更多信息,请运行以下命令:winrm... - Velmurugan
我在我的Win10开发机上没有加载WebAdministration,但我能够在一个Server 2012 R2实验环境中执行此操作而没有任何错误。 - AWinkle
我遇到了和@Velmurugan一样的错误。有解决方法吗? - Shiva Naru

16

有时候,为了让应用程序池响应控制消息,您需要添加一个显式等待:

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" }

有没有一种特定的方法来告诉脚本应该使用哪个帐户(服务帐户?)来运行PowerShell? - Taersious

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接