OUのユーザーを使用してActive Directoryで動的グループを作成する


8

Active Directoryの特定のOUのユーザーで動的グループを作成したいと思います。Exchange動的配布リストを使用してこれを完全に行うことができますが、もちろん、Ex DDLはメール専用です。

これを作成する方法はありますか?System Centerを使用してこれを処理するガイドをいくつか見つけましたが、System Centerはオプションではありません。

前もって感謝します、

回答:


11

Active Directoryには動的セキュリティグループなどはありません。動的配布グループのみです。

これを実現するために、最も実行可能なオプションは、Powershellスクリプトで、指定されたOUに誰が属しているかを判断し、それに応じてセキュリティグループを更新することです。

Import-Module ActiveDirectory
$groupname = PseudoDynamicGroup
$users = Get-ADUser -Filter * -SearchBase "ou=desiredUsers,dc=domain,dc=tld"
foreach($user in $users)
{
  Add-ADGroupMember -Identity $groupname -Member $user.samaccountname -ErrorAction SilentlyContinue
}
$members = Get-ADGroupMember -Identity $groupname
foreach($member in $members)
{
  if($member.distinguishedname -notlike "*ou=desiredUsers,dc=domain,dc=tld*")
  {
    Remove-ADGroupMember -Identity $groupname -Member $member.samaccountname
  }
}

+1 ADグループが最新であることを確認するために、このようなスクリプトをActive Directoryで定期的に実行できますか?または、どういうわけか、何らかのイベントシステムをサブスクライブしますか?私は管理者ではなく開発者ですが、管理者と上司に影響を与えることができます
Mzn '19

それは、ユーザを再確認しないだけので、私は、最初に削除しにしてください、私たちはただ確認(および追加)オブジェクト
xXhRQ8sD2L7Z

4

私は自分の質問に答えています。MathiasのPowerShellのアイデアで、インターネットでこれを見つけました。

https://github.com/davegreen/shadowGroupSync

特徴

  • 1つ以上のOUのユーザーオブジェクトまたはコンピューターオブジェクトを1つのグループに同期します。
  • PowerShell Active Directoryフィルターを使用して、シャドウグループに含まれるオブジェクトをフィルターする機能。
  • シャドウグループの種類(セキュリティ/配布)を選択する機能。

著者のブログはツールのデザインや動機に関する追加情報が含まれています。


1
マティアスがあなたを助けたのなら、あなたは彼の答えを受け入れるべきです。彼はあなたに洞察を与えます!
Mzn 2014

3

これはAdaxesで実行できます。技術的には、ユーザーが更新または移動されると、グループメンバーシップを動的に更新します。以下は、Department属性に基づいてグループメンバーシップを自動的に維持する方法の例ですが、OUに基づいて同じことを行うように変更するのは非常に簡単です。http://www.adaxes.com/tutorials_AutomatingDailyTasks_AddUsersToGroupsByDepartment.htm


1

また、Active Directoryで動的セキュリティグループを作成する方法を探し、Mathiasとして結論を​​出しました。私のソリューションは彼ほどエレガントではありませんでした。スケジュールされたPowerShellスクリプトを使用して、グループからすべてのユーザーを削除し、OU内のユーザーを入力します。さらに、サブOUグループが、それが適合する親OUセキュリティグループに追加されることを確認しました。

import-module ActiveDirectory
Get-ADGroupMember OU_GroupName | % { Remove-ADGroupMember 'OU_GroupName' -Members $_ -Confirm:$false}
Get-ADUser -SearchBase 'OU=OUName,OU=ParentOUName,DC=DomainName,DC=TopDomainName' -Searchscope 1 -Filter * | % { Add-ADGroupMember 'OU_GroupName' -Members $_ }
Add-ADGroupMember -Identity "OU_ParentName" -Members "OU_ChildOneName", "OU_ChildTwoName", "OU_ChildThreeName"

これが大企業でうまく拡張できるかどうかはわかりませんが、スクリプトは300ユーザーの企業で数分しか使用しません。


