つまり、現在System.DirectoryServices.AccountManagementを使用しており、UserPrincipalクラスを使用すると、名前、ミドルネームなどのみが表示されます。
だから私のコードではそれは
UserPrincipal myUser = new UserPrincipal(pc);
myUser.Name = "aaaaaa";
myUser.SamAccountName = "aaaaaaa";
.
.
.
.
myUser.Save();
モバイルや情報などの属性はどのように表示されますか?
それを行う適切な方法は、PrincipalExtensions
を使用してPrincipal
を拡張し、説明されているようにメソッドExtensionSet
とExtensionGet
を使用することです ここ 。
この場合、ユーザープリンシパルから取得して、1レベル深く(DirectoryEntry
の腸に戻る)する必要があります。
using (DirectoryEntry de = myUser.GetUnderlyingObject() as DirectoryEntry)
{
if (de != null)
{
// Go for those attributes and do what you need to do...
var mobile = de.Properties["mobile"].Value as string;
var info = de.Properties["info"].Value as string;
}
}
_up.Mobile
_は完璧ですが、残念ながら、UserPrincipalクラスにはそのようなメソッドがないため、.GetUnderlyingObject()
を呼び出してDirectoryEntryに切り替える必要があります。
_static void GetUserMobile(PrincipalContext ctx, string userGuid)
{
try
{
UserPrincipal up = UserPrincipal.FindByIdentity(ctx, IdentityType.Guid, userGuid);
DirectoryEntry up_de = (DirectoryEntry)up.GetUnderlyingObject();
DirectorySearcher deSearch = new DirectorySearcher(up_de);
deSearch.PropertiesToLoad.Add("mobile");
SearchResultCollection results = deSearch.FindAll();
if (results != null && results.Count > 0)
{
ResultPropertyCollection rpc = results[0].Properties;
foreach (string rp in rpc.PropertyNames)
{
if (rp == "mobile")
Console.WriteLine(rpc["mobile"][0].ToString());
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
_