
Вы можете использовать Импорт-CSV Команда PowerShell для чтения содержимого CSV-файла. После загрузки содержимого CSV-файла вы получаете объект PowerShell, в котором каждый столбец из CSV-файла является отдельным свойством. В этой статье рассматриваются особенности чтения данных из CSV-файлов с помощью команды Import-CSV.
Файлы CSV используются для хранения табличных данных. Например, мы создали простую таблицу Excel, содержащую информацию о пользователях AD, со следующей структурой: ADlogin
, Email
, Phone
, Department
. Обратите внимание, что первая строка электронной таблицы содержит имена столбцов. В PowerShell они будут доступны как атрибуты объектов в массиве.
Наша задача — импортировать этот CSV-файл в PowerShell и внести изменения в Active Directory для каждого пользователя из файла.
Сохраните этот файл Excel в формате CSV со значениями, разделенными запятыми. Полученный текстовый файл должен выглядеть следующим образом:
Теперь, чтобы импортировать CSV-файл в PowerShell, достаточно указать его имя (путь):
$ADUsers=Import-CSV -path C:\PS\my_ad_users.csv
Команда Import-CSV преобразует данные из CSV-файла в массив PowerShell.
;
) используйте команду:
$ADUsers=Import-CSV -path C:\PS\my_ad_users.csv -Delimiter ";"
Если вы используете символ табуляции в качестве разделителя в CSV, вы можете указать его следующим образом: -Delimiter `t
Если вы хотите использовать разделитель по умолчанию в вашей системе (в зависимости от языка и региональных настроек Windows), используйте параметр -UseCulture
флаг.
Выполните эту команду, чтобы получить разделитель по умолчанию в Windows:
(Get-Culture).TextInfo.ListSeparator
Теперь, если вы вызовете переменную $ADUsers, она отобразит содержимое вашего CSV-файла. Команда преобразует содержимое файла в массив. Все значения из CSV-файла представлены в виде строк.
Import-CSV -path C:\PS\my_ad_users.csv -Encoding UTF8
Список доступных свойств объекта можно отобразить следующим образом:
$ADUsers|get-member
Видно, что строки массива содержат PSCustomObjects, к элементам которых можно обращаться по именам столбцов из вашего CSV-файла.
Вы можете отобразить все значения из определенного столбца:
$ADusers.email
Или указанные атрибуты объекта:
$ADusers| Select-Object Email, Phone
Еще один полезный вариант — прямой доступ к определенному объекту в массиве. Например, выполните следующую команду, чтобы получить значение строки 4 (нумерация начинается с 0):
$ADusers[3]
Если вы хотите изменить атрибуты пользователей 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)
Вот еще несколько сценариев, в которых вы можете использовать команду 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 {
Или используйте Set-ADUser для изменения атрибутов конкретных пользователей:
Get-ADUser -identity $_.user -Properties Name, telephoneNumber |
Select Name, telephoneNumber |
Export-CSV c:\ps\export_ad_list.csv -Append -Encoding UTF8
}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-файле.