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 для каждого логина пользователя из файла.

В предыдущей статье мы рассмотрели, как использовать командлет Export-CSV для выгрузки данных в CSV файлы .

Сохраните данный Excel файл как 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 файла.

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

$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}

Иногда удобно использовать такой формат перебора элементов массива (в этом примере к текущему строке массива мы обращаемся через переменную $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)

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

admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 месяца ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 месяца ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 месяца ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 месяца ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 месяца ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 месяца ago