Я собираюсь объяснить это шаг за шагом. Во-первых, вот код, который я пытаюсь заставить работать:
$Users = Get-Content c:\textfile.txt
foreach ($user in $users) {Get-ADuser -Filter {UserPrincipalName -like "$user*"}}
Так что, когда я запускаю это, он ничего не возвращает, что, я знаю, неправильно. Поэтому я использовал точки останова, чтобы посмотреть поближе. Я обнаружил, что переменная $ user действительно заполняется правильными значениями. В качестве теста я заменил $ user в фильтре одним значением (чтобы оно выглядело как код ниже) из текстового файла и прошел через него.
$Users = Get-Content c:\textfile.txt
foreach ($user in $users) {Get-ADuser -Filter {UserPrincipalName -like "1234567890*"}}
Вот где это становится интересным. Я поставил точку останова на строке foreach, и когда я пропустил ее в первый раз, на экран ничего не выводилось, кроме пустой строки. Когда я прошел через него во второй раз, выводился, как будто команда запускалась дважды, то есть объект пользователя с именем участника-пользователя, таким как 1234567890 *, записывал на экран дважды.
В качестве еще одной подсказки я попробовал следующую строку:
Get-Content c:\textfile.txt | Get-ADuser -Filter {UserPrincipalName -like "$_*" }
И появляется сообщение о том, что параметр Filter не принимает конвейерный ввод. Я не знаю, означает ли это что-нибудь, но я подозреваю, что это не так, поскольку я на самом деле не использую конвейер в своем исходном коде. С командлетом Get-ADUser это, вероятно, что-то сверхосновное, которое я не отслеживаю, хотя некоторое время уже использовал Powershell.