调用 AppCmd 时 PsExec 间歇性挂起

调用 AppCmd 时 PsExec 间歇性挂起

我们有一个自动部署过程,主要由批处理文件管理。该过程的第一步是停止 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

环境变量的位置(这些不是实际值,仅用于说明):

  • 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呼叫间歇性停止?

答案1

使用 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

相关内容