如何使用WMI读取IIS 6网站的目录结构?
我需要在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}rootMicrosoftIISV2", 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; }
PS:
我需要以编程方式在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}rootMicrosoftIISV2", 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()
这是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
你看过Web部署工具了吗?
https://www.iis.net/expand/WebDeploy
能够打包ACL,COM,GAC和注册表设置。
上述就是C#学习教程:如何使用WMI读取IIS 6网站的目录结构?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/951190.html