调用AppCmd时,PsExec会间歇性地挂起

我们有一个主要由batch filepipe理的自动部署过程。 该过程的第一步就是停止IIS AppPool,以便可以安全地复制已更新的文件。 为此,我们把PsExec称为:

PsExec.exe -accepteula %WEB_SERVER_MACHINE_NAME% cmd /c %%systemroot%%\system32\inetsrv\AppCmd.exe stop apppool /apppool.name:"%APP_POOL_NAME%" 2>&1 

环境variables(这些不是实际值,仅用于说明):

  • WEB_SERVER_MACHINE_NAME=\\WEBSERVER01
  • APP_POOL_NAME=APP01

整个部署过程通常只需要几分钟的时间。 然而,似乎有时似乎是随机的,这个过程卡在这一步,似乎无限期地等待。 如果在此过程中检查Web服务器,则AppPool不会停止,手动停止AppPool将不起作用。 有6个不同的网站需要部署,这可能发生在任何一个网站上。

我也尝试禁用自动启动像这样:

 PsExec.exe -accepteula %WEB_SERVER_MACHINE_NAME% cmd /c %%systemroot%%\system32\inetsrv\AppCmd.exe set apppool /apppool.name:"%APP_POOL_NAME%" /autoStart:false 2>&1 

有时候,有时候这个步骤似乎会停滞不前。 所以,这似乎是PsExec而不是AppCmd 。 我也尝试指定连接超时到PsExec以及在cmd调用结束时链接出口,如下所示:

 PsExec.exe -accepteula -n 60 %WEB_SERVER_MACHINE_NAME% cmd /c %%systemroot%%\system32\inetsrv\AppCmd.exe stop apppool /apppool.name:"%APP_POOL_NAME%" ^& exit 0 2>&1 

有没有人遇到过这个问题? 什么可能导致这个PsExec调用间歇性失速?

使用WMIC似乎更可靠(虽然不完美)。 这是我最终使用的:

 wmic /node:"%WEB_SERVER_MACHINE_NAME%" /namespace:\\root\WebAdministration path ApplicationPool where name='%APP_POOL_NAME%' call start wmic /node:"%WEB_SERVER_MACHINE_NAME%" /namespace:\\root\WebAdministration path ApplicationPool where name='%APP_POOL_NAME%' set AutoStart=true