none
Заполнение атрибутов пользователя AD с помощью powershell RRS feed

  • Вопрос

  • Приветствую. 

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

    Тестовый файл выглядит так:

    Name;Department;Title;StreetAddress
    Проверка Заполнение AD;ОДИН;ДВА;1111
    Проверка Заполнение Создание;ОДИН;ДВА;222
    Проверка Отображение Заполнение;ОДИН;ДВА;333
    Иванов Иван Иванович;ОДИН;ДВА;444

    Сам скрипт:

    Import-Module ActiveDirectory $csv = Import-Csv -Path C:\Users\admin\Documents\user-test-utf.csv -Delimiter ";" #$csv $OU = "OU=test,DC=company,DC=com" foreach ($i in $csv) { $Name = $i.Name $Department = $i.Department $Title = $i.Title $StreetAddress = $i.StreetAddress $accname = (Get-ADUser -Filter {DisplayName -like $Name} -searchbase $OU).SamAccountName

    $accname #Set-ADUser $accname -Department $Department -Title $Title -StreetAddress $StreetAddress }

    Проблема в том, что вывод переменной $accname показывает всего две учетки, хотя Get-ADUser должен найти четыре. В тестовом контейнере эти четыре учетки есть. На боевом домене скормил скрипту оригинальный файл с пользователями, так Get-ADUser нашел всего 17 учеток из ~500

    Подскажите, я уже голову сломал, что я делаю не так :)

    27 марта 2017 г. 11:20

Ответы

  • Неправильно заполняете поле Name,лишние пробелы и т.д. 

    • Выгрузить правильно данные из AD и уже поправить атрибуты
    • Использовать SamAccountName, вместо Name
    Get-ADUser -Filter * -Properties DisplayName,Name,Department,Title,StreetAddress -SearchBase "OU=MY,DC=Contoso,Dc=Com"

    • Помечено в качестве ответа KazunEditor 3 апреля 2017 г. 5:59
    27 марта 2017 г. 11:33
    Отвечающий

