委托非管理员账号回收IIS 7远程应用池的问题

最近客户频繁问到的一个问题是,当用户没有获得管理员权限时,是否能远程地回收一个IIS主机上的应用池。不幸的是,应用池的回收需要管理员权限才能运行。但是,通过使用MSDeploy,我们能设定recycleAPP provider作为委托,并将其运行在提升后的管理员权限下。然后,通过使用一个本地的标准用户账号或者一个IIS管理员账号,我们能在远程调用recylceApp provider,通过这个提升了权限的recycleApp provider,只要此用户在IIS里有应用池的访问权限,就能远程地回收那些应用池了。

可以通过以下步骤解决此问题:

1) 安装或确认IIS管理服务被激活。

2) 安装服务器和远程机器上最新版本的Web Deploy。相关资料见: https://www.iis.net/download/WebDeploy

3) 在服务器端的IIS中,选择管理服务。勾选“启用远程连接”,如果管理服务(WMSVC)正在停止状态,就启动它。

4) 还是在服务器端,选择管理服务委托,然后选择recycleApp provider。我在IIS的机器里建立了一个管理员账号,叫做Recycler,它将得到提升的权限,以回收应用池。

5) 还是在服务器端,选择“IIS管理员用户”并添加所需的用户。在此例中,我添加了IISUser1。现在,到你所希望被允许执行远程回收的站点,在行为面板中选择“IIS管理员权限”和“允许用户”。

6) 最后,我们现在可以从远程机器运行msdeploy命令进行测试。

msdeploy.exe -verb:sync -source:recycleApp -dest:recycleApp="Default Web Site",wmsvc=remote-computer,userName=IISManagerUserName,Password=IISManagerUserPassword,recycleMode="RecyleAppPool" –allowUntrusted

对于我们的例子,我们将运行如下:

注:如果远程机器上没有合法证书,请使用-allowUntrusted标记。这能忽略那些证书错误。

更多关于Web Deploy recycleApp provider的信息见:https://technet.microsoft.com/en-us/library/ee522997(WS.10).aspx

顺带一提,在某些情境,即使你所有配置都正确,你也可能在运行命令时看到如下的信息。

我有一个客户遇到了这个错误,通过测试能够按下面所述的步骤重现。如果没有安装IIS管理服务角色,就安装msdeploy包;或者当msdeploy在服务器上被激活,而管理服务角色被删了然后重装,缺少必要的handle。要解决此问题,只需重装msdeploy即可。

Matthew from APGC DSI Team