Object Array - Невозможно вывести содержимое в табличном формате или использовать экспорт CSV - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть сценарий PowerShell для массового создания пользователей в AD из файла CSV. Я хочу расширить его, создав отдельный файл CSV, который содержит подробную информацию о любых учетных записях, которые не удалось создать. Для этого я создаю массив, содержащий исходные данные, которые затем можно экспортировать в CSV в конце сценария. Мой код для тестирования выглядит следующим образом:

Function AddToCSV($reason)
{
    $object = New-Object -TypeName PSObject
    $object | Add-Member -Name "Firstname" -MemberType NoteProperty -Value $UserFirstName
    $object | Add-Member -Name "Lastname" -MemberType NoteProperty -Value $UserLastName
    $object | Add-Member -Name "SAM" -MemberType NoteProperty -Value $Sam
    $object | Add-Member -Name "Password" -MemberType NoteProperty -Value $Password
    $object | Add-Member -Name "Description" -MemberType NoteProperty -Value $Description
    $object | Add-Member -Name "AdGroups" -MemberType NoteProperty -Value $AdGroups         
    $object | Add-Member -Name "Reason" -MemberType NoteProperty -Value $reason
    $global:failArray += $object
}

$failArray = @()
$array = ("One","Two","Three")
foreach ($item in $array)
{
    $UserFirstName = "Test"
    $UserLastName = "Test"
    $Sam = "TEST.ACCOUNT"
    $Password = "P4ssword"
    $Description = "Test User"
    $AdGroups = "Group1;Group2"
    AddToCSV "Account already exists"
}

$failArray | Format-Table

Элементы успешно добавляются в массив, но когда я пытаюсь отобразить массив с Format-Table, он выводит так:

@{Firstname=Test; Lastname=Test; SAM=TEST.ACCOUNT; Password=P4ssword; Description=Test User; AdGroups=Group1;Group2; Reason=Account already exists}@{Firstname=Test; Lastname=Test; SAM=TEST.AC
COUNT; Password=P4ssword; Description=Test User; AdGroups=Group1;Group2; Reason=Account already exists}@{Firstname=Test; Lastname=Test; SAM=TEST.ACCOUNT; Password=P4ssword; Description=Test U
ser; AdGroups=Group1;Group2; Reason=Account already exists}

Попытка экспорта в CSV с $failArray | Export-CSV -PAth "C:\Temp\Test.csv" приводит только к таким выводам:

Screenshot

Как получить массив для вывода вв виде таблицы или в пригодный для использования файл CSV?

1 Ответ

1 голос
/ 05 ноября 2019

Вам не нужна функция для этого. Просто соберите сбойные в массиве PSObjects, а не как отдельные строковые элементы.

Примерно так:

$array = ("One","Two","Three")
$failArray = foreach ($item in $array) {
    [PsCustomObject]@{
        'UserFirstName' = 'Test'
        'UserLastName'  = 'Test'
        'Sam'           = 'TEST.ACCOUNT ({0})' -f $item
        'Password'      = 'P4ssword'
        'Description'   = 'Test User'
        'AdGroups'      = 'Group1;Group2'
        'Reason'        = 'Account already exists'
    }
}

# output on screen
$failArray | Format-Table

# output to CSV
$failArray | Export-Csv -Path 'C:\Temp\Test.csv' -NoTypeInformation

PS -NoTypeInformation не позволяет CSV иметьпервая строка #TYPE blah.blah.blah

Вывод на экран

UserFirstName UserLastName Sam                  Password Description AdGroups      Reason                
------------- ------------ ---                  -------- ----------- --------      ------                
Test          Test         TEST.ACCOUNT (One)   P4ssword Test User   Group1;Group2 Account already exists
Test          Test         TEST.ACCOUNT (Two)   P4ssword Test User   Group1;Group2 Account already exists
Test          Test         TEST.ACCOUNT (Three) P4ssword Test User   Group1;Group2 Account already exists
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...