Все ответы

  • Неправильно заполняете поле Name,лишние пробелы и т.д. 

    • Выгрузить правильно данные из AD и уже поправить атрибуты
    • Использовать SamAccountName, вместо Name
    Get-ADUser -Filter * -Properties DisplayName,Name,Department,Title,StreetAddress -SearchBase "OU=MY,DC=Contoso,Dc=Com"

    • Помечено в качестве ответа KazunEditor 3 апреля 2017 г. 5:59
    27 марта 2017 г. 11:33
    Отвечающий
  • Никаких лишних пробелов.

    Выгружать данные тоже не вариант: мне присылают файл где нет имен учетных записей пользователей, а только ФИО. Выгружать, потом сопоставлять данные из AD с тем что присылают... Ну это как-то грустно :) Поэтому сначала нужно пользователя найти в AD, и оттуда уже получить SamAccountName.

    27 марта 2017 г. 11:46
  • Для того, чтобы найти надо знать , что в АД есть корректная информация, которая идентична в файле. Сейчас данные в АД и файле расходятся. 

    Приводите пример вывода:

    Get-Content user-test-utf.csv

    и

    Get-ADUser -Filter * -Properties DisplayName,Name,Department,Title,StreetAddress -SearchBase $OU | Ft DisplayName,Name,Department,Title,StreetAddress



    27 марта 2017 г. 11:54
    Отвечающий
  • PS C:\Users\admin> 
    $OU = "OU=test,DC=company,DC=com"
    Get-Content -Path C:\Users\admin\Documents\user-test-utf.csv
    Name;Department;Title;StreetAddress
    Проверка Заполнение AD;РАЗ;ДВА;1111
    Проверка Заполнение Создание;РАЗ;ДВА;222
    Проверка Отображение Заполнение;РАЗ;ДВА;333
    Иванов Иван Иванович;РАЗ;ДВА;444
    Тестовый Тест Тестович;РАЗ;ДВА;555555
    
    Get-ADUser -Filter * -Properties DisplayName,Name,Department,Title,StreetAddress -SearchBase $OU | Ft DisplayName,Name,Department,Title,StreetAddress
    DisplayName                     Name                            Department Title StreetAddress
    -----------                     ----                            ---------- ----- -------------
    Проверка Заполнение AD          Проверка Заполнение                                           
    Проверка Отображение Заполнение Проверка Отображение Заполнение                               
    Проверка Заполнение Создание AD Проверка Заполнение Создание AD                               
    Иванов Иван Иванович AD         Иванов Иван Иванович AD                                       
    Тестовый Тест Тестович          Тестовый Тест Тестович

    27 марта 2017 г. 12:16
  • И вывод:

    Import-Csv -Path C:\Users\admin\Documents\user-test-utf.csv -Delimiter ";" | Ft Name,@{n="Count";e={$_.Name.Length}}

    c

    Get-ADUser -Filter * -Properties DisplayName -SearchBase $OU | ft DisplayName,@{n="Count";e={$_.DisplayName.Length}}

    и заодно:

    Import-Csv -Path C:\Users\admin\Documents\user-test-utf.csv -Delimiter ";" | Foreach {
    	Get-ADuser -Filter "DisplayName -eq '$($_.Name)'"
    }


    • Изменено KazunEditor 27 марта 2017 г. 12:36
    27 марта 2017 г. 12:35
    Отвечающий
  • Import-Csv -Path C:\Users\admin\Documents\user-test-utf.csv -Delimiter ";" | Ft Name,@{n="Count";e={$_.Name.Length}}
    
    Name                            Count
    ----                            -----
    Проверка Заполнение AD             22
    Проверка Заполнение Создание       28
    Проверка Отображение Заполнение    31
    Иванов Иван Иванович               20
    Тестовый Тест Тестович             22

    Get-ADUser -Filter * -Properties DisplayName -SearchBase $OU | ft DisplayName,@{n="Count";e={$_.DisplayName.Length}}
    DisplayName                     Count
    -----------                     -----
    Иванов Иван Иванович AD            23
    Тестовый Тест Тестович             22
    Проверка Заполнение AD             22
    Проверка Отображение Заполнение    31
    Проверка Заполнение Создание AD    31

    Import-Csv -Path C:\Users\admin\Documents\user-test-utf.csv -Delimiter ";" | Foreach {
    	Get-ADuser -Filter "DisplayName -eq '$($_.Name)'"
    }
    
    
    DistinguishedName : CN=Проверка Заполнение,OU=test,DC=company,DC=com
    Enabled           : True
    GivenName         : Заполнение
    Name              : Проверка Заполнение
    ObjectClass       : user
    ObjectGUID        : 6aeb602d-2490-4f7e-af92-0b60c94bf0c7
    SamAccountName    : proverka.sv
    SID               : S-1-5-21-1112449896-297553042-964272827-30854
    Surname           : Проверка
    UserPrincipalName : proverka.sv@company.com
    
    DistinguishedName : CN=Проверка Отображение Заполнение,OU=test,DC=company,DC=com
    Enabled           : True
    GivenName         : Заполнение
    Name              : Проверка Отображение Заполнение
    ObjectClass       : user
    ObjectGUID        : 86651b40-a3a1-4684-af8c-d12c2262d37f
    SamAccountName    : proverka2.sv
    SID               : S-1-5-21-1112449896-297553042-964272827-30855
    Surname           : Проверка Отображение
    UserPrincipalName : proverka2.sv@company.com
    
    DistinguishedName : CN=Иванов Иван Иванович ТУ,OU=TU,OU=test,DC=company,DC=com
    Enabled           : True
    GivenName         : Иван Иванович
    Name              : Иванов Иван Иванович ТУ
    ObjectClass       : user
    ObjectGUID        : 34eba304-b01b-43ed-bd52-f1d38efe23e8
    SamAccountName    : ivanov_ii.tu
    SID               : S-1-5-21-1112449896-297553042-964272827-13433
    Surname           : Иванов
    UserPrincipalName : Ivanov_II.TU@company.com
    
    DistinguishedName : CN=Тестовый Тест Тестович,OU=test,DC=company,DC=com
    Enabled           : True
    GivenName         : Тест Тестович
    Name              : Тестовый Тест Тестович
    ObjectClass       : user
    ObjectGUID        : c5415217-f260-4a38-9d11-70d03cff6dfd
    SamAccountName    : testovyj_tt.sv
    SID               : S-1-5-21-1112449896-297553042-964272827-30862
    Surname           : Тестовый
    UserPrincipalName : testovyj_tt.sv@company.com
    Кстати, еще тоже любопытно что пользователя Иванов Иван Иванович, он нашел в другом контейнере, а пользователя с таким же именем в тестовом контейнере он проигнорировал, так же как и пользователя Проверка Заполнение Создание AD.
    27 марта 2017 г. 12:55
  • "Кстати, еще тоже любопытно что пользователя Иванов Иван Иванович, он нашел в другом контейнере, а пользователя с таким же именем в тестовом контейнере он проигнорировал, так же как и пользователя Проверка Заполнение Создание AD." - В файле Иванов Иван Иванович               20 ,  в AD Иванов Иван Иванович AD            23.  - Данные не совпадают.

    Т.е. которые данные в файле правильные, тех он и вывел. Приводите к одному виду. Итого: 3 правильные записи.

    Иванов Иван Иванович AD            23 - 
    Тестовый Тест Тестович             22 +
    Проверка Заполнение AD             22 +
    Проверка Отображение Заполнение    31 +
    Проверка Заполнение Создание AD    31 -


    • Изменено KazunEditor 27 марта 2017 г. 13:05
    27 марта 2017 г. 13:02
    Отвечающий
  • "В файле Иванов Иван Иванович               20 ,  в AD Иванов Иван Иванович AD            23.  - Данные не совпадают." - но почему он нашел пользователя Иванов Иван Иванович ТУ и не нашел Иванов Иван Иванович AD? Оба пользователя отличаются по длине на три знака.
    27 марта 2017 г. 13:22
  • "В файле Иванов Иван Иванович               20 ,  в AD Иванов Иван Иванович AD            23.  - Данные не совпадают." - но почему он нашел пользователя Иванов Иван Иванович ТУ и не нашел Иванов Иван Иванович AD? Оба пользователя отличаются по длине на три знака.

    Потому что в DisplayName есть AD, в файле отсутствует, почему нашел Иванов Иван Иванович ТУ -  у него в свойстве DisplayName , нет ТУ, поэтому и нашел.

    Get-ADUser -Filter "Name -eq 'Иванов Иван Иванович ТУ'" -Properties DisplayName 

    27 марта 2017 г. 13:26
    Отвечающий