Powershell 필터링 또는 특정 개체 선택

Powershell 필터링 또는 특정 개체 선택

따라서 이 명령을 실행하면 다음과 같습니다.

Get-ADUser -Filter 'Name -like "*svc*"' | select Name, DistinguishedName

나는 다음과 같은 결과를 얻습니다.

SamAccountName       DistinguishedName
--------------       -----------------
svc_myaccount        CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com

첫 번째 OU만 제공하도록 DistinguishedName을 필터링하고 싶습니다. "서비스 계정"이 OU 필드의 유일한 항목이 될 것이라고는 생각하지 않는다는 점을 덧붙여야 합니다. 결과는 다음과 같습니다.

SamAccountName       DistinguishedName
--------------       -----------------
svc_myaccount        OU=Service Accounts

저는 필터를 사용하여 이것을 원라이너로 만들려고 노력했지만 운이 없었습니다. DistinguishedName을 분리하려면 명령을 분리하고 더 많은 코드에 구체화해야 할 수도 있습니다. 나는 이것에 대한 간단한 해결책이 있다고 생각하는데, 나는 그것을 더 복잡하게 만들고 있습니다. 어떤 생각이나 아이디어가 있나요?

답변1

좋은 답변을 찾았습니다여기. Get-ADUser다음 문으로 연결하세요 Select-Object.

select Name,@{l='DistinguishedName';e={$_.DistinguishedName.split(',')[1].split('=')[1]}}

출력은 다음과 같습니다

Name              DistinguishedName
----              -----------------
svc_myaccount     Service Accounts

답변2

필터는 문자열을 구문 분석하지 않으며 요청한 데이터만 반환합니다. DN, 그룹 문자열, 배열 등 단일 문자열이 아닌 항목을 가져오는 경우 하위 문자열이나 정규식을 사용하여 직접 구문 분석해야 합니다.

정규식과 분할을 사용하는 하나의 옵션은 다음과 같습니다.

# Parse the DN for the OU array list
Remove the CN and split
('CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com' -replace 'CN=[^=]*,') -split(',')

# Results

OU=Service Accounts
OU=me3
OU=me2
DC=me
DC=com

#Get just the first element of the above array - arrays are zero based
(('CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com' -replace 'CN=[^=]*,') -split(','))[0]

#Results

OU=Service Accounts

계산된 속성에 위의 접근 방식 사용

# Pulling live from ADDS
Get-ADUser -Filter 'Name -like "*svc*"' | 
Select-Object -Property Name, 
@{Name='DistinguishedName';Expression = { (($_.DistinguishedName -replace 'CN=[^=]*,') -split(','))[0]}}

아니면 계산된 속성으로...

 ('CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com').split(',|=')[3]

... 분할 시 또는(흘린 두 개의 찌르기 사이의 파이프)를 사용합니다. .split에서도 작동하는 정규식입니다.

관련 정보