gpt4 book ai didi

c# - 如何找到计算机所属的组织单位? (事件目录 C#)

转载 作者:太空狗 更新时间:2023-10-29 21:51:16 25 4
gpt4 key购买 nike

我想在 C# 中找到我的计算机所属的最具体的 OU。我有可以获取我需要的信息的代码,但它感觉不够健壮并且需要复杂的解析。有更好的选择吗?想法?感谢您的帮助!

我真正想要的是一个等同于命令提示符的命令:

dsquery computer -name COMP-HERE

但我在 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();

最佳答案

这是在 System.DirectoryServices.AccountManagement 命名空间中使用 PrincipalContextComputerPrincipal 的解决方案

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());
}

机器可分辨名称的 Linq 处理将其拆分为它的组成元素,跳过第一个 OU=... 元素之前的任何元素,然后重新组合其余部分。包含 OU 的名称。

更多信息

System.DirectoryServices.AccountManagement 命名空间中的类提供了各种类型的安全主体(帐户)的相当高级的抽象。

PrincipalContext 基本上是帐户存储库的抽象。它可以引用计算机的帐户数据库 (PrincipalType.Machine)、Active Directory 域或全局目录 (PrincipalType.Domain) 或 Active Directory 应用程序分区 (PrincipalType.ApplicationDirectory).

new PrincipalContext(ContextType.Domain) 创建一个代表本地 Active Directory 域的 PrincipalContext

一旦我们获得了这个上下文,我们就可以在各种主体类型(可以是 UserPrincipalComputerPrincipal)上使用 FindBy...() 静态方法GroupPrincipal) 来找到我们正在寻找的 AD 对象。

关于c# - 如何找到计算机所属的组织单位? (事件目录 C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11768775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com