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 файл как CSV файл с запятыми в качестве разделителей. Получится вот такой текстовый файл:
Для импорта CSV файла в PowerShell достаточно указать его имя (путь)
$ADUsers=Import-CSV -path C:PSmy_ad_users.csv
Командлет Import-CSV конвертирует данные из CSV файла в массив PowerShell.
$ADUsers=Import-CSV -path C:PSmy_ad_users.csv -Delimiter ";"
Если в качестве распределите в CSV используется символ табуляции, нужно указать его так:
-Delimeter `t
Если вы хотите использовать разделить в вашей системе по умолчанию (зависит от языка и региональных настроек Windows), нужно использовать параметр
-UseCulture
.
Разделитель по-умолчанию в Windows можно получить с помощью команды:
(Get-Culture).TextInfo.ListSeparator
Теперь если вызвать переменную
$ADUsers
, вы выведете содержимое вашего CSV файла. Командлет преобразовал содержимое файла в массив, а все значения из CSV файла были конвертированы в строки.
Import-CSV -path C:PSmy_ad_users.csv -Encoding UTF8
Список доступны свойств объекта можно вывести так:
$ADUsers|get-member
Как вы видите, в строках массива содержатся объекты типа PSCustomObject, к элементам которых можно обращаться по названия столбцов из вашего CSV файла.
Можно вывести все значения из определенного столбца:
$ADusers.email
Или вы можете вывести только определенные свойства объектов:
$ADusers| select Email, Phone
Можно обратится напрямую к определенной строке в массиве. Чтобы получить значение 3 строки, выполните команду (нумерация начинается с 0):
$ADusers[2]
Чтобы внести изменения в атрибуты пользователей 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}
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)
На сайте https://winitpro.ru/ описаны различные сценарии использования командлета Import-CSV для выполнения административных операций с большим количеством объектов:
Windows 10
Import-CSV: Импорт (чтение) данных из CSV файлов в PowerShell