Я пытаюсь написать простой сценарий PowerShell.
Get-ADuser -Filter {GivenName -eq $GivenName $hateList} -SearchBase $Container -Properties displayName,telephoneNumber,department|ForEach-Object {"FullName`t: $($_.displayName)`r`nPhone`t`t: $($_.telephoneNumber)`r`nDepartment`t: $($_.department)`r`n"}
Ошибка, которую я получил: Get-ADUser: Ошибка синтаксического анализа запроса: 'GivenName -eq $ GivenName $ hateList' Сообщение об ошибке: 'синтаксическая ошибка' в позиции: '26'.
Итак, проблема в том, что переменные не заменяются их значениями. Что я делаю не так?
Ответ 1 · рейтинг 1 · Andrey Marchuk
Неправильный параметр фильтра. Если вы хотите, чтобы GivenName был равен $ GivenName, вы должны сделать это следующим образом:
{GivenName -eq $GivenName}
Если вы хотите, чтобы он был равен $ GivenName или $ hateList, что бы это ни было, вы должны попробовать что-то вроде:
{(GivenName -eq $GivenName) -or (GivenName -eq $hateList)}
Проверьте эту ссылку для получения дополнительных фильтров: http://technet.microsoft.com/en-us/library/ee617241.aspx
Вы можете сначала получить список пользователей с таким фильтром:
{GivenName -eq $GivenName}
И сделаем некоторую постобработку:
$users | Where-Object { $hateList -notcontains $_.cn }
Ответ 2 · Shay Levy
Если расширение переменной не работает при передаче переменной, попробуйте передать ее в кавычках:
{GivenName -eq "$GivenName"}