2013-10-04 2 views
0

나는 여기에 어려움을 겪고 있는데 아마도 간단한 구문 문제를 안다. 이 변수를 코드 덩어리에 전달하는 방법을 잘 모르겠다.Powershell 변수 전달 - 와일드 카드로 필터

$user = "Some.Person" 

예상대로 작동합니다.

get-aduser -filter {(Samaccountname -eq $user)} 

이되지

get-aduser -filter {(userprincipalname -like $user*)} 

은 아무 소용이 "$user*", "'$user*'"의 변화뿐만 아니라 일부 다른 사람과 시도한다.

최종 결과는 UPN이 UserName과 다른 AD 계정이 있고 활성 계정이 있는지 확인해야하는 사용자 이름 형식의 전체 목록이 있기 때문에 다음과 같이 사용합니다.

Get-ADUser -Filter {(UserPrincipalName -like "$user*") -or (SamAccountName -eq "$user")} -SearchBase "" -Server "MyServer:3268" 
+0

을이 일을합니까 -like "$ user *"} ' –

+0

@ Keith-Hill negative .... 어떤 종류의 오류 또는 경고도 없으며 단지 null 결과입니다. 변수를 텍스트로 바꾸면 문제가 없습니다. 이 cmdlet은 ActiveDirectory 모듈에 포함되어 있지 않으며 와일드 카드로 변수를 전달할 때 도움이되는 참조가 표시되지 않습니다. – ssaviers

답변

1

이상한 행동으로, 이것은 답이 아니라 회전 arround입니다.

Get-ADUser -LDAPFilter "(userprincipalname=$user*)" 

필터에 대한 폴란드어 표기법 시작 부분에 당황 조금이지만, 여기서, 기저의 프로토콜 LDAP를 사용하여 필터링의 자연적인 방법으로는 다음과 같습니다 PERSONNALY, 나는 -LDAPFilter를 사용합니다.

Get-ADUser -LDAPFilter "(|(userprincipalname=$user*)(samAccountName=$user))" 

당신은 Search Filter Syntax에서이 구문에 대한 자세한 정보를 얻을 수 있습니다, 당신은 또한 About_ActiveDirectory_Filter에서 필터를 해당 얻을 수 있습니다.


당신이 정말로 다음 (즉, 너무 자랑하지 I'am) 할 수있는 -Filter 구문을 사용하려면 :`얻 aduser의 -filter {userPrincipalName 사용 :

$userstar = "$user*" 
Get-ADUser -Filter {(userprincipalname -like $userstar) -or (samAccountName -like $user)} 
+0

나는 LDAP 필터 방법을 제공 할 것이다. 꽤 표준 보인다. 하나가 다른 것보다 효율성이 더 좋은지 생각해보십시오. 나는 많은 사용자 계정 쿼리를 처리하는 것이 아니라 단지 궁금하다. – ssaviers

+0

필자의 이해로 LDAP 필터는 PowerShell 필터만큼 효율적입니다. PowerShell 필터가 LDAP 필터 (네이티브 ptotocole)로 변환 되었기 때문입니다. – JPBlanc

+0

답변으로 표시되어 두 가지 방법 모두 작동하고 있습니다. LDAPFilter 접근 방식을 고수합니다. 감사합니다! – ssaviers