1

OU のメンバーに基づいて AD のグループ メンバーシップを更新するスクリプトを作成しようとしています。グループ名と OU 名を指定して比較すると、小さなスクリプトは正常に動作します。

$Group = "GroupA"
$OU = "OU=ContainerA,DC=DC1,DC=ccompany,DC=com"

$users = $(get-aduser -filter "*" -SearchBase $OU)
$groupmembers = Get-ADGroupMember -Identity $Group
switch (Compare-Object -ReferenceObject $groupmembers -DifferenceObject $users -property samaccountname){
{$_.SideIndicator -eq "=>"} {add-adgroupmember -identity $group -member $_.samaccountname}
{$_.SideIndicator -eq "<="} {remove-adgroupmember -identity $group -member $_.samaccountname -confirm:$false} } 
}

もちろん、これは単一のグループと OU では問題ありませんが、約 10 個のグループと OU に対してこれを行う必要があるため、全体を 10 回コピーして貼り付けるのではなく、関数を作成してから呼び出すのが賢明な方法であると考えました。それを10回。コードを関数に変更しました:

Function Build ([String]$Group, [String]$OU){
$users = $(get-aduser -filter "*" -SearchBase $OU)
$groupmembers = Get-ADGroupMember -Identity $Group
switch (Compare-Object -ReferenceObject $groupmembers -DifferenceObject $users -property samaccountname){
{$_.SideIndicator -eq "=>"} {add-adgroupmember -identity $group -member $_.samaccountname}
{$_.SideIndicator -eq "<="} {remove-adgroupmember -identity $group -member $_.samaccountname -confirm:$false} } 
}

Build ("GroupA", "OU=ContainerA,DC=DC1,DC=ccompany,DC=com")
Build ('GroupB", "OU=ContainerB,DC=DC1,DC=ccompany,DC=com")

ただし、上記のスクリプトを実行すると、次のエラーが発生し続けます。

Get-ADUser : An empty SearchBase is only supported while connected to a GlobalCatalog.

最初のコードを関数に変換しようとする際に私が間違っていることを指摘してください。

ありがとう

4

1 に答える 1

1

あなたの問題は、関数を呼び出す方法にありますBuild:

Build "GroupA" "OU=ContainerA,DC=DC1,DC=ccompany,DC=com"
Build 'GroupB" "OU=ContainerB,DC=DC1,DC=ccompany,DC=com"

また

Build -Group "GroupA" -ou "OU=ContainerA,DC=DC1,DC=ccompany,DC=com"

()関数を呼び出すときは、どちらも必要ありません,。注意,してください配列セパレータです

于 2012-07-17T20:16:54.940 に答える