2017-05-11 12 views
0

私はスクリプト作成の専門家ではないと言って始めます。しかし、私は、数か月前に指定されたOU(DISABLEと呼ばれる)内のすべてのユーザーのすべてのグループメンバーシップを削除するスクリプトを作成することが任されました。ADグループメンバーシップ削除スクリプトが機能しない100% - サポートが必要

長いストーリーではありますが、スクリプトはほとんどの場合非常にうまくいきますが、ランダムな機会にユーザーの1(ランダム)グループや2、またはそれ以上のものは削除されません。推論はです。使用するスクリプトは次のとおりです。

#Remove User Group Memberships 
$ou = Get-ADUser -SearchBase "OU=DISABLE,OU=CE,DC=ourdomain,DC=org" -Filter * 
foreach ($user in $ou) { 
$UserDN = $user.DistinguishedName 
$user.PrimaryGroupID = 513 
set-aduser -instance $user 
Get-ADGroup -LDAPFilter "(member=$UserDN)" | foreach-object { 
if ($_.name -ne "Domain Users") {remove-adgroupmember -identity $_.name - 
member $UserDN -Confirm:$False} } 
} 

いただければ幸い提供できるすべてのヘルプ、ありがとうございました!

+0

多分複数のドメインを持っていますか?スキップされたグループについての論理を見つけようとすると、ヒントが得られます。特に、グループスコープとグループがourdomain.orgにあるかどうかをチェックします。 – Igor

答えて

0

ユーザーを検索してから、ユーザーが属するすべてのグループを検索するのではなく、最初の検索にそのグループを含めます。これは、より少ないAD検索の利益をもたらし、AD検索がユーザを逃す機会を少なくする。

#Remove User Group Memberships 
$ou = Get-ADUser -SearchBase "OU=DISABLE,OU=CE,DC=ourdomain,DC=org" -Filter * -Property MemberOf 
foreach ($user in $ou) { 
    $UserDN = $user.DistinguishedName 
    $user.PrimaryGroupID = 513 
    set-aduser -instance $user 
    $user.MemberOf | 
     Where{$_ -notmatch "Domain.?Users"} | 
     ForEach {remove-adgroupmember -identity $_ -member $UserDN -Confirm:$False} 
} 

これを試して、より良い走行距離があるかどうかを確認してください。おそらくこれらのうちのいくつかは保護されたグループであり、スクリプトを実行するアカウントにはこれらのグループに影響を与える権限がないと考えてください。グループから削除されていないユーザーを確認し、AdminCountプロパティが1に設定されているかどうかを確認してください。

+0

すばやく返信いただき、ありがとうございました。調整されたスクリプトを試してみて、私がそれに恵まれているかどうかを確認します。ただし、私の標準アカウントはスクリプトが削除しなかったグループを削除することができ、スクリプトはドメイン管理者権限で実行されているため、権限の問題ではないことを確認しました。もう一度ありがとう、私は新しいスクリプトがどのように動作するかを確認した後に投稿します! –

+0

スクリプトは2週間正常に動作していますので、私はあなたの問題を解決したと思います。ありがとう、本当にありがとう! –

関連する問題