none
Проблема с импортом данных из csv-файла в PowerShell+вопрос по самому скрипту. RRS feed

  • Вопрос

  • Добрый день. Есть csv файлик ,где указаны Display Name пользователей Active Directory. Так сложилось, что в ячейке может быть одна ФИО, а может быть несколько, через запятую. Разделить их и записать построчно я не могу(то есть 1 ФИО на каждой строке), т.к. это специфика выгрузки по предыдущей задаче. Цель такая-мне нужно выгрузить по каждой ФИО email+статус учетной записи(включена или отключена) и записать обратно в тот же файл, чтобы в итоге получилось примерно следующее: Иванов Иван Иванович(ivanovii@pochta.ru, enabled)

    1) При импорте csv-файла в переменную $users , где в ячейке несколько ФИО через запятую, в переменную почему-то записывается только первая фамилия и скрипт переходит к следующей ячейке, а остальные ФИО он не видит. Подскажите,в чем проблема?


    2) Подскажите пожалуйста,как вообще в целом брать из get-aduser  атрибуты mail и enabled и дозаписывать их после ФИО в ячейку csv?(Иванов Иван Иванович(ivanovii@pochta.ru, enabled)

    Заранее спасибо!

    26 июня 2019 г. 15:34

Все ответы

  • Добрый день. Есть csv файлик ,где указаны Display Name пользователей Active Directory. Так сложилось, что в ячейке может быть одна ФИО, а может быть несколько, через запятую. Разделить их и записать построчно я не могу(то есть 1 ФИО на каждой строке), т.к. это специфика выгрузки по предыдущей задаче. Цель такая-мне нужно выгрузить по каждой ФИО email+статус учетной записи(включена или отключена) и записать обратно в тот же файл, чтобы в итоге получилось примерно следующее: Иванов Иван Иванович(ivanovii@pochta.ru, enabled)

    1) При импорте csv-файла в переменную $users , где в ячейке несколько ФИО через запятую, в переменную почему-то записывается только первая фамилия и скрипт переходит к следующей ячейке, а остальные ФИО он не видит. Подскажите,в чем проблема?


    2) Подскажите пожалуйста,как вообще в целом брать из get-aduser  атрибуты mail и enabled и дозаписывать их после ФИО в ячейку csv?(Иванов Иван Иванович(ivanovii@pochta.ru, enabled)

    Заранее спасибо!

    покажите пример файла с одним и несколькими фио, ато справки ради форматов (стандартных) csv есть гораздо больше одного

    The opinion expressed by me is not an official position of Microsoft

    26 июня 2019 г. 15:42
    Модератор
  • Приложил CSV для примера: https://dropmefiles.com/Zvsin
    27 июня 2019 г. 7:38
  • Добрый день. Есть csv файлик ,где указаны Display Name пользователей Active Directory. Так сложилось, что в ячейке может быть одна ФИО, а может быть несколько, через запятую. Разделить их и записать построчно я не могу(то есть 1 ФИО на каждой строке), т.к. это специфика выгрузки по предыдущей задаче. Цель такая-мне нужно выгрузить по каждой ФИО email+статус учетной записи(включена или отключена) и записать обратно в тот же файл, чтобы в итоге получилось примерно следующее: Иванов Иван Иванович(ivanovii@pochta.ru, enabled)

    1) При импорте csv-файла в переменную $users , где в ячейке несколько ФИО через запятую, в переменную почему-то записывается только первая фамилия и скрипт переходит к следующей ячейке, а остальные ФИО он не видит. Подскажите,в чем проблема?


    2) Подскажите пожалуйста,как вообще в целом брать из get-aduser  атрибуты mail и enabled и дозаписывать их после ФИО в ячейку csv?(Иванов Иван Иванович(ivanovii@pochta.ru, enabled)

    Заранее спасибо!

    покажите пример файла с одним и несколькими фио, ато справки ради форматов (стандартных) csv есть гораздо больше одного

    The opinion expressed by me is not an official position of Microsoft

    а на выходе вы тоже хочете получить 2 строки в первой из которых будут записаны почты и статусы enabled?

    Вот пример как работать с такими псевдо csv

    get-content C:\TMP\users.csv | foreach {
       if ($_ -notmatch 'Users'){
          $_ -split ',\s*'| Foreach {
             # Ваш код можете писать тут. $_ будет содержать одного пользователя
             "User $_"
          }
       }
    }


    The opinion expressed by me is not an official position of Microsoft


    27 июня 2019 г. 7:51
    Модератор
  • Верно. Мне нельзя дробить фамилии по отдельности из первой ячейки. Все фамилии остаются также через запятую+mail+статусы
    27 июня 2019 г. 7:55
  • Верно. Мне нельзя дробить фамилии по отдельности из первой ячейки. Все фамилии остаются также через запятую+mail+статусы
    а как вы будете потом сопоставлять фио с мейлами и статусами если это будет 1 большой ком? не подумайте что мне жалко, просто немогу придумать обстоятельств где это могло бы быть полезным

    The opinion expressed by me is not an official position of Microsoft

    27 июня 2019 г. 8:05
    Модератор
  • Обстоятельства такие, что у меня выгрузка из Sharepoint Online,где есть столбец с ФИО пользователей,которые состоят в группе сайта. И вот заказчику,как обычно,срочно, потребовалось чтобы помимо фио был еще email+статус у.з. Средствами Sharepoint это сделать не получится. Поэтому мне оставалось только выгрузить этот столбец и попытаться получить данные из AD.

    Насчет сопоставления данных, подкинули мне идею, но в PowerShell я не силен, поэтому пока не разобрался. План таков:

    с помощью import-csv считываешь данные из файла,

    перебираешь по одному (1)

    с помощью $_.'члены группы' -split ',' разделяешь содержимое ячейки с фио на части, записываешь во временную переменную типа массив

    перебираешь элементы массива, для каждого (2)

    получаешь почту по фио

    объединяешь фио и почту в одну переменную

    записываешь обратно в массив

    объединяешь временный массив в одну строку с помощью -join ','        (2)

    записываешь обратно в объект полученный (1)

    27 июня 2019 г. 8:15
  • я в 1 и 2 потерялся но не суть.

    вы код выше видели?


    The opinion expressed by me is not an official position of Microsoft

    27 июня 2019 г. 8:39
    Модератор
  • я в 1 и 2 потерялся но не суть.

    вы код выше видели?


    The opinion expressed by me is not an official position of Microsoft

    Да,видел,спасибо. Сейчас он видит все фамилии)
    27 июня 2019 г. 8:41
  • я в 1 и 2 потерялся но не суть.

    вы код выше видели?


    The opinion expressed by me is not an official position of Microsoft

    Да,видел,спасибо. Сейчас он видит все фамилии)

    get-content C:\TMP\users.csv | foreach {
        if ($_ -notmatch 'Users'){
            $users = $_
            $bundle = @()
            $users -split ',\s*'| Foreach {
                # Ваш код можете писать тут. $_ будет содержать одного пользователя
                "User $_"
                $bundle += Get-AdUser $_ -Properties Email, Enabled | select Email, Enabled
            }
            '' | Select-Object @{n='Users';e={$users}},@{n='Emails';e={$bundle.Email -join ', '}},@{n='Enabled';e={$bundle.Enabled -join ', '}}
        }
    } | Export-Csv C:\TMP\users.csv -Delimiter ';' -Encoding Default
    


    The opinion expressed by me is not an official position of Microsoft

    27 июня 2019 г. 9:19
    Модератор
  • я в 1 и 2 потерялся но не суть.

    вы код выше видели?


    The opinion expressed by me is not an official position of Microsoft

    Да,видел,спасибо. Сейчас он видит все фамилии)


    get-content C:\TMP\users.csv | foreach {
        if ($_ -notmatch 'Users'){
            $users = $_
            $bundle = @()
            $users -split ',\s*'| Foreach {
                # Ваш код можете писать тут. $_ будет содержать одного пользователя
                "User $_"
                $bundle += Get-AdUser $_ -Properties Email, Enabled | select Email, Enabled
            }
            '' | Select-Object @{n='Users';e={$users}},@{n='Emails';e={$bundle.Email -join ', '}},@{n='Enabled';e={$bundle.Enabled -join ', '}}
        }
    } | Export-Csv C:\TMP\users.csv -Delimiter ';' -Encoding Default


    The opinion expressed by me is not an official position of Microsoft

    Спасибо, возникали ошибки-чутка поправил. 1) Поскольку искать в AD надо по ФИО, то нужен фильтр по DisplayName. 2) Свойство с п/я =mail

    Вот что получилось в итоге, если я правильно написал фильтр:

    get-content C:\temp\testusers.csv | foreach {
        if ($_ -notmatch 'Users'){
            $users = $_
            $bundle = @()
            $users -split ',\s*'| Foreach {
                # Ваш код можете писать тут. $_ будет содержать одного пользователя
                "User $_"
                $bundle += Get-AdUser -filter { displayname -eq "$_"} -Properties mail, Enabled | select mail, Enabled
            }
            '' | Select-Object @{n='Users';e={$users}},@{n='Emails';e={$bundle.mail -join ', '}},@{n='Enabled';e={$bundle.Enabled -join ', '}}
        }
    } | Export-Csv C:\temp\outusers.csv  -Delimiter ';' -Encoding Default

    Но на выходе, В CSV получается вот такая штука:

    #TYPE System.String
    Length
    35
    35
    33
    35
    31
    30
    31
    26
    28
    32
    29
    34
    32
    30
    29
    35
    30

    Подскажите в чем теперь проблема?

    27 июня 2019 г. 9:50
  • уберите export-csv вконце и посмотрите что получите на экране

    The opinion expressed by me is not an official position of Microsoft

    27 июня 2019 г. 10:19
    Модератор
  • Хм,на выходе почти ничего не меняется:


    Users                                                                                                                                
    -----                                                                                                                                
    Дуганова Василиса Владимировна,Батухтина Владислава Вадимовна,Малыхин Александр Васильевич,Доценко Александр Владимирович,Афанасье...
    User Алексеев Михаил Сергеевич
    Алексеев Михаил Сергеевич 

    Но и ошибок выполнения скрипта никаких нет...

    27 июня 2019 г. 10:33

  • Но на выходе, В CSV получается вот такая штука:

    #TYPE System.String
    Length
    35
    35
    33
    35
    31
    30
    31
    26
    28
    32
    29
    34
    32
    30
    29
    35
    30

    Подскажите в чем теперь проблема?

    Посмотри set-Content вместо Export-csv, так как Export-csv больше по объектным переменным работает, чем со строками. Сам такой вывод получал.
    27 июня 2019 г. 12:53
  • Хм,на выходе почти ничего не меняется:


    Users                                                                                                                                
    -----                                                                                                                                
    Дуганова Василиса Владимировна,Батухтина Владислава Вадимовна,Малыхин Александр Васильевич,Доценко Александр Владимирович,Афанасье...
    User Алексеев Михаил Сергеевич
    Алексеев Михаил Сергеевич 

    Но и ошибок выполнения скрипта никаких нет...

    это не может быть связано с тем что вы используете параметр mail вместо email?

    The opinion expressed by me is not an official position of Microsoft

    26 июля 2019 г. 14:13
    Модератор