2013-07-09 2 views
2

AD 추출을하고 있는데 "distinguishedname"필드를 정렬하고 사용자 자체의 "상위 OU"를 나타내는 값의 특정 부분 만 유지하려고합니다. "distinguishedname" 모양이 같은Powershell - 특정 단어를 문자열로 유지하십시오.

import-module activedirectory 
get-aduser -filter * -properties *| Select-Object -Property SamAccountName,CN,co,ExtensionAttribute10,extensionAttribute11,extensionAttribute12,EmailAddress,whenCreated,Enabled,LastLogonDate,accountexpirationdate,distinguishedname |Sort-Object -Property Name | Export-Csv -Delimiter ";" -path "u:\theOutFile_NOFILTER_July.txt" 

열 :

distinguishedname 
CN=familly\, user,OU=Remote Users,OU=New York,OU=My,DC=Company,DC=Local 
CN=nameless\, cat,OU=Remote Users,OU=Ottawa,OU=My,DC=Company,DC=Local 
CN=Cameron\, James,OU=Regular Users,OU=Hollywood,OU=My,DC=Company,DC=Local 
CN=Bon\, Jean,OU=regular Users,OU=Springfield,OU=My,DC=Company,DC=Local 

주 7월 10일 시간이 좀 나는 것

나는 모든 사용자의 추가 추출물을이 명령을 실행하는거야 해당 행에 도달 :

CN=Dog\, Cesar,OU=Special Accounts,OU=Regular Users,OU=Alma,OU=My,DC=Company,DC=Local 
CN=keys\, Alicia,OU=Special Accounts,OU=Regular Users,OU=Paris,OU=My,DC=Company,DC=Local 
CN=Clansy\, Door,OU=Map Drives,OU=Remote Users,OU=Rome,OU=My,DC=Company,DC=Local 

이러한 경우 결과가 Remote Users이고 도시가 아닌 Regular Users입니다. 나는 네가 준 명령에서 몇 가지 수정을 시도했지만 헛된 것이었다.

하지만 대신이 결과를 반환 할 첫 번째 명령을 싶습니다

distinguishedname 
New York 
Ottawa 
Hollywood 
Springfield 

내가 방법을 찾기 위해 노력 할 수 없습니다. 사전에

감사

답변

2

선택-Object가 키 "이름이"계산 된 속성의 이름으로 설정되는 속성 이름의 장소에서 해시를 사용하여 계산 된 속성을 만들 수있는 매우 다양한 기능이 있습니다 (효과적으로 열 머리글) 및 "식"은 파이프 라인의 각 개체에 대해 속성 값을 결정하는 코드 블록으로 설정됩니다. 이것은 당신이 원하는 것을 할 것입니다 : 여기

Get-Aduser -Filter * -Properties * | Select-Object -Property SamAccountName,CN,co,ExtensionAttribute10,extensionAttribute11,extensionAttribute12,EmailAddress,whenCreated,Enabled,LastLogonDate,accountexpirationdate,@{Name='distinguishedname'; Expression={[regex]::match($_.distinguishedname,'OU=.+?OU=(.+?),(OU|DC)=').Groups[1].Value}} | Sort-Object -Property Name | Export-Csv -Delimiter ";" -Path "u:\theOutFile_NOFILTER_July.txt" 

는 무슨 일이 일어나고 있는지 고장의 :

  • Name='distinguishedname'이 '에 distinguishedName'라는 새로운 열을 만들 수를 알려줍니다. 그 이름을 사용하여 찾고자하는 출력 예제와 일치 시키지만 기존 속성의 이름 일 필요는 없습니다. 이름을 계산중인 값을보다 잘 설명하는 것으로 변경하는 것이 더 의미가 있습니다. Name="parentOU".
  • [regex]::match$ _ distinguishedname에서 일치 부분을 사용하여 목록의 두 번째 OU 이름을 구분하는 정규식 OU=.+?OU=(.+?),(OU|DC)=을 사용하여 원하는 부분을 추출하는 데 사용됩니다.
  • .Groups[1].Value은 첫 번째 일치 그룹 (첫 번째 괄호 집합의 내용과 일치하는 부분)의 값을 반환합니다. 자체 .Value없이 .Groups [1] 부모의 OU = 다음 이름 제 OU = 에서 전체 일치하는 문자열을 반환. 다음은 일치 그룹 대신 너비가있는 어설 션을 사용하는 것뿐입니다. [regex]::match($_.distinguishedname,'(?<=OU=.+?OU=).+?(?=,(OU|DC)=)').Value
+0

내 초기 게시물을 업데이트 했으므로 해결해야 할 도움이 필요할 수도있는 일부 예외가 있습니다. 당신의 설명은 훌륭하지만, OU =와 "OU = MY"사이의 찌꺼기를 추출하기 위해 변경해야 할 부분을 알 필요가 없습니다. – lotirthos227

+0

당신이 무엇을 요구하는지 잘 모르겠습니다.변경해야 할 것은 ** ** distinguishedname **이라는 단어를'@ {Name = 'distinguishedname'; 식에서 Get()에있는 Groups [1] .Value}}'표현식 = {[regex] :: match ($ _. 고유 이름, 'OU =. +? OU = (. +?), (OU | DC) =' -ADUser 명령. 제 대답에있는 Get-ADUser 명령을 수정 된 버전으로 바꾸십시오. ('Name = 'distinguishedname''을'Name = 'parentOU'' 또는'Name ='City''로 변경하는 것을 추천합니다. 그 컬럼은 더 이상 고유 이름을 포함하지 않기 때문입니다). –

+0

BTW, 고유 이름에서 도시 (상위 OU) 이름을 추출하는 것이 무엇인지 묻는다면 그것은 정규식입니다. 그룹 [1] .Value' 또는'[regex] : [정규식] :: 일치 ($ _. 고유 이름, 'OU =. +? OU = (. +?), (OU | DC) =' :'(? _ = OU =. +? OU =). +? (? =, (OU | DC) =) '). 값은 두 번째 OU의 이름으로 평가됩니다. Get-ADUser에 의해 전달 된 각 개체의 distinguishedname 속성 값. –

관련 문제