我希望能够在登录 Windows Server 2008 R2 (x64) 桌面后快速检查网站是否在线。我希望只需单击或双击一次(或者更好的是,根本不需要单击)即可完成此操作,而不必浏览 IIS 管理器的树结构。
我可以创建 IIS 管理器的快捷方式并将其放在我的桌面上,但如何强制它打开到 SERVERNAME/Sites 视图,而不是单击几次才能到达那里?
如果无法做到这一点,是否有其他方法可以不进行编程,为我想要放置的每个站点放置一个“在线/离线”指示器(最好在系统托盘或桌面上)?
如果我不得不通过编程来实现这个看似简单的功能,那么如何才能让特定 IIS 网站的状态(启动或停止)显示在我的自定义程序中?我需要读取哪些 API、文件或注册表项才能获取此状态信息?
更新
我发现有人使用 appcmd.exe IIS 实用程序的 .bat 文件。在阅读了有关 appcmd.exe 实用程序的 MSDN 文档后,经过反复尝试,我终于能够拼凑出以下可以完美完成这项工作的 .bat 文件。手头的任务只是从桌面上单击 2 次或更少的次数即可获取一个站点(或多个站点)的状态。
@echo off
:Status
Set STATUS1=MAINTENANCE
FOR /F "tokens=*" %%A IN ('%SystemRoot%\System32\inetsrv\appcmd list site /site.name:www.mysite1.com /text:state ^| FIND "Started"') DO SET STATUS1=STARTED
Set STATUS2=MAINTENANCE
FOR /F "tokens=*" %%A IN ('%SystemRoot%\System32\inetsrv\appcmd list site /site.name:www.mysite2.com /text:state ^| FIND "Started"') DO SET STATUS2=STARTED
echo www.mysite1.com: %STATUS1%
echo www.mysite2.com: %STATUS2%
pause
不幸的是,该实用程序没有很好的记录 - 我不得不对其进行大量修改才能获得我想要的结果。
%SystemRoot%\System32\inetsrv\appcmd list site /site.name:www.mysite1.com
这行代码用于获取状态,但这样运行还会返回一堆其他内容。因此,为了只获取状态而不获取其他内容,必须添加另一个参数。
%SystemRoot%\System32\inetsrv\appcmd list site /site.name:www.mysite1.com /text:state
按照链接中的示例,我还可以组合一个菜单,通过按下一个键然后按 ENTER 键立即启动和停止站点,然后再次显示站点的状态 - 所有这些都来自一个 .bat 文件。
答案1
如果您启用了“IIS 管理脚本和工具”,则可以使用 PowerShell 显示站点的状态。我在专用的 PowerShell 窗口中使用了如下脚本:
do
{
clear-host
Get-ChildItem IIS:\sites | format-table state, name
$curPos = $Host.UI.RawUI.CursorPosition
$ou = (Get-Date).ToString("HH:mm:ss")
$ou = " " + $ou + " - Press CRTL+C to terminate"
$Host.UI.Write($ou)
$Host.UI.RawUI.CursorPosition=$curPos
Start-Sleep -Seconds 5
} until ($false)
线路
Get-ChildItem IIS:\sites | 格式表状态
做真正的工作,其余的只是让输出不滚动。它每五秒更新一次。
答案2
很抱歉,答案是否定的。请查看此处的配置参考:http://www.iis.net/configreference或此处的 cmdlet 参考:http://technet.microsoft.com/en-us/library/ee790599.aspx
我查看了 XML 文件,但没有任何内容允许您选择从哪里开始。他们确实应该添加这个。
答案3
你试过吗appcmd.exe list sites
,输出是这样的
SITE "Default Web Site" (id:1,bindings:http/*:80:,state:Started)
您可以参考文章