4

LDAPグループが一部のユーザーのプライマリグループである場合でも、LDAPグループ内のユーザーのリストを取得するにはどうすればよいですか?

たとえば、「DomainUsers」がドイツ語の「DomainLeute」であるとします。「CN=DomainLeute、DC = mycompany、DC=com」のすべてのメンバーが必要です。それが有名な「ドメインユーザー」グループであることをどうやって知ることができますか?

または、一部のユーザーのプライマリグループが「CN = rebels、DC = mycompany、DC = com」に変更され、そのグループのメンバーを取得したい場合はどうなりますか?ユーザーにはプライマリグループのmemberOfプロパティがなく、プライマリグループにはユーザーを一覧表示するメンバープロパティがありません。

これは、LDAP経由で表示したときに表示されるものです(つまり、MS拡張機能はありません)。 代替テキスト

4

3 に答える 3

6

任意のグループからprimaryGroupTokenを取得するには、objectSidからそれを抽出します。たとえば、Domain Users objectSid =S-1-5-21-704657944-2065781323-617630493-513の場合、primaryGroupTokenは「-」の後の最後の桁であるため、「DomainUsers」の場合は513

于 2010-12-16T22:47:40.073 に答える
4

最初に、GroupオブジェクトからprimaryGroupTokenを見つける必要があります。ADSIEditを使用している場合、この計算された属性を表示するには、「構築済み」フィルターがオンになっていることを確認する必要があります。ドメインユーザーの場合、primaryGroupTokenは513である必要があります。

次に、primaryGroupIDがこの値に設定されているすべてのユーザーを見つける必要があります。これは、ドメインユーザーがプライマリグループとして設定されているすべてのユーザーを見つけるために作成する必要があるLDAPクエリです。

(&(objectCategory=person)(objectClass=user)(primaryGroupID=513))

編集

LDAPブラウザでprimaryGroupTokenを表示する手順は次のとおりです。LDAPブラウザ2.6ビルド650を使用しています。プロファイルを右クリックして[プロパティ]をクリックします

代替テキスト

[LDAP設定]タブに移動し、[詳細設定]ボタンをクリックします。

代替テキスト

追加の操作属性primaryGroupTokenを追加します

[適用]ボタンをクリックして、プロパティページを閉じます。これで、グループオブジェクトにprimaryGroupTokenが表示されます。

代替テキスト

于 2010-12-15T07:05:03.420 に答える
0

これは、まさにそれを行うために作成したPSスクリプトです。

[void][System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices");

$groupName = "Grupo Domain";

$directoryEntry = New-Object System.DirectoryServices.DirectoryEntry;
$directorySearcher = New-Object System.DirectoryServices.DirectorySearcher($directoryEntry, "(&(objectClass=group)(CN=$groupName))");
[void]$directorySearcher.PropertiesToLoad.Add("objectSid");
[void]$directorySearcher.PropertiesToLoad.Add("member");
$result = $directorySearcher.FindOne();

if ($result -eq $null) { return; }

# Try get the group members through the "member" property.
if ($result.Properties["member"].Count -gt 0) {
    foreach ($member in $result.Properties["member"]) {
        $memberSearcher = New-Object System.DirectoryServices.DirectorySearcher($directoryEntry, "(&(objectClass=*)(distinguishedName=$member))");
        [void]$memberSearcher.PropertiesToLoad.Add("msDS-PrincipalName");
        $memberResult = $memberSearcher.FindOne();
        if ($memberResult -eq $null) { continue; }
        Write-Output $memberResult.Properties["msDS-PrincipalName"];
    }
    return;
}
if ($result.Properties["objectSid"].Count -gt 0) {
    # The group might be an AD primary group. Try get the members by the PrimaryGroupID.
    $groupSid = New-Object System.Security.Principal.SecurityIdentifier($result.Properties["objectSid"][0], 0);
    # Hacky way to get only the last RID.
    $primaryGroupSid = $groupSid.Value.Replace($groupSid.AccountDomainSid.ToString(), [String]::Empty).TrimStart('-');
    $memberSearcher = New-Object System.DirectoryServices.DirectorySearcher($directoryEntry, "(&(objectClass=*)(primaryGroupId=$primaryGroupSid))");
    [void]$memberSearcher.PropertiesToLoad.Add("msDS-PrincipalName");
    $memberResult = $memberSearcher.FindAll();
    if ($memberResult -eq $null) { continue; }
    foreach ($member in $memberResult) {
        Write-Output $member.Properties["msDS-PrincipalName"];
    }
}
于 2017-01-20T12:44:42.257 に答える