Вопрос или проблема
Я пытаюсь экспортировать некоторые данные из нашей Active Directory в файл .csv. Файл должен содержать определенные столбцы (так как инструмент, который будет импортировать .csv файл, очень строгий, и я не могу его изменить), которые у меня отсутствуют, и он не обрабатывает кавычки.
На данный момент у меня есть следующее (с большим количеством полей, но это пример):
Get-ADUser -Filter {(enabled -eq $true)} -Properties * | Select-Object -Property @{Name="FirstName";Expression={$_."GivenName"}},
@{Name="LastName";Expression={$_."SurName"}},
@{Name="UserID";Expression={$_."EmployeeId"}} | Export-CSV -NoTypeInformation -Encoding UTF8 -Path Data.csv
Это экспортирует файл .csv, в котором каждое поле помещается в двойные кавычки, поэтому мой первый вопрос: как предотвратить эти двойные кавычки? Я нашел параметр -UseQuotes, доступный начиная с PowerShell 7, но я не могу изменить версию PowerShell (изменение программного обеспечения не разрешено на сервере).
Мой второй вопрос: как я могу добавить пустой столбец в приведенный выше список? Я пытался добавить
@{Name="Blank";Expression={$_.""}},
"",
Something_That_Doesnt_Exist
Но это дает либо ошибку, либо пустое значение, заключенное в двойные кавычки.
Есть идеи, как я могу получить желаемый результат, не обрабатывая .csv файл после его создания?
Чтобы экспортировать без кавычек, используйте параметр -UseQuotes Never
.
Для пустого поля используйте: @{Name="Blank";Expression={$null}}
.
Или, если это выводится как строка $null
, то используйте строку, такую как " "
.
Ответ или решение
Чтобы экспортировать результаты команды Get-ADUser
в файл CSV без кавычек и с добавлением пустых полей, вы можете использовать следующий подход.
1. Экспорт без кавычек
Для того чтобы избежать автоматического добавления кавычек в файл CSV, вы можете воспользоваться параметром -UseQuotes
, который доступен в PowerShell 7 и выше. Однако, если вы не можете обновить версию PowerShell на вашем сервере, существует альтернатива, позволяющая вам вручную формировать вывод и сохранять его в CSV формате.
Пример скрипта без использования -UseQuotes
:
# Получение данных пользователей из Active Directory
$users = Get-ADUser -Filter { (enabled -eq $true) } -Properties * |
Select-Object -Property @{
Name = "FirstName"; Expression = { $_.GivenName }
}, @{
Name = "LastName"; Expression = { $_.SurName }
}, @{
Name = "UserID"; Expression = { $_.EmployeeId }
}, @{
Name = "Blank"; Expression = { "" } # Пустое поле
}
# Форматирование вывода в CSV без кавычек
$output = $users | ConvertTo-Csv -NoTypeInformation -Delimiter ';'
$output -replace '"', '' | Set-Content -Path "Data.csv"
В этом коде используется команда ConvertTo-Csv
, чтобы преобразовать вывод в строку формата CSV. Затем применяется -replace
для удаления кавычек, и результирующие данные записываются в файл.
2. Добавление пустого поля
Для добавления пустого столбца в вывод, вы можете использовать следующую конструкцию в Select-Object
:
@{Name="Blank"; Expression={""}} # Это добавит пустой столбец
Таким образом, состояние пустого столбца не будет заполняться кавычками.
Итоговый код
Объединяя все вышесказанное, итоговый код будет выглядеть следующим образом:
# Получение данных пользователей из Active Directory
$users = Get-ADUser -Filter { (enabled -eq $true) } -Properties * |
Select-Object -Property @{
Name = "FirstName"; Expression = { $_.GivenName }
}, @{
Name = "LastName"; Expression = { $_.SurName }
}, @{
Name = "UserID"; Expression = { $_.EmployeeId }
}, @{
Name = "Blank"; Expression = { "" } # Пустое поле
# Форматирование вывода в CSV без кавычек
$output = $users | ConvertTo-Csv -NoTypeInformation -Delimiter ';'
$output -replace '"', '' | Set-Content -Path "Data.csv"
Теперь файл Data.csv
будет содержать данные без кавычек и с пустым столбцом, что соответствует вашим требованиям для последующего импорта.