我有一个Active Directory域的DNS名称,我想获得该域的域名sid。我怎么能这样做?
我已经拥有以下内容:
var domainContext =
new DirectoryContext(DirectoryContextType.Domain, domainDnsName);
var domain = Domain.GetDomain(domainContext);
var dc = domain.DomainControllers.OfType<DomainController>().FirstOrDefault();
但是我有点卡在这里(也许我跟着错误的路线)。
答案 0 :(得分:6)
你想要的是这样的:
DirectoryEntry domainEntry = domain.GetDirectoryEntry();
byte[] domainSid = domainEntry.Properties["objectSID"].Value as byte[];
SecurityIdentifier strongDomainSid = new SecurityIdentifier(domainSid, 0);
答案 1 :(得分:0)
如果您使用的是本机代码。
为所需的域构建ldap查询字符串。例如。 “ LDAP://fabrikam.com”(不必采用区别形式,例如“ LDAP://DC=fabrikam,DC.com” 1 )>
String path = "LDAP://fabrikam.com";
获取代表域的ADs
对象
IADs domain = ADsGetObject(path);
获取域对象的objectSid
字节数组属性:
Variant objectSid = domain.Get("objectSid");
将二进制sid转换为字符串:
Pointer p = SafeArrayAccessData(objectSid);
String domainSid = ConvertSidToStringSid(p);
哪个会返回给您漂亮的域sid:
String GetDomainSid(String domainName)
{
Variant objectSid = ADSGetObject(domainName).Get("objectSid");
Pointer p = SafeArrayAccessData(objectSid);
String domainSid = ConvertSidToStringSid(p);
SafeArrayUnaccessData(objectSid);
return domainSid;
}
GetDomainSid("fabrikam.com") ==> "S-1-5-21-1708537768-844245398-2146844275"