天天看點

C# + WMI 管理IIS之:指定匿名通路使用者

指定匿名通路使用者,IIS6比較簡單,在IIsWebVirtualDirSetting有兩個屬性可以設定到:AnonymousUserName、AnonymousUserPass,代碼如下

ConnectionOptions co = new ConnectionOptions();
co.Authentication = AuthenticationLevel.PacketPrivacy;
ManagementPath iisPath = new ManagementPath();
iisPath.NamespacePath = @"root/MicrosoftIISv2";
ManagementScope scope = new ManagementScope(iisPath, co);
scope.Connect();

string website="esintest6" ;//站點名
int siteId=1;//站點Id,IIS6很多操作都需要得到該ID才能繼續
//擷取website
ObjectQuery query = new ObjectQuery(
string.Format(@"SELECT Name FROM IIsWebServerSetting where ServerComment='{0}' ", website));
ManagementObjectSearcher searcher =new ManagementObjectSearcher(scope, query);

ManagementObjectCollection queryCollection = searcher.Get();
foreach (ManagementObject mo in queryCollection)
{
    siteId = mo.Properties["Name"].Value.ToString().Replace("W3SVC/", "");
     break;
 }//開始設定
ManagementObject siteObj=new ManagementObject(Scope,new ManagementPath(string.Format(
                              @"{0}.Name='{1}'", "IIsWebServerSetting ",  string.Format("W3SVC/{0}/root", siteId))), null);
siteObj.Properties["AnonymousUserName"].Value = "iusr_esintest6";//這裡是系統使用者
siteObj.Properties["AnonymousUserPass"].Value = "[email protected]#edc";//對應的密碼
siteObj.Put();
           

IIS7相對複雜一點,是通過AnonymousAuthenticationSection 類型來設定的(研究了大半天才發現這個用法,太感謝這個 http://forums.iis.net/t/1150268.aspx了)。

ConnectionOptions co = new ConnectionOptions();
co.Authentication = AuthenticationLevel.PacketPrivacy;
ManagementPath iisPath = new ManagementPath();
iisPath.NamespacePath = @"root/webadministration";
ManagementScope scope = new ManagementScope(iisPath, co);
scope.Connect();

string website="esintest6" ;//站點名

//開始設定
ManagementObject website = new ManagementObject(scope, new ManagementPath(string.Format("Site.name='{0}'",website)), null);
ManagementBaseObject inParams = website.GetMethodParameters("GetSection");
inParams["SectionName"] = "AnonymousAuthenticationSection";
ManagementBaseObject oo = website.InvokeMethod("GetSection", inParams, null) as ManagementBaseObject;
ManagementBaseObject returnedSection = oo["Section"] as ManagementBaseObject;
ManagementObject retval = new ManagementObject(scope, new ManagementPath("AnonymousAuthenticationSection.Path='" +
       returnedSection["Path"].ToString().Replace("/"+website, "") + "',Location='"+website+"'"), null);
retval.Get();

retval.Properties["Enabled"].Value = true;
retval.Properties["Location"].Value = website;
retval.Properties["UserName"].Value = "iusr_esintest6";//這裡是系統使用者
retval.Properties["Password"].Value = "[email protected]#edc";//對應的密碼

retval.Put();
           

搞掂^_^

上一篇: 用C#建立XML