ローカル アカウント (Active Directory ではない) を管理するために、リモート Windows サーバーへの接続を開くプログラムを作成しました。プログラムは次の手順を実行します。
- ユーザーの作成
- ユーザーをグループに追加する
どちらのメソッドも System.DirectoryServices.AccountManagement を使用します。ここでは 2 つの関数を使用します。
public void CreateUser()
{
PrincipalContext pc = new PrincipalContext(ContextType.Machine,
"host_ip",
"adminaccount",
"adminpassword");
UserPrincipal up = new UserPrincipal(pc);
up.Name = "user";
up.DisplayName = "user";
up.SetPassword("user");
up.Description = "user";
up.UserCannotChangePassword = true;
up.PasswordNeverExpires = true;
try
{
up.Save();
}
catch (Exception ex)
{
}
try
{
AddToGroup(pc, up);
}
catch (Exception ex)
{
}
}
private void AddToGroup(PrincipalContext pc, UserPrincipal u)
{
string group = "Remote Desktop Users";
GroupPrincipal groupPrincipal = GroupPrincipal.FindByIdentity(pc, group);
if (groupPrincipal.Members.Contains(pc, IdentityType.SamAccountName, u.SamAccountName)) //error occurs here
{
return;
}
groupPrincipal.Members.Add(u);
try
{
groupPrincipal.Save();
}
catch (Exception e)
{
}
}
今朝から機能しました。ユーザーの作成は常に成功しますが、次の行でこのエラーが発生します。
- if (groupPrincipal.Members.Contains(pc, IdentityType.SamAccountName, u.SamAccountName))
グループ メンバーシップの列挙中にエラー (1332) が発生しました。メンバーの SID を解決できませんでした。
回答ありがとうございます