我无法理解为什么在Active Directory中为groupType创建“本地”组不起作用。它会引发以下异常:
System.DirectoryServices.DirectoryServicesCOMException (0x80072035): The server is unwilling to process the request.
下面是代码示例:
var parentEntry = new DirectoryEntry(ParentContainer);
var groupToCreate = parentEntry.Children.Add(this.AttributeType + this.Name, "group");
groupToCreate.Properties["description"].Add(this.Description);
groupToCreate.Properties["displayName"].Add(Name);
groupToCreate.Properties["groupType"].Add((int)GroupType.DomainLocalGroup); --> this line throws error.
groupToCreate.CommitChanges();
如果我从GroupType.DomainLocalGroup更改为GroupType.DomainGlobalGroup,则一切正常。 任何人都可以让我知道如何摆脱这个问题吗?
答案 0 :(得分:1)
According to Microsoft,这是定义组类型枚举的方式:
但这也是一个标志枚举-表示可以通过将它们加在一起来组合值。所以是的,0x80000004
实际上是一个有效值,表示“域本地安全组”。 (0x4
是域本地通讯组)
但是您必须将其强制转换为整数(不允许您将其设置为十六进制值)。我很惊讶您遇到的异常是“服务器不愿意处理请求”,因为当我这样做时:
(int) 0x80000004
我收到此编译器错误:
CS0221:常量值“ 2147483652”不能转换为“ int”(使用“ unchecked”语法覆盖)
这是因为0x80000004
的十进制值为2147483652,不适合32位整数。
但是您需要给它一个32位整数(不能只转换为long
)。因此,您必须遵循建议并在投射时使用unchecked
:
unchecked((int) 0x80000004)
哪一个十进制值为-2147483644。
因此您的代码应如下所示:
groupToCreate.Properties["groupType"].Add(unchecked((int) GroupType.DomainLocalGroup));