2

这个问题非常类似于Halt batch file until service stop is complete? 但我想停止一个网站。我目前appcmd stop sites "siteName"在脚本中,但批处理文件只是发出停止命令并继续。我希望批处理文件等到站点停止后再继续。我正在运行 Windows Server 2008。

4

3 回答 3

0

我不知道如何使用批处理文件让它工作。像这样的东西可能会起作用:

:LoopWhileNotStopped

for /f "delims=" %x in ('appcmd list site "siteName"') do set siteInfo="%x"

IF NOT %siteInfo:~-16% == "state:Stopped)"
    GOTO :LoopWhileNotStopped

但我不知道如何修改set siteInfo="%x"命令,使其适用于appcmd命令的输出。问题似乎是appcmd输出包含双引号,并且在执行变量扩展时干扰了命令解释。

这是一个应该可以工作的 PowerShell 脚本:

C:\Windows\System32\inetsrv\appcmd.exe stop site "siteName"

do { Start-Sleep -s 1; $siteInfo = C:\Windows\System32\inetsrv\appcmd.exe list site "siteName" } until ($siteInfo -match "state:Stopped")
于 2015-03-13T14:06:36.360 回答
-1

appcmd无论如何都会立即返回?这可能会起作用,具体取决于 appcmd 的行为方式。

start /wait "site stop" appcmd stop sites "siteName"

如果appcmd是一个脚本,您可能可以修复它,使其不会立即返回。

您使用的是什么网络服务器?

于 2013-07-18T22:33:16.577 回答
-1

如果您使用的是 APPCMD,显然您使用的是 IIS 7 或更新版本。

  1. 我认为您的意思是站点而不是站点。
  2. 您的路径中可能有另一个文件名 APPCMD。输入 APPCMD /? 看看你是否正在执行你的想法。
  3. 试试这个以确保您正在执行所需的 APPCMD:

    "%windir%\system32\inetsrv\appcmd.exe" 停止站点 "siteName"

于 2013-07-18T22:41:00.540 回答