PowerShell CSV Импорт AD-запроса имени пользователя из почтового адреса - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть файл CSV с почтовыми адресами и другими материалами, и я пытаюсь получить от него учетные записи AD.

CSV выглядит следующим образом:

TestUserMail;AccountNumber;TestDisplayName
user.surname@domain.com;1;
user.surname@domain.com;2;
user.surname@domain.com;3;

Код выглядитнапример:

Import-Csv -Path 'C:\temp\test.csv' -delimiter ";" | ForEach-Object {
    $_.TestDisplayName = Get-ADUser -Filter {mail -eq '$_.TestUserName'} |
                         Select-Object -ExpandProperty Name
    $_
} | Format-Table

Проблема в том, что почему-то кажется, что он не может выполнить запрос объявления с переменной $_.TestUserName. В результате всегда пусто. Если я помещаю почтовый адрес прямо в сценарий, он работает просто отлично.

У кого-нибудь есть идеи, что может пойти не так, как это сделать?

Ответы [ 3 ]

1 голос
/ 05 ноября 2019

Проблема находится в вашей переменной расширения.

mail -eq '$_.TestUserName'

имеет 3 проблемы:

  • вы используете одинарные кавычки, поэтому расширение переменной no сделано вообще
  • $ _расширен, а не $ _. TestUserName. Вам необходимо заключить их в $ ()
  • имя столбца TestUserMail

Правильный синтаксис:

mail -eq "$($_.TestUserMail)"
1 голос
/ 05 ноября 2019

Вы используете автоматическую переменную $_ неправильно. Внутри цикла $_ - это один объект, взятый из CSV-файла со свойством 'TestUserMail'

Примерно так должно работать

Import-Csv -Path 'C:\temp\test.csv' -Delimiter ";" | ForEach-Object {
    $user = Get-ADUser -Filter "mail -eq '$_.TestUserMail'" -Properties mail, Name -ErrorAction SilentlyContinue
    # if we found a user with that email address, output the users Name as object
    # so Format-Table will provide a header.
    if ($user) { $user | Select-Object Name }
}
0 голосов
/ 05 ноября 2019

Прежде всего, у вас есть ошибка в фильтре. Там должно быть $ _. TestUserMail вместо TestUserName. Во-вторых, ваше выражение в одинарных кавычках не раскрывается. это работает.

 Import-Csv -Path 'C:\tmp\test.csv' -delimiter ";" | ForEach-Object {
    $_.TestDisplayName = get-aduser -filter "mail -eq '$($_.TestUserMail)'" | Select-Object -ExpandProperty Name
 $_ } | Format-Table

Взгляните на https://docs.microsoft.com/en-us/powershell/module/addsadministration/get-aduser?view=win10-ps

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