Мне нужно прочитать папки веб-сайта , используя 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 также будет высоко оценен.
EDIT:
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;
}
Привет