Передача переменной Powershell в -Filter с использованием Wild Card

Мне трудно здесь, и я знаю, что это, вероятно, простая проблема синтаксиса. Я не знаю, как передать эту переменную в кусок кода и правильно ли она подтверждена.

$user = "Some.Person"

Это работает, как я ожидал.

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

Это не

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

пробовал с вариациями "$user*", "'$user*'" а также некоторые другие безрезультатно.

конечный результат будет использоваться следующим образом, потому что у нас есть учетные записи AD, в которых UPN отличается от UserName, и у меня есть полный список значений в формате имени пользователя, которые необходимо подтвердить, все еще существуют с активными учетными записями.

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

1 ответ

Решение

Странное поведение, это не ответ, а поворот вокруг; лично я использую -LDAPFilter:

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

Вначале польская запись для фильтра немного смущает, но здесь это естественный способ фильтрации с использованием нижележащего протокола LDAP.

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

Вы можете получить больше информации об этом синтаксисе в синтаксисе фильтра поиска, вы также можете получить соответствующие фильтры в About_ActiveDirectory_Filter.


Если вы действительно хотите использовать -Filter Синтаксис вы можете сделать следующее (я не очень горжусь этим):

$userstar = "$user*"
Get-ADUser -Filter {(userprincipalname -like $userstar) -or (samAccountName -like $user)}
Другие вопросы по тегам