Get-ADGroupなどを使用したADグループの管理

ActiveDirectory PowerShellモジュールを使用すると、Get-AdGroupを使用してADグループをクエリできます。グループとグループメンバーの追加、更新、削除もできます。このブログ記事では、Active DirectoryグループPowerShellコマンドレットについて少し学び、参考のためにたくさんの例を紹介します。

Active Directoryグループのコマンドレット

ActiveDirectory PowerShellモジュールをインストールすると、グループを管理するためのいくつかのコマンドレットが利用できます。

Cmdlet Name Description
Add-ADGroupMember Used to add members to an AD group.
Add-ADPrincipalGroupMembership Used to add an AD principal to AD groups.
Get-ADGroup Used to return a group or groups from AD.
Get-ADGroupMember Used to return the members of an AD group.
Get-ADPrincipalGroupMembership Used to get the groups an AD principal is a member of.
New-ADGroup Used to create a new AD group.
Remove-ADGroup Used to delete an AD group.
Remove-ADGroupMember Used to remove members from an AD group.
Remove-ADPrincipalGroupMembership Used to remove an AD principal from AD groups.
Set-ADGroup Used to set the properties of an AD group.

これらのコマンドレットと少しのPowerShellの技術を使えば、PowerShellでActive Directoryグループのあらゆる側面を管理できます。

Get-ADGroupMemberを使用してグループのメンバーを検索する

Get-AdGroupMemberコマンドレットは、グループのすべてのメンバーを返します。

PS51> Get-ADGroupMember -Identity <identity string or object>

または、Get-Aduserコマンドレットを使用して、特定のユーザーのmemberOfプロパティを参照することもできます。フィルターの作成方法については、PowerShellでActive DirectoryとLDAPフィルターを学ぶを参照してください。

以下に2つの例を示します。

PS51> Get-ADUser -Filter 'memberOf -eq ""'
PS51> Get-ADUser -LDAPFilter '(memberOf=)'

これにより、ADPrincipalオブジェクトのコレクションが返されます。

グループのメンバーをCSVファイルにエクスポートします

これは、各ユーザーの名前、姓、およびメールアドレスをエクスポートします。 Get-ADGroupMember の結果をパイプして、Get-ADUser を使用します。なぜなら、これらは ADPrincipal オブジェクトであり、ADUser オブジェクトが持つすべてのプロパティを持っていないからです。

PS51> $GroupMembers = Get-ADGroupMember -Identity 'Professional Services Department'
PS51> $GroupMembers | Get-ADUser -Properties GivenName,Surname,Mail | Select-Object GivenName,Surname,Mail | Export-CSV -Path GroupMembers.CSV -NoTypeInformation

Export-CSVNoTypeInformation パラメーターを使用して、CSV ファイルが他のアプリケーションと互換性があることを確認してください。

Get-ADGroup を使用してメンバーのいないグループを検索します。

フィルターを使用してグループを検索するには、Get-AdGroup を使用します。以下に2つの例を示します。

PS51> Get-ADGroup -Filter "Members -notlike '*'"
PS51> Get-ADGroup -LDAPFilter "(!(member=*))"

New-ADGroup を使用して新しいセキュリティグループを作成します。

New-AdGroup コマンドを使用して新しいセキュリティグループを作成します。

PS51> New-ADGroup -Name '<group name>' -GroupScope <scope of group> -Path '<path of the OU tht will host the new group>'

Path パラメーターが指定されていない場合、新しいグループは Users コンテナに作成されます。グループのスコープは、DomainLocalGlobal、または Universal のいずれかである必要があります。

New-ADGroup を使用して新しい配布グループを作成します。

再び New-AdGroup を使用して配布グループを作成します。今回は GroupCategoryDistribution に設定します。

PS51> New-ADGroup -Name '<group name>' -GroupScope <scope of group>  -GroupCategory Distribution -Path '<path of the OU tht will host the new group>'

Add-ADGroupMember を使用してグループにメンバーを追加します。

PowerShell を使用して Active Directory グループにユーザーを追加するには、Add-AdGroupMember コマンドレットまたは Add-ADPrincipalGroupMembership コマンドレットを使用できます。

このコマンドでは、グループを Identity として指定します。

PS51> Add-ADGroupMember -Identity <identity string or object> -Members <identity string(s) or ADPrincipal(s)>

このコマンドでは、AD プリンシパルを Identity として指定します。

PS51> Add-ADPrincipalGroupMembership -Identity <identity string or object> -MemberOf <identity string(s) or ADGroup(s)>

Set-AdGroupのNotesプロパティに書き込んでください。

ADUCのNotesというフィールドは、Get-AdGroupから返されるInfoプロパティで表されます。

まず、変更するグループを見つけて、Infoプロパティを設定し、それからSet-AdGroupを使用して変更をADに反映します。

PS51> $group = Get-ADGroup -Identity <identity string or object>
PS51> $group.Info = 'Important notes on this group'
PS51> Set-ADGroup $group

Remove-ADGroupMemberを使用してグループメンバーを削除します。

すべてのPowerShellのコマンドレットと同様に、Confirmパラメータを使用して変更を行う前にプロンプトが表示されます。この動作は、Remove-AdGroupMemberおよびRemove-ADPrincipalGroupMembershipのコマンドレットにも適用されます。

以下のコードは、確認なしでグループメンバーを削除します。

PS51> Remove-ADGroupMember -Identity <identity string or object> -Members <identity string(s) or ADPrincipal(s)>
PS51> Remove-ADPrincipalGroupMembership -Identity <identity string or object> -MemberOf <identity string(s) or ADGroup(s)>

または、Confirmパラメータを使用して確認付きでグループメンバーを削除することもできます。