実用的な観点から見ると、ソリューションは優れています(数百人のユーザーにとって)。ただし、最初にすべてを追加し(重複の警告/エラーを抑制)、次に一致しないもののみを削除することにより、1)ADオブジェクトに対する属性更新の数を最小限に抑え、2)誰かが認証してセキュリティを逃すリスクを回避します。スクリプトの実行中に偶然オンラインになった場合は、トークンでグループ化します。
Mathias R. Jessen 2013


0

他のメンバーが残した声明に。これをドメインコントローラーから実行しない場合は、$ domainControllerを置き換えることで静的エントリを提供するか、別のを追加し、その後に$ DomainControllerを追加して、その情報を渡す必要があります。

ユーザーをグループに追加するには

Function AddUserToGroup($Group, $User, $DomainController)
{
 if(!(Get-ADGroupMember -Identity $group | ?{$_.name -eq $User}))
 {
  Add-ADGroupMember -Identity $group -Members $User -Server $DomainController
 }
 else
 {
  return  "The user: $User is already in the $group"
 }
}

ユーザーを削除するには、同じことを行うことができます。

Function RemoveUserFromGroup($Group, $User, $DomainController)
{
 if((Get-ADGroupMember -Identity $group | ?{$_.name -eq $User}))
 {
  Remove-ADGroupMember -Identity $group -Members $User -Server $DomainController
 }
 else
 {
  return "The user: $User is not a member of $group"
 }
}

これを使用するには、これを行うことができます...

$Users = Get-Aduser -Filter *
Foreach($user in $users)
{
  AddUserToGroup "SomeGroup" $user.name "ServerName"  
}

または

無効になっているユーザーOUまたはこれが発生する可能性がある場所、またはサイトやグループなどのOUを切り替える場合に最適です。

$Users = Get-Aduser -Filter * 
Foreach($user in $users)
{
  RemoveUserToGroup "SomeGroup" $user.name "ServerName"  
}

この回答は目的を果たさず、質問にまったく価値を与えません。関数は非効率的であり、固有の値を提供しません。両方の機能1.行われる呼び出しの量を2倍にする、2。特にユーザーのCNが使用されている場合にのみ機能する(ネイティブコマンドレットの機能を制限する)、3。PowerShell関数の推奨される動詞-名詞の命名パターンに従っていない、 4. 2番目の関数は、ユーザーを削除するのではなく、実際にユーザーをグループに追加します。6年前から受け入れられた回答は、正確、完全、機能的です。追加の回答が必要になった理由はわかりません。
セミコロン

あなたは熱心です!あなたは心だけ狭いことをしているん

もう一つ。私の組織には5000人を超えるユーザーがいるこのスクリプトがあり、問題なく動作します。関数に情報を提供するだけです。また、タスクDCでトリガーが実行され、新しいユーザーが作成または無効化されたときにトリガーイベントが実行されることに注意してください。ボックスの外側で考えてください................

$ DomainControllerは未定義です。"RemoveUserFromGroup"関数は、 "Add-ADGroupMember"コマンドレットを使用します。"Remove"(Remove-ADGroupMemberコマンドレットが実際には単なるタイプミスであった場合)は、ユーザーがグループに属していない場合にのみ機能します。また、指定したOUからユーザーを取得するタスクをリモートで参照することもありません。せいぜい、完全なソリューションがすでに提出され、受け入れられている場合、それはニーズワークの部分ソリューションです。
セミコロン

ああ、私はあなたが話していたことを理解しています。笑-上をコピーして下に貼り付けました。私はそれを修正しました...このユーザーがDCからスクリプトを実行しない場合に備えて、$ DomainControllerがそこに配置されました。ここでも、ユーザーとグループが提供されます。必要に応じて、単純なGet-ADUser -Filter *を実行できますが、平凡なようです...すべてのユーザーを循環するのではなく、DCイベントログを読んで新しいユーザーをプルする方が良いでしょう。しかし、ねえ、猫の皮を
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.