0

계정이 비활성화되었지만 cmdlet을 올바르게 결합하는 방법이 확실하지 않은 사용자 목록에 대한 AD 그룹 구성원을 제거하려고합니다. 이것은 일반적으로 좋은 생각Powershell 2.0 - 사용하지 않는 계정 목록에 대한 그룹 구성원 제거

Remove-ADPrincipalGroupMembership : Cannot convert 'Microsoft.ActiveDirectory.Management.ADPropertyValueCollection' to 
the type 'Microsoft.ActiveDirectory.Management.ADPrincipal' required by parameter 'Identity'. Specified method is not s 
upported. 
At line:1 char:160 
+ Import-CSV T:\temp\users.csv | ForEach-Object {Get-ADPrincipalGroupMembership -Identity $_.member | ForEach-Object {R 
emove-ADPrincipalGroupMembership -Identity <<<< $_.member -MemberOf SamAccountName}} 
    + CategoryInfo   : InvalidArgument: (:) [Remove-ADPrincipalGroupMembership], ParameterBindingException 
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.RemoveADPrincipalGro 
    upMembership 

답변

2

내 시도 ...

Import-CSV T:\temp\users.csv | ForEach-Object {Get-ADPrincipalGroupMembership -Identity $_.member | ForEach-Object {Remove-ADPrincipalGroupMembership -Identity $_.member -MemberOf SamAccountName}} 

users.csv (아래 파일 내용) 나는 다음과 같은 메시지가

member 
testuser1 
testuser2 
testuser3 

입니다 ... 문제를 해결할 수있는 열쇠가 내가 읽고있는 데이터에있을 수 있으므로 작업중인 데이터의 샘플을 제공하십시오 (이 경우 users.csv의 내용은 다음과 같습니다). n. 그러나이 경우 나는 데이터를 보지 않고 무엇이 당신을 트립하는지 볼 수 있다고 믿습니다.

파이프 라인의 각 단계에서 $ _은 파이프 라인의 이전 단계에서 각 개체의 값이 설정된다는 점에 유의하십시오. $ _. member은 파이프 라인 전체에서 일관된 값을 가지고 있지 않습니다.

두 번째 단계에서 ForEach-Object {Get-ADPrincipalGroupMembership -Identity $_.member, $ _. 구성원은 CSV 파일의 "구성원"열의 값으로 평가됩니다. 세 번째 단계 인 ForEach-Object {Remove-ADPrincipalGroupMembership -Identity $_.member -MemberOf SamAccountName}에서는 두 번째 단계에서 전달 된 그룹 개체의 속성 인 구성원으로 평가됩니다. 이러한 개체에는 구성원 속성이 없으므로 $ _. 구성원은 null입니다. 당신이 할 수있는 일

첫 번째 를 ForEach-객체 필터의 시작 부분에 변수로 CSV 파일의 값을 (사용자 이름, 내가 감히?)을 캡처하고 사용하고있는 -Identity 인수로 :.

Import-Csv T:\temp\users.csv | %{ 
    $user = $_.member 
    Get-ADPrincipalGroupMembership -Identity $user | %{ 
    Remove-ADPrincipalGroupMembership -Identity $user -MemberOf $_.SamAccountName 
    } 
} 

또한, 참고 -MemberOf의 인수는 $ _ SAMAccountName을해야한다고. .

Get-ADPrincipalGroupMembership -Identity $user | % SamAccountName 

그러나, 스크립트 블록에 당신이 $ _ SAMAccountName을필요합니다 PowerShell을 3.0에서 다음 당신에게 각 그룹의 SAMAccountName을 속성을 제공 할 것입니다. PowerShell 2.0 (이 질문에 태그를 추가 했음)에서는 노출 된 속성 이름을 전혀 사용할 수 없습니다.

+0

우수! 그게 효과가 있었어! 그리고 분명한 설명을 해주셔서 감사드립니다. – user2731132

+0

동일한 해결 방법을 찾으려면 위의 게시물을 다른 사용자가 참조하도록 users.csv로 업데이트하십시오. 고마워, Adi Inbar – user2731132

+0

@ user2731132 답변을 보내 주신 의견을 게시하는 대신 StackOverflow에서 질문에 답변 할 때마다 (종종 MOD가 삭제되는 경우가 많음) 녹색을 클릭하여 가장 좋은 답변을 '수락'으로 표시하십시오. 대답의 왼쪽에있는 체크 마크 : meta.stackoverflow.com/help/someone-answers. 또한 답을 받아 들일 때 +2 담당자를 얻습니다. ;) –