如何使用 System.Directory.AccountManagement 将扩展 UserPrincipal 数组 属性 设置为空
How can I set an Extended UserPrincipal Array Property as empty with System.Directory.AccountManagement
如标题中所述,我正在使用帐户管理的主要扩展 API 来获取和设置自定义 AD 用户属性。其中两个自定义属性是字符串数组。我现在遇到的问题是,每当我尝试将 属性 设置为空数组时,我都会收到错误消息。
我的扩展 UserPrincipal 如下所示:
[DirectoryRdnPrefix("CN")]
[DirectoryObjectClass("user")]
class UserPrincipalEx : UserPrincipal
{
public UserPrincipalEx(PrincipalContext context) : base(context) { }
public UserPrincipalEx(PrincipalContext context, string samAccountName, string password, bool enabled):base(context, samAccountName, password, enabled) { }
[DirectoryProperty("course")]
public string[] course
{
get
{
int len = ExtensionGet("course").Length;
string[] courses = new string[len];
object[] coursesRaw = ExtensionGet("course");
for (int i = 0; i < len; i++)
{
courses[i] = (string)coursesRaw[i];
}
return courses;
}
sset
{
this.ExtensionSet("course", value);
}
}
[DirectoryProperty("interested")]
public string[] interested
{
get
{
int len = ExtensionGet("interested").Length;
string[] interested = new string[len];
object[] interestedRaw = ExtensionGet("interested");
for (int i = 0; i < len; i++)
{
interested[i] = (string)interestedRaw[i];
}
return interested;
}
set
{
this.ExtensionSet("interested", value);
}
}
public static new UserPrincipalEx FindByIdentity(PrincipalContext context, string identityValue)
{
return (UserPrincipalEx)FindByIdentityWithType(context, typeof(UserPrincipalEx), identityValue);
}
public static new UserPrincipalEx FindByIdentity(PrincipalContext context, IdentityType identityType, string identityValue)
{
return (UserPrincipalEx)FindByIdentityWithType(context, typeof(UserPrincipalEx), identityType, identityValue);
}
}
我正在尝试像这样设置属性:
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, Settings.Default.DCName))
{
UserPrincipalEx exUser = UserPrincipalEx.FindByIdentity(pc, newMailUser.Name);
exUser.interested = CourseInterested.ToStringArray(newMailUser.CInterested);
exUser.course = CourseVisited.ToStringArray(newMailUser.CVisited);
exUser.Save(pc);
}
ToStringArray
方法return 一个带有值或空值的字符串数组。当 newMailUser.CInterested
或 newMailUser.CVIsited
没有条目并且空字符串数组被 return 编辑时代码失败,并显示错误消息“Collections whoes elements are another collection cannot由 ExtensionClasses 设置。”而且错误说它发生在扩展 属性 ExtensionSet("property", value)
的设置方法中
我使用了 this microsoft example. I also tried this 方法,但遗憾的是它对我不起作用。
如果有人愿意提供帮助,我将不胜感激。
好吧,这比我想象的要容易得多。如果 newMailUser.CInterested
或 newMaliUser.CVisited
中没有条目,我只需要从我的 ToStringArray
方法中 return null
因为 ExtensionSet
方法没有问题null
.
如标题中所述,我正在使用帐户管理的主要扩展 API 来获取和设置自定义 AD 用户属性。其中两个自定义属性是字符串数组。我现在遇到的问题是,每当我尝试将 属性 设置为空数组时,我都会收到错误消息。
我的扩展 UserPrincipal 如下所示:
[DirectoryRdnPrefix("CN")]
[DirectoryObjectClass("user")]
class UserPrincipalEx : UserPrincipal
{
public UserPrincipalEx(PrincipalContext context) : base(context) { }
public UserPrincipalEx(PrincipalContext context, string samAccountName, string password, bool enabled):base(context, samAccountName, password, enabled) { }
[DirectoryProperty("course")]
public string[] course
{
get
{
int len = ExtensionGet("course").Length;
string[] courses = new string[len];
object[] coursesRaw = ExtensionGet("course");
for (int i = 0; i < len; i++)
{
courses[i] = (string)coursesRaw[i];
}
return courses;
}
sset
{
this.ExtensionSet("course", value);
}
}
[DirectoryProperty("interested")]
public string[] interested
{
get
{
int len = ExtensionGet("interested").Length;
string[] interested = new string[len];
object[] interestedRaw = ExtensionGet("interested");
for (int i = 0; i < len; i++)
{
interested[i] = (string)interestedRaw[i];
}
return interested;
}
set
{
this.ExtensionSet("interested", value);
}
}
public static new UserPrincipalEx FindByIdentity(PrincipalContext context, string identityValue)
{
return (UserPrincipalEx)FindByIdentityWithType(context, typeof(UserPrincipalEx), identityValue);
}
public static new UserPrincipalEx FindByIdentity(PrincipalContext context, IdentityType identityType, string identityValue)
{
return (UserPrincipalEx)FindByIdentityWithType(context, typeof(UserPrincipalEx), identityType, identityValue);
}
}
我正在尝试像这样设置属性:
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, Settings.Default.DCName))
{
UserPrincipalEx exUser = UserPrincipalEx.FindByIdentity(pc, newMailUser.Name);
exUser.interested = CourseInterested.ToStringArray(newMailUser.CInterested);
exUser.course = CourseVisited.ToStringArray(newMailUser.CVisited);
exUser.Save(pc);
}
ToStringArray
方法return 一个带有值或空值的字符串数组。当 newMailUser.CInterested
或 newMailUser.CVIsited
没有条目并且空字符串数组被 return 编辑时代码失败,并显示错误消息“Collections whoes elements are another collection cannot由 ExtensionClasses 设置。”而且错误说它发生在扩展 属性 ExtensionSet("property", value)
我使用了 this microsoft example. I also tried this 方法,但遗憾的是它对我不起作用。
如果有人愿意提供帮助,我将不胜感激。
好吧,这比我想象的要容易得多。如果 newMailUser.CInterested
或 newMaliUser.CVisited
中没有条目,我只需要从我的 ToStringArray
方法中 return null
因为 ExtensionSet
方法没有问题null
.