以下のスクリプトでuser1~1600ユーザーを作成し、user1501をSCOの「Remove User From Group」アクティビティで削除しようとするとエラーが発生してしまいます。
New-ADGroup -Name “scogroup” -GroupScope Universal
for($i=1; $i -lt 1601; $i++)
{
New-ADUser -Name (“user” + $i)
}
for($i=1; $i -lt 1601; $i++)
{
$user = Get-ADUser (“user” + $i)
Add-ADGroupMember -Identity “scogroup” -Members $user
}
エラーメッセージは以下です。
The group member ‘CN=user1501,CN=Users,DC=ebsjsc,DC=local’ was not found.
Exception: AdGroupMemberNotFoundException
Target site: LdapGroup.RemoveMember
Stack trace:
場所 Microsoft.Accelerators.ActiveDirectoryCore.LdapGroup.RemoveMember(DistinguishedName memberDistinguishedName)
場所 Microsoft.SystemCenter.IntegrationPack.ActiveDirectory.Execution.RemoveUserFromGroupExecutor.DoAction(Object executionItem)
場所 Microsoft.SystemCenter.IntegrationPack.ActiveDirectory.Execution.AExecutor.ExecuteNonGetAction(Object executionObject)
場所 Microsoft.SystemCenter.IntegrationPack.ActiveDirectory.Execution.AExecutor.Execute()
場所 Microsoft.SystemCenter.IntegrationPack.ActiveDirectory.Execution.ActiveDirectoryProgram.ExecuteProxy(ExecutionProxy proxy)
場所 Microsoft.SystemCenter.IntegrationPack.ActiveDirectory.AActiveDirectoryActivity.Execute(IActivityRequest request, IActivityResponse response)
明らかにアクティビティの実装ミスだと思われます。
1500以上のユーザー数を扱う場合にはPageSizeを適切に設定してオペレーションをしないといけない…というのはAD系のプログラムを書いている人なら多くの人が知っていることかなと思います。
しかたがないので、とりあえず問題を回避するには以下のようにPowerShellスクリプトを書くことが出来ます。
$group = “”
$member = “”
Import-Module ActiveDirectory
Remove-ADGroupMember -Identity $group -Members $member -confirm:$false
これでよし…と思ったのですが、これではRemove-ADGroupMemberコマンドレットが見つからないと言われてエラーになってしまいました。
残念ながら呼び出されるPowerShellのバージョンが低いようです。
Windows Server 2012 and Orchestrator Run.NET Script Activity in PowerShell – Execution Policy?
対処として以下のレジストリを作成しました。
hklm\software\wow6432node\microsoft\.netframework\OnlyUseLatestCLR
種類はDWORDで値は1です。
情報元は以下のブログです。
これで常に最新のバージョンのPowerShellが立ち上がるようになり、うまく動作させることができました。
コメントを残す