複数の異なるグループから複数の異なるユーザーを削除する必要があり、これまでdsmodコマンドスクリプトを使用して作業を完了してきました。しかし、私はいくつかのPowerShellマジックをアップグレードしようとしていましたが、おそらくプロセスを速めました。私はまた、成功または失敗の両方のアクションログを出力するスクリプトが必要です。Powershell - 複数のADグループから複数のADメンバーを削除する
私が使用している入力ファイルは、最初の列にuserid、2番目の列にグループ名を持つ.csvです。私が作業しているテスト入力ファイルには、distinguishednameと単にsamaccountnameの両方が表示されているので、入力を受け入れる方法を見ることができます。また、同じページにあるので、ドメイン情報を保護するために出力エラーを編集しましたが、何があるべきかを公正に表現していると信じています。
これまでのところ、私が試したいくつかのバリエーションを見つけました。
$fileList = import-CSV -Delimiter ',' c:\temp\Logs\RemoveUserInput.csv
foreach($entry in $fileList)
{
$user = $entry.UserID
$group = $entry.Group
remove-adgroupmember -Identity $group -Member $user -Confirm:$false
}
そして、私は取得していますエラーは次のとおりです:最初はある
PS C:\Temp\Logs> .\remove_users_from_group.ps1
remove-adgroupmember : Cannot find an object with identity:
'cn=user1,dc=domain,dc=com' under:
'DC=domain,DC=com'.
At C:\Temp\Logs\remove_users_from_group.ps1:7 char:3
+ remove-adgroupmember -Identity $group -Member $user -Confirm:$false
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (cn=user1,dc=domain,dc=c
om:ADPrincipal) [Remove-ADGroupMember], ADIdentityNotFoundException
+ FullyQualifiedErrorId : SetADGroupMember.ValidateMembersParameter,Micros
oft.ActiveDirectory.Management.Commands.RemoveADGroupMember
remove-adgroupmember : Cannot find an object with identity: 'user1' under:
'DC=domain,DC=com'.
At C:\Temp\Logs\remove_users_from_group.ps1:7 char:3
+ remove-adgroupmember -Identity $group -Member $user -Confirm:$false
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (user1:ADPrincipal) [Remove-ADG
roupMember], ADIdentityNotFoundException
+ FullyQualifiedErrorId : SetADGroupMember.ValidateMembersParameter,Micros
oft.ActiveDirectory.Management.Commands.RemoveADGroupMember
同僚は、問題の一部は、当社の複数ドメインのフォレストで横たわっていたかもしれないことを示唆し、スクリプトのバリエーションを提供しましたdomain2のグループからdomain1のユーザーを削除します。
Import-Module ActiveDirectory
$FileList = Import-CSV -Delimiter ',' C:\temp\Logs\RemoveUserInput.csv
# Create new ADSearcher Object – could also be done differently
$objForest = [system.directoryservices.activedirectory.forest]::GetCurrentForest()
$ForestDefaultNC = "DC="+$objForest.RootDomain.Name.Replace(".",",DC=")
$ADSearcher = New-Object System.DirectoryServices.DirectorySearcher
$ADSearcher.PageSize = 1000
foreach($entry in $FileList) {
$UserName = $entry.UserID
$GroupName = $entry.Group
$GroupFilter = "(&(objectClass=group)(Name=$GroupName))"
$ADSearcher.Filter = $GroupFilter
$ADSearcher.SearchRoot = New-Object ADSI("GC://$($ForestDefaultNC)")
$Group = $ADSearcher.FindAll()
$UserFilter = "(&(objectCategory=person)(objectClass=user)(Name=$UserName))"
$ADSearcher.Filter = $UserFilter
$ADSearcher.SearchRoot = New-Object ADSI("GC://$($ForestDefaultNC)")
$User = $ADSearcher.FindAll()
Remove-ADGroupMember -Identity $Group -Members $User
}
そして次のエラーは、次のとおりです:次のようにスクリプトのばらつきがある
PS C:\Temp\Logs> .\2remove_users_from_group.ps1
Remove-ADGroupMember : Cannot bind parameter 'Identity'. Cannot convert the
"System.DirectoryServices.SearchResultCollection" value of type
"System.DirectoryServices.SearchResultCollection" to type
"Microsoft.ActiveDirectory.Management.ADGroup".
At C:\Temp\Logs\2remove_users_from_group.ps1:28 char:36
+ Remove-ADGroupMember -Identity $Group -Members $User
+ ~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Remove-ADGroupMember], Par
ameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.ActiveD
irectory.Management.Commands.RemoveADGroupMember
Remove-ADGroupMember : Cannot bind parameter 'Identity'. Cannot convert the
"System.DirectoryServices.SearchResultCollection" value of type
"System.DirectoryServices.SearchResultCollection" to type
"Microsoft.ActiveDirectory.Management.ADGroup".
At C:\Temp\Logs\2remove_users_from_group.ps1:28 char:36
+ Remove-ADGroupMember -Identity $Group -Members $User
+ ~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Remove-ADGroupMember], Par
ameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.ActiveD
irectory.Management.Commands.RemoveADGroupMember
いただければ幸いに提供することができますどのような援助。
編集:要求されたとして、以下の.csvファイルの例です:
その非常に簡単で、おそらく正確にあなたが想像するとおりのfindAll()メソッドの
UserID,group
"cn=user1,dc=domain,dc=com","cn=group1,dc=domain,dc=com"
user1,group1
あなたのcsvの外観は何ですか(私は良い推測があります)?私たちにいくつかの行を見せてください。 – Matt
これらのDNが正しいことは確かですか?ユーザーとグループはドメインのルートに配置されていますか?いつものシナリオではありません... –
私は質問で言ったように、私はここで見ているもののDNを、目的だけのために変更しました。しかし、私が使用している実際のファイルの情報が正しいことを100%確信しています。 – BitBeard