Как использовать Export-CSV в PowerShell
С помощью PowerShell вы можете извлекать всевозможную информацию из таких сервисов, как Active Directory или Microsoft 365. Но иногда вам нужно дополнительно обработать эту информацию в Excel или другой системе. Для этого мы можем использовать функцию Export-CSV в PowerShell.
Функция Export-CSV преобразует объекты PowerShell в строку CSV и сохраняет их в файл CSV. Если вам нужна только строка CSV, вы также можете использовать функцию ConvertTo-CSV в PowerShell.
В этой статье мы рассмотрим, как использовать функцию Export-CSV, как предотвратить распространенные ошибки и какие различные параметры вы можете использовать.
Export-CSV PowerShell
Командлет Export-CSV довольно прост и имеет всего несколько полезных свойств:
- Путь – (Обязательно) Расположение файла CSV
- NoTypeInformation – Удаляет заголовок информации о типах из вывода. Больше не требуется в PowerShell 6.
- Разделитель – По умолчанию используется запятая, но вы можете изменить это
- Добавить – Добавить к существующему CSV файлу
- Сила – Полезно в сочетании с Добавить
- NoClobber – Не перезаписывать существующие файлы
- Используйте кавычки – (только PowerShell 7) заключите значения в кавычки или нет
Мы начнем с чего-то простого: экспорта наших пользователей Microsoft 365 в CSV файл. Я буду использовать Azure AD в примерах, так что если вы хотите следовать, сначала убедитесь, что вы подключены к Azure AD.
Команда Get-AzureADUser возвращает всех пользователей в вашем арендаторе Microsoft 365, как вы можете увидеть на скриншоте ниже. То, что мы собираемся сделать, это экспортировать этот вывод в файл CSV. Для этого мы можем просто передать команду Export-CSV после нее:
Get-AzureADUser | Export-Csv c:\temp\azureadusers.csv -NoTypeInformationЗвучит легко, правда? Что ж, если вы откроете CSV файл, вы заметите, что у нас получилось немного больше, чем нам нужно, а не тот аккуратный список, который мы видели раньше в PowerShell.
Почему это происходит? Cmdlet Export-CSV экспортирует все отдельные объекты из cmdlet Get-AzureADUser. Если мы посмотрим на одного пользователя Azure AD, то мы увидим все данные, которые возвращаются из одного объекта пользователя:
Get-AzureADUser -Filter "Displayname eq 'Rudy Mens'" | select *Как экспортировать правильную информацию с помощью Export-CSV
Что нам нужно сделать, это сначала выбрать правильную информацию (свойства), которые нам нужны, прежде чем экспортировать объекты пользователей в файл CSV.
Get-AzureADUser | select userprincipalname, displayname, jobtitle, department, city | Export-CSV c:\temp\azureaduser.csv -NoTypeInformationЭто вернет выбранные поля от каждого пользователя в удобном CSV файле, который мы можем действительно использовать:
Добавление в CSV файл с помощью PowerShell
В некоторых случаях вы можете захотеть добавить информацию в файл CSV с помощью PowerShell. Допустим, мы хотим добавить менеджера каждого пользователя в список. Существует более эффективный способ сделать это, но в данном случае мы собираемся пройтись по всем пользователям и получить менеджера из Azure AD.
Совет
Узнайте больше о создании скриптов PowerShell в этом полном руководстве
В этом примере мы создаем пользовательский объект PowerShell, который будет хранить информацию о пользователе и менеджере. С помощью переключателя -append мы можем добавить пользователя в файл CSV.
$users = Get-AzureADUser
$users | ForEach-Object {
$Manager = Get-AzureADUserManager -ObjectId $_.ObjectId
$user =[pscustomobject]@{
'Displayname' = $_.displayname
'Jobtitle' = $_.jobtitle
'Department' = $_.Department
'Manager' = $manager.displayname
}
$user | Export-CSV c:\temp\usermanager.csv -Append -NoTypeInformation -Force
}Я также добавил ключ -Force. Таким образом, CSV файл будет создан, если он не существует, и объекты с несовпадающими свойствами могут быть записаны в CSV файл. Однако будут записаны только совпадающие свойства, остальные свойства будут отброшены.
Другие полезные параметры Export-CSV в PowerShell
Существует несколько других параметров, которые полезны при использовании командлета Export-CSV в PowerShell.
NoClobber
По умолчанию команда Export-CSV перезапишет любой существующий файл при использовании. Если вы не хотите этого, вы можете добавить параметр -NoClobber. Таким образом, если файл уже существует, вы получите ошибку, что предотвратит перезапись файла.
Разделитель
Значения в файле с разделителями-запятыми (CSV) по умолчанию разделены запятой. Однако не все приложения следуют этому стандарту. Поэтому, когда вам нужно импортировать данные в другое приложение, которое требует точку с запятой (;), вы можете изменить разделитель.
Однако убедитесь, что вы заключаете новый разделитель в кавычки:
Get-AzureADUser | Select-Object -Property userprincipalname, displayname, jobtitle, department, city | Export-CSV c:\temp\azureaduser.csv -NoTypeInformation -Delimiter ';'UseQuotes
Когда вы экспортируете объекты в PowerShell 5 или 6, все значения обернуты в кавычки. В некоторых случаях это может быть нежелательно. Если вы используете PowerShell 7, вы можете использовать параметр -UseQuotes.
У этого параметра есть несколько вариантов:
- AsNeeded
- Всегда (по умолчанию)
- Никогда
Get-Process | export-csv -Path c:\temp\process.csv -UseQuotes AsNeededЗаключение
Команда Export-CSV — это функция PowerShell, которую я использую довольно часто. Она действительно полезна для быстрого извлечения данных из Microsoft 365 для отчетов или других задач. Убедитесь, что вы сначала выбрали правильные свойства при экспорте объектов. Это самая часто встречаемая ошибка при экспорте данных PowerShell в Excel.
Если у вас есть вопросы, просто оставьте комментарий ниже.




