gpt4 book ai didi

c# - 如何使用 WMI 读取 IIS 6 网站的目录结构?

转载 作者:行者123 更新时间:2023-11-30 12:53:22 25 4
gpt4 key购买 nike

我需要在 IIS 6.0 中使用 WMI 和 C# 读取网站的文件夹。我能够使用“IISWebVirtualDirSetting”类读取虚拟目录和应用程序。但是,位于网站内部的物理文件夹无法使用此类读取。

对于我的情况,我需要读取位于网站内的子文件夹,然后再对它们设置权限。对于我的要求,我不需要处理虚拟目录/Web 服务应用程序(可以使用下面的代码轻松获得......)。

我曾尝试使用 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;
}

附言:

我需要在 ASP 中使用 WMI 和 C# 以编程方式获取已部署站点的子文件夹。净应用。我需要找出本地或远程 IIS 6.0 Web 服务器中现有网站的子文件夹。所以我需要一个程序化的解决方案。准确地说,如果我指向正确的类(如 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;
}

问候

最佳答案

没关系。我自己得到的。如果目录结构在本地系统上,则需要 System.IO.DirectoryInfo。使用远程处理同样可以用于远程服务器。

引用: http://msdn.microsoft.com/en-us/library/system.io.directoryinfo.aspx

如果 WMi 必须存在,则 Win32_Directory 是应该在查询中使用的类:

"Select * from Win32_directory where drive ='"+ DriveLetter +":' and Path ='%" + MyPath + "%'";

引用: http://msdn.microsoft.com/en-us/library/aa394130(VS.85).aspx

关于c# - 如何使用 WMI 读取 IIS 6 网站的目录结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2521247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com