2017-11-07 1 views
0

내가 언급 한 필드에 값에 공백이있는 AD의 작은 문제를 해결하려고합니다.ADSI의 legacyExchangeDN 값을 PowerShell로 바꾸기

예 :

legacyExchangeDN : /o= First Organization/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=6131a3a42ca946b98cc146345cfd0c2e-Ron E 

은 다음과 같아야합니다

legacyExchangeDN : /o=First Organization/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=6131a3a42ca946b98cc146345cfd0c2e-Ron E 

이 여러 사용자를 초래하고 내가 수동으로 AD의 값이 Attribute Editor를 업데이트 할 수 있습니다,하지만 난 할 수 있도록 기대했다 이것을 자동화합니다. 여기 쉽게 뭔가 빠진 것 같은

Set-ADUser : Multiple values were specified for an attribute that can have only one value 
At line:1 char:1 
+ Set-ADUser reyer -Replace @{legacyExchangeDN="/o= ","/o="} 

느낀다,하지만 난 그것을 찾을 수 없습니다 :

#List all users to check existing values 

$ADUserList = Get-ADUser -Filter* -Properties * | fl name, EmailAddress, legacyExchangeDN 

#Replace value with space with value without space 

Set-ADUser reyer -Replace @{legacyExchangeDN="/o= ","/o="} 

두 번째 줄은 다음과 같은 오류가 발생합니다 :

는 여기에 지금까지 무슨이다. 한 명의 사용자와이를 테스트하고 있습니다. 한 번 테스트 한 스크립트에서 나머지 사용자에 대한 값을 대체하고 싶습니다. 필드에 공간을 두는 기준과 일치하는 사용자를 대상으로 할 수 있다면 그 공간을 저장하거나 배관하는 데 도움이 될 것입니다.

  • 바로 교체 ---> "/ O ="는의 legacyExchangeDN의 텍스트 값에 존재하는 공간 (들)

    1. 대상 사용자 :

      내 최종 결과는 같을 것이다 "/ o = 첫 번째 조직/ou = Exchange 관리 그룹 (FYDIBOHF23SPDLT)/cn =받는 사람/cn = 6131a3a42ca946b98cc146345cfd0c2e-Ron E"라는 텍스트 값의 나머지 부분을 그대로 유지하면서 "/ o =

    귀하의 시간과 관심에 진심으로 감사드립니다!

  • +0

    스왑 선택의 FL을하고 잘 작동하지 않는 경우를 참조하십시오. – mjolinor

    답변

    0
    $Users = Get-ADUser -Filter { legacyExchangeDN -like '*/o= *' } -Properties @('name','EmailAddress','legacyExchangeDN') 
    ForEach ($User in $Users) 
    { 
        $Replace = $User.legacyExchangeDN -replace '/o=\s','/o=' 
        Set-ADUser -Identity $User -Replace @{ legacyExchangeDN = $Replace } 
    
        Write-Host ('Updated "{0}" ({1}) to "{2}"' -f 
         @($User.name,$User.EmailAddress,$Replace)) 
    } 
    

    이것은 더 빠릅니다. Mantra는 Filter Left, Format Right입니다. Set-ADUser takes an ADUser object. -Replace[HashTable]을 가져 오며 LDAP에 표시된대로 새 값을 명명 된 속성에 할당합니다.

    (갱신 : foreach는 제거 파이프 라인)


    가, 로깅을 구현와 Write-Host 교체하려면 :

    'Updated "{0}" ({1}) to "{2}"' -f @($User.name,$User.EmailAddress,$Replace) | 
        Out-File -FilePath "$env:UserProfile\ADChanges.txt" -Append 
    
    +1

    @CharlieEcho'-Filter'는'-match'를 지원하지 않습니다. 지원되는 작업으로 업데이트했습니다. – TheIncorrigible1

    +0

    @CharlieEcho 편집하는 것을 잊어 버린 또 다른 것을 수정했습니다. 내 솔루션은 그대로 최신 편집 작업해야합니다. – TheIncorrigible1

    +0

    출력 부분에 대해 나에게 arguement 오류가 발생했지만 현재 코드가 작동했습니다. Write-Host : 매개 변수 'ForegroundColor'에 대한 인수가 없습니다. 'System.ConsoleColor'유형의 매개 변수를 지정하고 다시 시도하십시오. 줄에 : 7 문자 : 47 + Write-Host '업데이트 됨 {0} ""{2} "-f + ~~ + 카테고리 정보 : InvalidArgument : (:) [ 호스트], ParameterBindingException + FullyQualifiedErrorId : MissingArgument, Microsoft.PowerShell.Commands.WriteHostCommand * –