Введите .txt файл и ищите Active Directory и выводите в .CSV - PullRequest
0 голосов
/ 27 ноября 2018

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

Я запустил следующий код

Get-Content c:\test\users.txt | 
    Foreach-Object {Get-ADUser -filter "displayName -like '$($_)'" |
    Select-Object SamAccountName,name} |
    Export-Csv c:\test\output1.csv

При этом выводился список имен пользователей и имен, однако выводились только успешные разрешения имен.

То, что я хотел бы сделать, - это иметь список имен для проверки.Это может привести к ошибке по двум причинам:

  1. Неверное имя
  2. Пользователь покинул организацию.

Например, input.txt будет список имен в формате отображаемого имени.

Вывод Я хотел бы:

Original Input        Exists in AD        Username
Name 1                True                Username1
Name 2                True                Username2 
etc.                  False               Check 

Заранее большое спасибо

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Вы можете создать пользовательский объект в конвейере.Также использование фильтра LDAP anr (разрешение неоднозначных имен) может лучше работать со списком имен, поскольку он ищет несколько свойств пользователей для поиска совпадений.

Решение может быть примерно таким:

Get-Content "C:\test\users.txt" |
Foreach-Object {$user=get-aduser -ldapfilter "(anr=$_)"; `
[PSCustomObject]@{Name=$_; Username=$user.samaccountname; Exists=&{$user -ne $null}}} |
Export-Csv "c:\test\output1.csv"
0 голосов
/ 27 ноября 2018

Использование этого Join-Object командлета из галереи PowerShell :

Get-Content .\Users.txt | ForEach {[PSCustomObject]@{Name=$_; InList=$True}} |
FullJoin (Import-Csv .\output1.csv) Name

Выводит что-то вроде:

Name  InList SamAccountName
----  ------ --------------
name1   True Sam1
name2   True
name5   True Sam5
Name3        Sam3
0 голосов
/ 27 ноября 2018

Вы должны проверить, было ли что-то возвращено из Get-ADUser и сделать что-то еще, если у вас ничего нет.

Я думаю, что это должно сделать то, что вы ищете, но вы можете настроить это:

Get-Content c:\test\users.txt | Foreach-Object {
    $user = Get-ADUser -filter "displayName -like '$($_)'" -Properties DisplayName,SamAccountName,Name
    if ($user) {
        $user | Select-Object DisplayName,SamAccountName,Name
    } else {
        $_ | Select-Object @{Label="DisplayName";Expression={"$_"}},@{Label="SamAccountName";Expression={""}},@{Label="Name";Expression={""}}
    }
} |export-csv c:\test\output1.csv

Если ничего не найдено, будет выведено только отображаемое имя из файла.Все, что обозначения Label= и Expression=, это чтобы убедиться, что он выводит те же свойства, которые выводятся, когда что-то найдено , поэтому список можно собрать вместе.

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