Для чтения содержимого 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://remontka.com/ описаны различные сценарии использования командлета Import-CSV для выполнения административных операций с большим количеством объектов:
Import-CSV "C:psuser_to_export_pst.csv" | ForEach {New-MailboxExportRequest -Mailbox $_.username -FilePath $_.UNCPathtoPst
mport-CSV .users.csv -Header users | ForEach-Object {Add-AdGroupMember -Identity ‘TestADGroup’ -members $_.users}
Или аналогичный сценарий по добавлению пользователей в группу Azure AD :
Import-CSV "C:PSadd_m365_members.csv" | ForEach-Object {
Add-UnifiedGroupLinks –Identity it_dept –LinkType Members –Links $_.member
}
Import-Csv c:psusernsme_list.csv | ForEach {
Get-ADUser -identity $_.user -Properties Name, telephoneNumber |
Select Name, telephoneNumber |
Export-CSV c:psexport_ad_list.csv -Append -Encoding UTF8
}
Или изменить атрибуты некоторых пользователей через Set-ADUser:
Import-Csv "C:psmodifyad_users.csv" | foreach {Set-ADUser -Identity $_.SamAccountName –Title $_.Title -MobilePhone $_.MobilePhone}
Обновить фотографию в AD по списку пользователей:
Import-Csv C:PSimport.csv |%{Set-ADUser -Identity $_.AD_username -Replace @{thumbnailPhoto=([byte[]](Get-Content $_.Photo -Encoding byte))}}
Если говорить о том, какие лучшие дистрибутивы Linux мы знаем, то этот список может быть…
Хотя Ubuntu и поставляется со встроенным обозревателем Firefox многие пользователи считают что это не самая…
Что такое Remmina? Remmina — это совершенно бесплатный и свободный клиент так называемого удаленного рабочего…
Как мы знаем, Ubuntu это самая популярная сборка из систем на базе ядра Linux. У…
Выбор ноутбука для каждого пользователя это довольно кропотливый процесс. Люди стараются подобрать ноутбук который будет…
Если вы решили ознакомиться с операционной системой Linux более детально и задались вопросом как установить…