Как прочитать структуру каталогов веб-сайта IIS 6 с помощью WMI?

Мне нужно читать папки сайта используя WMI и C # в IIS 6.0. Я могу читать виртуальные каталоги и приложения, используя класс «IISWebVirtualDirSetting». Тем не менеефизические папки, расположенные внутри веб-сайта, не могут быть прочитаны с использованием этого класса.

И для моего случая мне нужно прочитать подпапки, расположенные на сайте и позже установил разрешение на них. Для моих требований мне не нужно работать с виртуальными каталогами / приложениями веб-служб (которые можно легко получить с помощью кода ниже ..).

Я пытался использовать класс IISWebDirectory, но это было полезно.

Вот код, который читает виртуальные каталоги IIS ...

public static ArrayList RetrieveVirtualDirList(String ServerName, String WebsiteName)
{
    ConnectionOptions options = SetUpAuthorization();
    ManagementScope scope = new ManagementScope(string.Format(@"\\{0}\root\MicrosoftIISV2", ServerName), options);
    scope.Connect();
    String SiteId = GetSiteIDFromSiteName(ServerName, WebsiteName);
    ObjectQuery OQuery = new ObjectQuery(@"SELECT * FROM IISWebVirtualDirSetting");
    //ObjectQuery OQuery = new ObjectQuery(@"SELECT * FROM IIsSetting");

    ManagementObjectSearcher WebSiteFinder = new ManagementObjectSearcher(scope, OQuery);
    ArrayList WebSiteListArray = new ArrayList();
    ManagementObjectCollection WebSitesCollection = WebSiteFinder.Get();
    String WebSiteName = String.Empty;
    foreach (ManagementObject WebSite in WebSitesCollection)
    {
        WebSiteName = WebSite.Properties["Name"].Value.ToString();
        WebsiteName = WebSiteName.Replace("W3SVC/", "");
        String extrctedSiteId = WebsiteName.Substring(0, WebsiteName.IndexOf('/'));
        String temp = WebsiteName.Substring(0, WebsiteName.IndexOf('/') + 1);
        String VirtualDirName = WebsiteName.Substring(temp.Length);
        WebsiteName = WebsiteName.Replace(SiteId, "");
        if (extrctedSiteId.Equals(SiteId))
        //if (true)
        {
            WebSiteListArray.Add(VirtualDirName );
            //WebSiteListArray.Add(WebSiteName);
            //+ "|" + WebSite.Properties["Path"].Value.ToString()
        }
    }
    return WebSiteListArray;
}

P.S:

Мне нужно программно получить подпапки уже развернутых сайтов, используя WMI и C # в ASP. Сетевое приложение. Мне нужно найти подпапки существующих веб-сайтов на локальном или удаленном веб-сервере IIS 6.0. Поэтому мне нужно программное решение. Точно, если я указываю на правильный класс (например, IISWebVirtualDirSetting и т. Д.), Который я могу использовать для получения списка физических папок на веб-сайте, это будет весьма полезно.

Я не работаю в Powershell, и мне действительно не нужно решение, которое включает powershell или vbscripts.

Любой альтернативный программный способ сделать то же самое в C # / ASP.Net также будет высоко оценен.

РЕДАКТИРОВАТЬ:

GetSiteIdFromSiteName

Код может выглядеть так:

public static int GetSiteIdFromSiteName(String ServerName, String WebsiteName)
{
    ConnectionOptions options = SetUpAuthorization();
    ManagementScope scope = new ManagementScope(string.Format(@"\\{0}\root\MicrosoftIISV2", ServerName), options);
    scope.Connect();
    ObjectQuery OQuery = new ObjectQuery(@"SELECT * FROM IIsSetting");

    ManagementObjectSearcher WebSiteFinder = new ManagementObjectSearcher(scope, OQuery);
    ArrayList WebSiteListArray = new ArrayList();
    ManagementObjectCollection WebSitesCollection = WebSiteFinder.Get();
    String WebSiteName = String.Empty;
    foreach (ManagementObject WebSite in WebSitesCollection)
    {
        WebSiteName = WebSite.Properties["Name"].Value.ToString();
        WebsiteName = WebSiteName.Replace("W3SVC/", "");
        String extrctedSiteId = WebsiteName.Substring(0, WebsiteName.IndexOf('/'));
        break;  
    }
    return extrctedSiteId;
}

а также

SetupAuthorization ()

Вот функция настройки Авторизации.

    public ConnectionOptions SetUpAuthorization()
{ 
        ConnectionOptions options = new ConnectionOptions();
    //options.Authentication = AuthenticationLevel.Connect; 
    //may need to set Packetprivacy enum
    options.Authentication = AuthenticationLevel.PacketPrivacy; 
    options.EnablePrivileges = true; 
    options.Impersonation = ImpersonationLevel.Impersonate; 

     return options;
 } 

С уважением

Ответы на вопрос(2)

Ваш ответ на вопрос