1

如何使用批处理文件在 IIS6 中获取网站的根/主目录?

我的场景:

我正在创建一个工具来总结和报告 IIS 中的站点。我正在使用批处理文件并运行 iisweb /query 来获取所有站点,然后循环遍历结果并使用 iisvdir /query "Website Name" 来获取虚拟目录。

但是它必须与 IIS6 向后兼容,并且我无法获取该站点的主目录。

4

2 回答 2

2

我认为您不能直接从批处理文件中执行此操作,但您应该能够从可以从批处理文件中调用的 vbscript 执行此操作。

诀窍是使用IIS WMI 提供程序,它使您可以访问 IIS 元数据库。例如,下面的脚本应该回显本地服务器上每个虚拟目录的名称和路径。

set provider = GetObject("winmgmts://localhost/root/MicrosoftIISv2") 
set results = provider.ExecQuery("SELECT Name,Path from IISWebVirtualDirSetting")
for each item in results
  WScript.Echo item.Name
  WScript.Echo item.Path
next

如果将此脚本保存为iispaths.vbs(仅作为示例),则可以从批处理文件中调用它:

cscript //nologo iispaths.vbs

不幸的是,我无法访问带有 IIS6 的机器,所以我目前无法对此进行测试,但如果您在让它工作时遇到任何问题,请随时在评论中告诉我,我会尽我所能最好解决问题。

于 2013-07-24T12:05:37.017 回答
1

我没有 IIS6 服务器,但是,通过一些搜索,我发现:

  1. IIS6用于存储配置(%SystemRoot%\system32\inetsrv\MetaBase.xmlIIS Metabase (IIS 6.0));%SystemRoot%\system32\inetsrv\MBSchema.xml
  2. 如果您的服务器不经常更改主目录,则应该更新这些 xml;
  3. 使用命令行解析器(如xmlstartlet ),您可以使用XPath从节点(根据Metabase Structure )提取Path属性。IIsWebVirtualDir

使用 xmlstartlet,如下所示的命令将输出根路径:

xml sel -t -v "//IIsWebVirtualDir[@Location='/LM/W3SVC/1/ROOT']/@Path" "%SystemRoot%\system32\inetsrv\MetaBase.xml"

也许架构需要更正。这可以是命令行方法。我无法测试它,因为我没有任何 IIS6 服务器,也无法获得任何 MetaBase.xml 示例。

于 2013-07-29T13:37:17.113 回答