Я пытаюсь получить список веб-сайтов на сервере IIS 6 в таблицу SQL-Server.Я знаю, что могу получить его с помощью WMI и т. Д., Но для этого потребуется дополнительная служба, работающая на коробке, в то время как я смогу найти информацию, получив процедуру анализа файла MetaBase.xml с использованием OPENXML.
Для тех из вас, кто не знаком с MetaBase.xml, соответствующие разделы выглядят примерно так:
<configuration xmlns="urn:microsoft-catalog:XML_Metabase_V64_0">
<MBProperty>
<IIsWebDirectory Location="/LM/W3SVC/1/ROOT/MySite1" AppFriendlyName="MySite1" AppIsolated="2" AppPoolId="MySite1" AppRoot="/LM/W3SVC/1/ROOT/MySite1" DontLog="TRUE">
</IIsWebDirectory>
<IIsWebDirectory Location="/LM/W3SVC/1/ROOT/MySite2" AppFriendlyName="MySite2" AppIsolated="2" AppPoolId="MySite2" AppRoot="/LM/W3SVC/1/ROOT/MySite2" DontLog="TRUE">
</IIsWebDirectory>
</MBProperty>
</configuration>
Я использую следующий SQL, чтобы попытаться разобрать его:
DECLARE @XMLPath VARCHAR(MAX)
SELECT @XMLPath = 'C:\Temp\MetaBase.xml'
DECLARE @RawXML XML, @sql NVARCHAR(4000), @params NVARCHAR(4000), @handle INT
SELECT @sql = N'SELECT @res = (SELECT * FROM OPENROWSET (BULK '''+ @XMLPath +''', SINGLE_BLOB)x)'
SELECT @params = N'@res XML OUTPUT'
EXEC sp_executesql @sql, @params, @res = @RawXML OUTPUT
SELECT @RawXML
EXEC sp_xml_preparedocument @handle OUTPUT, @RawXML
SELECT *
FROM OPENXML(@handle, 'MBProperty/IISWebDirectory', 3) WITH (AppFriendlyName VARCHAR(800), Location VARCHAR(800), AppRoot VARCHAR(800), AppPoolId VARCHAR(800), DefaultDoc VARCHAR(800))
EXEC sp_xml_removedocument @handle
Я вижу, что XML правильно загружен в @RawXML, но ничего не получает из запроса OPENXML.Я предполагаю, что это как-то связано с путем, но я пробовал несколько комбинаций (например, «configuration / MBProperty / IISWebDirectory») безрезультатно.