2017-03-02 3 views
0

여러 다른 그룹에서 여러 다른 사용자를 제거해야하므로 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 
+0

당신의 CSV는 어떻게 생겼습니까 (나는 잘 추측합니다)? 몇 줄 보여줘? – Matt

+0

그런 DN이 맞습니까? 사용자 및 그룹이 도메인의 루트에 있습니까? 평범한 시나리오가 아닙니다 ... –

+0

질문에서 말했듯이, 예를 들어 여기에서 보는 DN을 변경했습니다.그러나 나는 실제 파일에있는 정보가 정확하다는 것을 100 % 확신합니다. – BitBeard

답변

0

결과이 방법은 SearchResultCollection 유형입니다 여러 사용자를 포함 할 수 있기 때문입니다.

Remove-ADGroupMember에서 사용하려면 디렉터리 항목을 가져 오거나 고유 이름과 같은 일부 특성을 전달해야합니다.

신원이 MS Docs에 따라 다음 중 하나가 될 수 있습니다

당신은 그것의 고유 이름 (DN)으로 그룹을 식별 할 수 GUID는 보안 식별자 (SID) 또는 보안 계정 관리자 (SAM)는 계정 이름 . 예를 들어 너무

:

$GroupDN = ($ADSearcher.FindAll() | select -first 1).Properties.distinguishedname 

$UserDN = ($ADSearcher.FindAll() | select -first 1).Properties.distinguishedname 

하지만 당신은 이미 입력 CSV에서 DN을 가지고 그룹/사용자가 방금으로 제거-ADGroupMember를 호출 할 수있는 경우 명시 적으로 확인하지 않으려면 개체가 존재하지 않으면 DN 및 catch 오류.

관련 문제