Импорт-CSV: чтение CSV-файлов с помощью PowerShell

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

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

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

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

файл csv из excelcsv-файл из excel

Сохраните этот файл Excel в формате CSV со значениями, разделенными запятыми. Полученный текстовый файл должен выглядеть следующим образом:

пример файла csvпример файла csv

Теперь, чтобы импортировать CSV-файл в PowerShell, достаточно указать его имя (путь):

$ADUsers=Import-CSV -path C:\PS\my_ad_users.csv

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

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

$ADUsers=Import-CSV -path C:\PS\my_ad_users.csv -Delimiter ";"

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

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

Выполните эту команду, чтобы получить разделитель по умолчанию в Windows:

(Get-Culture).TextInfo.ListSeparator

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

Если ваш CSV-файл содержит кодировку UTF-8, убедитесь, что вы также указали тип UTF8, чтобы избежать ошибок кодировки:

Import-CSV -path C:\PS\my_ad_users.csv -Encoding UTF8

Список доступных свойств объекта можно отобразить следующим образом:

$ADUsers|get-member

Видно, что строки массива содержат PSCustomObjects, к элементам которых можно обращаться по именам столбцов из вашего CSV-файла. Import-CSV: чтение CSV-файла с помощью PowerShellИмпорт-CSV: чтение CSV-файла с помощью PowerShell

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

$ADusers.email

Или указанные атрибуты объекта:

$ADusers| Select-Object Email, Phone

Получение определенных полей из CSV-файла с помощью PowerShellПолучение определенных полей из CSV-файла с помощью PowerShell

Еще один полезный вариант — прямой доступ к определенному объекту в массиве. Например, выполните следующую команду, чтобы получить значение строки 4 (нумерация начинается с 0):

$ADusers[3]

Получение определенных строк в массиве PowershellПолучение определенных строк в массиве Powershell

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

# Iterating over all the rows in the array one by one
$ADUsers | ForEach-Object {
# In this example, the $_. statement means we are accessing the current row of the array You can get the value of a particular column from the current row by accessing it by the column name. For example, to display the ADLogin value from the current line:
Write-host $_.ADLogin
# Now we search for a user in AD by the value of the ADLogin column and change its attribute values:
Set-ADUser -Identity $_.AdLogin -MobilePhone $_.Phone –Department $_.Department –EmailAddress $_.Email
}

Вы можете заменить этот сценарий более компактным однострочным сценарием PowerShell:

Import-Csv C:\PS\my_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)

powershell добавить новое свойство к объектуpowershell добавить новое свойство к объекту

Вот еще несколько сценариев, в которых вы можете использовать команду Import-CSV для выполнения административных операций над большим количеством объектов:

  • Экспорт почтовых ящиков Exchange в файлы PST:
    Import-CSV "C:\ps\user_to_export_pst.csv" | ForEach {New-MailboxExportRequest -Mailbox $_.username -FilePath $_.UNCPathtoPst
  • Добавление пользователей в группу безопасности AD с помощью PowerShell: I
    mport-CSV .\users.csv -Header users | ForEach-Object {Add-AdGroupMember -Identity ‘TestADGroup’ -members $_.users}
    Или аналогичный случай добавления пользователей в группу Microsoft Entra ID (Azure AD):
    Import-CSV "C:\PS\add_m365_members.csv" | ForEach-Object {
    Add-UnifiedGroupLinks –Identity it_dept –LinkType Members –Links $_.member
    }
  • Получение информации о пользователе из AD:
    Import-Csv c:\ps\usernsme_list.csv | ForEach {
    Get-ADUser -identity $_.user -Properties Name, telephoneNumber |
    Select Name, telephoneNumber |
    Export-CSV c:\ps\export_ad_list.csv -Append -Encoding UTF8
    }
    Или используйте Set-ADUser для изменения атрибутов конкретных пользователей:Import-Csv "C:\ps\modifyad_users.csv" | foreach {Set-ADUser -Identity $_.SamAccountName –Title $_.Title -MobilePhone $_.MobilePhone}Обновление фотографий пользователей в Active Directory:
    Import-Csv C:\PS\import.csv |%{Set-ADUser -Identity $_.AD_username -Replace @{thumbnailPhoto=([byte[]](Get-Content $_.Photo -Encoding byte))}}
  • Создание большого количества пользователей в Active Directory из списка в CSV-файле.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *