Active Directoryが正しく設定されていると仮定して、2人が同じ場所にいるかどうかを判断する方法を見つけようとしています。私が頭を包むことができた唯一の方法は、彼らのディレクトリエントリが同じOUにあるかどうかを判断する方法を見つけることです。だから現在、これは私が現時点で唾を吐いているものです:
private bool ComparePeople()
{
var user1Guid = "aaa";
var user2Guid = "bbb";
var expr = @"CN=.*?,";
var user1OU = Regex.Replace(GetUserDN(user1Guid), expr, string.Empty);
var user2OU = Regex.Replace(GetUserDN(user2Guid), expr, string.Empty);
return user1OU == user2OU;
}
private string GetUserDN(string userGuid)
{
using(var entry = new DirectoryEntry(string.format("LDAP://<GUID={0}>", userGuid)))
{
using(var search = new DirectorySearcher(entry))
{
search.PropertiesToAdd.Add("distinguishedName");
var result = search.FindOne().GetDirectoryEntry();
if(result != null && result.Properties["distinguishedName"].Count > 0)
{
return result.Properties["distinguishedName"].Value.ToString();
}
else return "";
}
}
}
これはまだテストしていませんが、うまくいくと思います。それは基本的にユーザーの識別名を見つけ、彼らのGUIDを与えます。次に、CNをDNから削除し、基本的にそのユーザーのディレクトリエントリ/OUへのパスを見つけます。ただし、少し複雑なようです。これを単純化するためのコメントや推奨事項はありますか?