Ale*_*exR 2 c# api properties principal
我想创建一个这样的Principal:
PrincipalContext pc = new PrincipalContext(ContextType.Machine);
GroupPrincipal group = new GroupPrincipal(pc);
group.Name = "Some Group Name";
group.Description = "Some Group Name Description";
group.Save();
Run Code Online (Sandbox Code Playgroud)
但是,当代码执行时,我收到以下异常消息:
System.DirectoryServices.AccountManagement:属性对此商店类型无效.
如果我没有设置Description属性,上面的代码完全正常,只是没有组的描述.
难道我做错了什么?
提前致谢.
编辑: 我相信我找到了一个解决方案(对于任何可能感兴趣的人).可以使用与上面相同的方式创建组:
PrincipalContext pc = new PrincipalContext(ContextType.Machine);
GroupPrincipal group = new GroupPrincipal(pc);
group.Save();
Run Code Online (Sandbox Code Playgroud)
现在您创建一个DirectoryEntry并将其链接到新创建的组,如下所示:
string path = "WinNT://" + machineName + "/" + group.SamAccountName;
DirectoryEntry dEntry = new DirectoryEntry(path);
Run Code Online (Sandbox Code Playgroud)
这允许访问该组的属性,但我感兴趣的是描述,所以:
dEntry.Properties["description"].Add("Some Decription");
dEntry.CommitChanges();
Run Code Online (Sandbox Code Playgroud)
这应该做到这一点.
答案重写
我有你的答案,但你可能不喜欢它.互联网上的信息很少,但在代码中,它是可以解释的:
在SAMStoreCtx中,有一段代码如下(Reflector输出):
internal override bool IsValidProperty(Principal p, string propertyName)
{
ObjectMask none = ObjectMask.None;
if (!ValidPropertyMap.TryGetValue(propertyName, out none))
{
return false;
}
if ((MaskMap[p.GetType()] & none) <= ObjectMask.None)
{
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)none使用和运算符进行比较的行总是会产生ObjectMask.None.第二个if语句总是如此.我相信这是Microsoft库中的一个错误.它只发生在SAMStoreCtx上.也许它是有目的的,但因为代码存在但总是返回false使我相信程序员打算使用or-operator代替.使用DisplayName等其他属性检查我的发现会引发与预期相同的异常.
您可以与Microsoft联系并向他们展示此主题.我没有检查.NET 4.0的新版本,它可能会以不同的方式显示出来.您可以通过下载Reflector并加载相关的.NET程序集来自行检查.
编辑:我已经为您联系了Microsoft,并在此处通过connect.microsoft.com报告了该错误.如果您愿意,可以在那里关注问题.
| 归档时间: |
|
| 查看次数: |
2147 次 |
| 最近记录: |