use*_*986 6 c# active-directory ou directorysearcher
我想在C#中找到我的计算机所属的最具体的OU.我有代码可以获得我需要的信息,但它感觉不健壮,需要复杂的解析.还有更好的选择吗?思考?任何帮助表示赞赏!
真的我想要的是命令提示符命令的等效:
dsquery computer -name COMP-HERE
Run Code Online (Sandbox Code Playgroud)
但我需要在C#中使用它,这被证明是有问题的.
DirectorySearcher d = new DirectorySearcher("CN=COMP-HERE");
d.PropertiesToLoad.Add("adspath");
SearchResultCollection results = d.FindAll();
foreach (SearchResult searchResult in results) {
foreach (string propertyKey in searchResult.Properties.PropertyNames) {
ResultPropertyValueCollection valueCollection = searchResult.Properties[propertyKey];
foreach (Object propertyValue in valueCollection) {
Console.WriteLine(
"{0}:{1}",
propertyKey,
propertyValue.ToString());
}
}
}
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
这是在命名空间中使用PrincipalContextand的解决方案ComputerPrincipalSystem.DirectoryServices.AccountManagement
string machineOU;
using (var context = new PrincipalContext(ContextType.Domain))
using (var comp = ComputerPrincipal.FindByIdentity(context, Environment.MachineName))
{
machineOU = String.Join(",", comp.DistinguishedName.Split(',')
.SkipWhile(s => !s.StartsWith("OU="))
.ToArray());
}
Run Code Online (Sandbox Code Playgroud)
Linq 对机器专有名称的处理将其拆分为组成元素,跳过第一个OU=...元素之前的所有元素,然后重新组合其余元素,从而为您留下包含 OU 的专有名称。
更多信息
命名空间中的类System.DirectoryServices.AccountManagement提供了各种类型的安全主体(帐户)的相当高级的抽象。
它PrincipalContext基本上是帐户存储库的抽象。它可以指计算机的帐户数据库 ( PrincipalType.Machine)、Active Directory 域或全局目录 ( PrincipalType.Domain),或者 Active Directory 应用程序分区 ( PrincipalType.ApplicationDirectory)。
new PrincipalContext(ContextType.Domain)创建PrincipalContext代表本地 Active Directory 域。
一旦我们获得了这个上下文,我们就可以使用FindBy...()各种主要类型(可以是UserPrincipal、ComputerPrincipal或GroupPrincipal)上的静态方法来查找我们正在寻找的 AD 对象。
| 归档时间: |
|
| 查看次数: |
14611 次 |
| 最近记录: |