Export-CSV
имеет переключатель под названием -NoTypeInformation
. Когда это добавлено к командлету, он сохраняет только данные. Однако для этого вам нужно сохранить данные как Object , а не преобразовывать их в строку, как сейчас. Для этого измените кодовый блок, в котором информация о пользователе собирается из AD, на следующий:
# properties DistinguishedName, Enabled, GivenName, Name, ObjectClass, ObjectGUID, SamAccountName, SID, Surname, UserPrincipalName are returned by default.
$props = 'LockedOut','DisplayName','EmailAddress','OfficePhone','LastLogonDate','Created','PasswordLastSet'
# use the `script:` scope on the variable, so the button click has access to it
$script:data_usr = Get-ADUser -Filter "DisplayName -eq '$username'" -Properties $props -ErrorAction SilentlyContinue |
Select-Object Enabled,
@{Name = 'Locked'; Expression = {$_.LockedOut}},
DisplayName, GivenName, SurName, SamAccountName,
@{Name = 'Mail'; Expression = {$_.EmailAddress}},
OfficePhone,
@{Name = 'Last Logon'; Expression = {$_.LastLogonDate}},
@{Name = 'Date Created'; Expression = {$_.Created}},
PasswordLastSet
# display the data in the text box by formatting it as list and converting it to a string
$datousr.Text = ($data_usr | Format-List | Out-String)
Затем в коде, в котором вы сохраняете данные в CSV, выполните:
$save_btn.Add_Click({
Write-Host $data_usr # display in the console
# save as proper CSV file (append to if the file already exists)
$script:data_usr | Export-Csv -Path "C:\scripts\data_load.csv" -Encoding UTF8 -Append -NoTypeInformation
})
Обратите внимание, что лучше назвать нужные свойства из Get-ADUser, чем использовать -Properties *
. Вам не нужно добавлять свойства, возвращаемые по умолчанию (см. Первый комментарий к коду).
Кроме того, я бы рекомендовал искать пользователя по атрибуту пользователя, отличному от DisplayName пользователя, потому что это побуждает пользователей ваш GUI, чтобы ввести такие варианты, как Bloggs, Joe
или Joe Bloggs
. EmailAddress может быть более точным.