7

先週、初めて PowerShell と ActiveDirectory に出会いました。管理者またはドメイン管理者ではないユーザーのリストを見つけられるようにしたいと考えています。

これまでのところ、次のコマンド/ステートメントを使用して、すべての ActiveDirectory ユーザーのすべてのプロパティを取得する方法を知っています。

Get-ADUser -Filter * -Properties *

私がやりたいのは、管理者でもドメイン管理者でもない、現在の ActiveDirectory ユーザーのユーザー名だけを出力することです。

これが私がやろうとしていることのいくつかの疑似コード/ Powershellコードです:

$users = Get-ADUser -Filter * -Properties *
foreach($u in $users){
    if ($u isn't an administrator OR $u isn't a domain administrator){ 
        Write-Host "User Name:" $u.Name
    }
}

Get-ADUser -Filter * -Properties *コマンドを実行するとMemberOf、各ユーザーのプロパティが表示されます。これが手がかりになると思います。AdminCountまた、Google 経由で見つかったさまざまな情報源からも聞いています (何かと呼ばれるものはありDomainAdminCountますか?)。

ActiveDirectory に PowerShell 拡張機能を使用しないように具体的に求められています。さまざまな情報筋が、この拡張機能を使用すると簡単になると言っていますが。

ステートメントのさまざまな組み合わせのテストに約 2 時間を費やしましたが、初心者の PowerShell ステータスはあまり役に立ちません。フィードバックの背後にある明確な説明と、支援に感謝します。

4

4 に答える 4

5

これは非常に簡単な作業であり、最初にすべてのユーザーを取得してループする必要はありません。

$DomainsAdminsDn = (Get-ADGroup 'Domain Admins').DistinguishedName
Get-ADUser -Filter { -not (memberof -eq $DomainsAdminsDn) }
# OR
Get-ADUser -LDAPFilter "(!(memberof=$DomainsAdminsDn))"

他のグループでも同じことができます。

編集:グループにないアカウントを返すために、クエリを逆にしました。ところで、これはうまくいきません:

Get-ADUser -Filter { memberof -ne $DomainsAdminsDn }

デフォルトのグループ以外のグループのメンバーではないすべてのアカウントをスキップします。

于 2013-03-12T05:55:46.767 に答える
1

皆さんから寄せられたものを少し使って、微調整しました。グループに属していない人を特定する必要があり、その名前だけが必要でした。これがあなたを助けたかどうか教えてください。

$Internet_Users = Get-ADGroup -Filter {Name -like "Internet_Users" }
Get-ADUser -Filter { -not (memberof -eq $Internet_Users) -and (enabled -eq "True" -and objectclass -eq "user")} |Select Name | Export-CSV "C:\Users\YOURNAME\Documents\Enabled_Users_Without_Internet_Users_Group.csv"  
于 2016-11-02T16:29:27.983 に答える
0

BartekB からの非常に有益なフィードバックにより、以下の解決策を達成することができました。

## This variable gets all the users that are Domain Administrators
$DomainsAdminsDn = (Get-ADGroup 'Domain Admins').DistinguishedName

## This variable gets all the users that are Administrators
$AdministratorsDn = (Get-ADGroup 'Administrators').DistinguishedName

## This line will get all the users that are not "Domain Administrators" or "Administrators"
Get-ADUser -Filter {(memberOf -ne $AdministratorsDn) -and (memberOf -ne $DomainsAdminsDn)}

最後の行では、2 つの変数を組み合わせて、より具体的なフィルタリングを行います (つまり、管理者でもドメイン管理者でもないユーザーを探します)。&& 演算子に相当する PowerShell を探し回るのに約 10 分を費やさなければなりませんでした。

于 2013-03-12T08:23:15.403 に答える
0

「Domain Users」は特別に扱われていることが判明したため、そのグループに属していない人を見つけようとしてもうまくいきません。

以下のコードに基づく: http://powershell.org/wp/forums/topic/find-users-not-in-a-group/

Import-Module ActiveDirectory
$users = Get-ADUser -Filter {Enabled -eq $true} -Properties MemberOf, PrimaryGroup
$dugDn = (Get-ADGroup "Domain Users").DistinguishedName
foreach ($user in $users)
{
    Write-Verbose "Working on $($user.Name)"
    $groups = $user.MemberOf, $user.PrimaryGroup
    if ($groups -NotContains $dugDn)
    {
        Write-Host "$($user.SamAccountName) not in the domain users group"
    }
}
于 2016-05-09T21:24:39.157 に答える