Powershell - невозможно передать переменную в командлет - PullRequest
0 голосов
/ 27 сентября 2019

Когда я держу переменную и передаю ее в командлет, я получаю противоречивые результаты.Может быть, я просто неправильно использую переменные в powershell?Если бы был способ увидеть точно строку кода, которую мой код Visual Studio отправлял во время выполнения, это было бы полезно.

Мой код возвращает объект $ null при выполнении этих первых двух фильтров.Я подтвердил, что $ username на самом деле содержит строку «userLoginName», но, похоже, она не передается правильно в командлет Get-ADUser.

PS C:\> $username = "userLoginName"

PS C:\> Get-ADUser -Filter {SAMAccountName -eq "$($username)"}
PS C:\> Get-ADUser -Filter {SAMAccountName -eq "$username"}
PS C:\> Get-ADUser -Filter {SAMAccountName -eq "userLoginName"}

Почему это только третья команда -filterработает успешно?Первые два возвращают $ null, а не исключение типа UserNotFound или что-то еще.Что я здесь не так делаю?У меня просто нет понятия, как использовать переменные в powershell (да)?Извините за то, что вы новичок, но спасибо за ваше время.

1 Ответ

0 голосов
/ 27 сентября 2019

См. сообщение .AD вызывает параметр '1003 * * по какой-то причине не любит принимать строковые переменные как часть ScriptBlock (вы можете прочитать пост более подробно).Но передача -Filter в виде строки должна работать.

Get-ADUser -Filter "SAMAccountName -eq '$username'"

В качестве альтернативы, если вы просто хотите найти пользователя AD с SAMAccountName, вы можете просто сделать Get-ADUser -Identity $username,Это, наверное, проще.Преимущество (или иногда следствие) использования параметра -Filter заключается в том, что, как вы обнаружили, он не будет выдавать исключение, если пользователь не найден.Если вы используете параметр -Identity, он выдаст исключение, если пользователь не найден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...