PS51> Remove-ADGroupMember -Identity <identity string or object> -Members <identity string(s) or ADPrincipal(s)> -Confirm
PS51> Remove-ADPrincipalGroupMembership -Identity <identity string or object> -MemberOf <identity string(s) or ADGroup(s)> -Confirm

Remove-ADGroupを使用してグループを削除します。

確認なしでグループを削除するか、確認付きでグループを削除するかを選択できます。

PS51> Remove-ADGroup -Identity <identity string or object>
PS51> Remove-ADGroup -Identity <identity string or object> -Confirm

Rename-ADObjectを使用してグループの名前を変更します。

Rename-ADObjectを使用して、ワンライナーでグループの名前を変更できます。

PS51> Rename-ADObject -Identity <identity string or object> -NewName '<new name>'

Get-ADGroupを使用してグループの数を取得します。

Get-AdGroupによって返されるグループの総数を取得する必要がありますか?Countプロパティを使用します。

PS51> (Get-ADGroup -Filter '*').Count

Get-ADGroupを使用して、マネージャーが割り当てられたグループを検索します。

Get-AdGroupと適切に作成されたLDAPフィルタを使用して、マネージャーが割り当てられたすべてのグループをフィルタリングします。

PS51> Get-ADGroup -LDAPFilter '(managedby=*)'

これに対応するPowerShellフィルタはありません。

Get-ADGroupを使用して、特定のユーザーが管理するグループを見つけます

フィルターのスキルを向上させ、PowerShellフィルターまたはLDAPフィルターを使用して特定のユーザーが管理するすべてのグループを見つけます。

PS51> Get-ADGroup -Filter 'managedby -eq "<distinguished name of user>"'
PS51> Get-ADGroup -LDAPFilter '(managedby=<distinguished name of user>)'

Set-ADGroupを使用してグループのマネージャーを設定します

グループの「管理者」タブでは、グループのメンバーシップを担当する人を指定することができます。これは自動的にグループのメンバーシップを変更することを意味しません。それを実現するには、対象のグループの「メンバー」プロパティのセキュリティ権限を変更する必要があります。

「グループのメンバーシップリストを更新できる管理者」ボックスをチェックすると、これを許可するためのアクセス許可が変更されます。

Managed By tab in Active Directory Users and Computers

Set-ADGroupを使用してManagedBy属性を設定します:

PS51> Set-ADGroup -ManagedBy '<distinguished name, GUID, SID or SAM Account name of manager>'

アクセス制御リストを更新するには、さらにいくつかの手順が必要です。次のコードスニペットは、ユーザーKristin Diazがグループのメンバーシップを管理できるようにします。bf9679c0-0de6-11d0-a285-00aa003049e2は、グループのMemberプロパティのGUIDです。

もしKristinがグループのマネージャーにも設定されている場合、チェックボックスがチェックされます。そうでない場合、Kristinはグループのメンバーシップを管理することができますが、ADUCでマネージャーとして表示されません。

Active Directory内の漏洩したパスワードや安全でないパスワードを、NCSCパスワードリストと照合して検出します。

$group = Get-ADGroup -Identity 'Professional Services Department'
$manager = Get-ADUser -Identity 'Kristin.Diaz'
$NTPrincipal = New-Object System.Security.Principal.NTAccount $manager.samAccountName
$objectGUID = New-Object GUID 'bf9679c0-0de6-11d0-a285-00aa003049e2'
$acl = Get-ACL "AD:$($group.distinguishedName)"
$ace = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $NTPrincipal,'WriteProperty','Allow',$objectGUID
$acl.AddAccessRule($ace)
Set-ACL -AclObject $acl -Path "AD:$($group.distinguishedName)"

すべてのセキュリティグループを検索

PowerShellを使用して、これらの2つの例に基づいて、Active Directory内のすべてのセキュリティグループをリストアップします。LDAPフィルターについては、どうですか?LDAPフィルターについてすべてを学びましょう

PS51> Get-ADGroup -Filter 'groupcategory -eq "Security"'
PS51> Get-ADGroup -LDAPFilter '(groupType:1.2.840.113556.1.4.803:=2147483648)'

配布グループを検索

これらの2つの例を使用して、セキュリティグループを除外したActive Directoryグループ(配布)をリストアップします。

PS51> Get-ADGroup -Filter 'groupcategory -eq "Distribution"'
PS51> Get-ADGroup -LDAPFilter '(!(groupType:1.2.840.113556.1.4.803:=2147483648))'

ユーザーのグループメンバーシップを取得するには、Get-ADPrincipalGroupMembershipを使用します。

PS51> Get-ADPrincipalGroupMembership -Identity <identity string or object>

なお、このコマンドはグローバルカタログへのアクセスが必要です。

OU内のグループを検索し、サブOUは含まない

これらの2つの例を使用して、検索を単一のOUに制限するためにSearchBaseパラメーターを使用します。

PS51> Get-ADGroup -Filter '*' -SearchBase '<distinguished name of OU>' -SearchScope OneLevel
PS51> Get-ADGroup -LDAPFilter '(CN=*)' -SearchBase '<distinguished name of OU>' -SearchScope OneLevel

OU内のグループを検索し、サブOUも含む

すべての子OUでグループを検索する必要がありますか?SearchScopeをSubTreeに設定します。

PS51> Get-ADGroup -Filter '*' -SearchBase '<distinguished name of OU>' -SearchScope SubTree
PS51> Get-ADGroup -LDAPFilter '(CN=*)' -SearchBase '<distinguished name of OU>' -SearchScope SubTree

まとめ

これで、PowerShellを使用したADグループの管理の例示が終わりました。いくつか試してみて、組織内で自動化を始めましょう!

Source:
https://adamtheautomator.com/get-adgroup/