Import-CSV: Импорт (чтение) данных из CSV файлов в PowerShell

Import-CSV: Импорт (чтение) данных из CSV файлов в PowerShell

Для чтения содержимого CSV файла можно использовать PowerShell командлет Import-CSV. После загрузки содержимого CSV файла, вы получаете объект PowerShell, в котором каждая колонка из CSV файла представляет собой отдельное свойство. В этой статье мы рассмотрим особенности использования командлета Import-CSV для чтения данных из CSV.

CSV файл представляет собой форму табличного представления данных. Итак, мы создали в Excel простейшую таблицы с данными пользователей в AD со следующей структурой:
ADlogin, Email, Phone, Department
. Обратите внимание, что в первой строке таблицы указаны названия столбцов. В PowerShell эти названия будут доступны, как атрибуты объектов в массиве.

Наша задача – импортировать данный CSV файл в PowerShell и внести изменения в Active Directory для каждого логина пользователя из файла.

создать таблицу в excel

Сохраните данный Excel файл как CSV файл с запятыми в качестве разделителей. Получится вот такой текстовый файл:

просмотр содержимого csv файла

Для импорта CSV файла в PowerShell достаточно указать его имя (путь)

$ADUsers=Import-CSV -path C:PSmy_ad_users.csv

Командлет Import-CSV конвертирует данные из CSV файла в массив PowerShell.

Если в CSV файле вместо запятых используются другие разделители, вы можете указать их с помощью параметра -Delimiter. Например, для импорта CSV файл с разделителем точка с запятой (;) используйте команду:

$ADUsers=Import-CSV -path C:PSmy_ad_users.csv -Delimiter ";"

Если в качестве распределите в CSV используется символ табуляции, нужно указать его так:
-Delimeter `t

Если вы хотите использовать разделить в вашей системе по умолчанию (зависит от языка и региональных настроек Windows), нужно использовать параметр
-UseCulture
.

Разделитель по-умолчанию в Windows можно получить с помощью команды:

(Get-Culture).TextInfo.ListSeparator

Теперь если вызвать переменную
$ADUsers
, вы выведете содержимое вашего CSV файла. Командлет преобразовал содержимое файла в массив, а все значения из CSV файла были конвертированы в строки.

Если в CSV файле присутствуют русским символы, нужно дополнительно указать тип кодировки UTF8, чтобы не получить “кракозябры”:

Import-CSV -path C:PSmy_ad_users.csv -Encoding UTF8

Список доступны свойств объекта можно вывести так:

$ADUsers|get-member

Как вы видите, в строках массива содержатся объекты типа PSCustomObject, к элементам которых можно обращаться по названия столбцов из вашего CSV файла.

csv файл преобразован в объект PSCustomObject

Можно вывести все значения из определенного столбца:

$ADusers.email

Или вы можете вывести только определенные свойства объектов:

$ADusers| select Email, Phone

вывести содержимое столюцов csv

Можно обратится напрямую к определенной строке в массиве. Чтобы получить значение 3 строки, выполните команду (нумерация начинается с 0):

$ADusers[2]

получить значение из строки CSV

Чтобы внести изменения в атрибуты пользователей Active Directory, которые вы задали в вашем CSV файле нужно с помощью цикла ForEach перебрать все строки в массиве $ADUsers ( для внесения изменений мы используем командлет Set-ADUser из модуля AD PowerShell).

#перебор всех строк в массиве по одному
$ADUsers | ForEach-Object {
# В данном примере строка $_. означает, что мы обращаемся к текущей строке массива. Значение конкретного столбца из текущей строки можно получить, обратившись к нему по имени столбца. Например, чтобы вывести на экран значение ADLogin из текущей строки:
Write-host $_.AdLogin
# Ищем пользователя в AD по значению из столбца ADLogin и меняем значения в его атрибутах из оставшихся столбцов.
Set-ADUser -Identity $_.AdLogin -MobilePhone $_.Phone –Department $_.Department –EmailAddress $_.Email
}

Этот же скрипт можно представить в более компактном виде однострочника PowerShell:

Import-Csv C:PSmy_ad_users.csv | foreach {Set-ADUser -Identity $_.AdLogin -MobilePhone $_.Phone –Department $_.Department –EmailAddress $_.Email}

Иногда удобно использовать такой формат перебора элементов массива (в этом примере к текущему строке массива мы обращаемся через переменную $User, которую определили в конструкции ForEach:

ForEach ($User in $ADUsers){
$samaccountname = $User.ADlogin
$email = $user.Email
Write-host $samaccountname
Write-host $email
}

В некоторых случаях при обработке элементов массива из CSV файла вам нужно добавить в массив дополнительный столбец. Например, вы хотите добавить в объект $ADUsers текущую дату:

$ADUsers | add-member -membertype NoteProperty -name Date -value (Get-Date -Format dd/MM/yyyy)

добавить столбец в CSV файл

На сайте https://winitpro.ru/ описаны различные сценарии использования командлета Import-CSV для выполнения административных операций с большим количеством объектов:

Windows 10
Import-CSV: Импорт (чтение) данных из CSV файлов в PowerShell