여러 다른 그룹에서 여러 다른 사용자를 제거해야하므로 dsmod 명령 스크립트를 사용하여이를 완료해야합니다. 그러나, 나는 업그레이드를 위해 몇 가지 파워 쉘 마법을 사용하려고 노력해 왔으며 아마도 프로세스를 빠르게 할 수있었습니다. 성공과 실패를 함께 또는 개별적으로 기록하는 스크립트가 필요합니다.Powershell - 여러 AD 그룹에서 여러 AD 멤버 제거
사용중인 입력 파일은 첫 번째 열에 userid가 있고 두 번째 열에 그룹 이름이있는 .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