Windows ドメインに参加しているマシンでローカル グループを列挙しています。私はこれを行うために WMI を使用しています。WMI は非常にリモートで資格情報を提供しやすいためです。私のシナリオでは、コードは常にリモートで実行され、信頼されていないプリンシパルとして実行されます。つまり、ターゲット コンピューターへのリモート呼び出しで資格情報を提供できる必要があります (これはランダムに聞こえますが、実際には後で関連します)。
次の形式の WMI クエリを実行しています。
SELECT PartComponent FROM Win32_GroupUser WHERE GroupComponent="Win32_Group.Domain='{0}',Name='{1}'"
この場合のドメインはコンピュータ名であり、名前はグループ自体の名前です。
返されるアイテムのリストは正しいのですが、各エントリには問題のプリンシパルの SID がありません。これらのユーザーの SID を取得する最も効率的な方法は何ですか?
これは、プリンシパルごとに別のクエリ (またはこれに対する明らかな最適化) を介して行うことができます。これは、このボックスのローカル ユーザーに対して喜んで行います。ただし、ドメイン ユーザーの場合、これは、このプリンシパルが存在するドメイン内の DC への別の接続を意味し、このローカル グループに多くの信頼されたドメインのユーザーが存在する可能性があることを考えると、それらの多くが潜在的に多くなる可能性があります。
明らかな他の API をいくつか調べましたが、私の目的に非常に適した API は見つかりませんでした。WinNT://ComputerName/GroupName という形式のパスで DirectoryEntry() を使用するなど、一部のイベントでは結果から返されるドメイン プリンシパルを発行するところまで行ってしまいましたが、これはワイルドであることがわかりました。他の人は、私が求めているグループメンバーシップデータを返しても、資格情報を提供しません。
正直なところ、SID だけで十分満足です。プリンシパル名とドメイン名は非常に便利ですが、あると便利です。
私が見逃している特効薬はありますか?