5

リモート ホストからローカル グループのすべてのメンバーを取得しようとしています。System.DirectoryServices.AccountManagement 名前空間を使用する方法を見つけましたが、最終的に矛盾が生じます...

  • GroupPrincipal.FindByIdentity は、グループのローカル メンバーのみを含むグループ オブジェクトを返します。
  • PrincipalSearcher.FindAll は、グループ (ドメイン + ローカル) のすべてのメンバーを含むグループ オブジェクトを返します。

PrincipalSearcher.FindAll (以下を参照)を使用して、グループのすべてのメンバー (ドメイン + ローカル) を取得します。

出力:

  • メンバー: ホーマー - S-1-5-21-4017887476-2895526723-3552248342-500
  • メンバー: 鍛冶屋 - S-1-5-21-4017887476-2895526723-3552248342-1009
  • メンバー: ドメイン管理者 - S-1-5-21-452759756-260371901-2912106767-512
  • メンバー: SomeAdminGroup - S-1-5-21-452759756-260371901-2912106767-1154
  • メンバー: スミザーズ - S-1-5-21-452759756-260371901-2912106767-1124

コード:

 using (var machineContext = new PrincipalContext(ContextType.Machine, hostname))
 using (var gpSeach = new PrincipalSearcher(new GroupPrincipal(machineContext)))
 {
      foreach (GroupPrincipal gp in gpSeach.FindAll().Where(gp => gp.SamAccountName == "Administrators"))
      {
           foreach (var member in gp.Members)
           {
                Trace.WriteLine("Member: " + member.Name+ " - " + member.Sid);
           }
      }
  }

GroupPrincipal.FindByIdentityを使用して、グループのローカル メンバーのみを取得します。

出力:

  • メンバー: ホーマー - S-1-5-21-4017887476-2895526723-3552248342-500
  • メンバー: 鍛冶屋 - S-1-5-21-4017887476-2895526723-3552248342-1009

コード:

 using (var machineContext = new PrincipalContext(ContextType.Machine, hostname, null, ContextOptions.Negotiate, "myUsername", "myPassword"))
 using (GroupPrincipal localAdminGp = GroupPrincipal.FindByIdentity(machineContext, IdentityType.Name, "Administrators"))
 {
     foreach (var member in localAdminGp.Members)
     {
          Trace.WriteLine("Member: " + member.Name + " - " + member.Sid);
     }
 }

その 2 つの異なる結果を得るために、カーテンの下で何が起こっているのか!?!

4

0 に答える 0