Export-csv: объединить повторяющиеся строки

Все, благодаря решению в quesiton Отредактируйте найденный мной сценарий, чтобы импортировать список адусеров, получить их информацию и экспортировать обратно в другой CSV, который мне удалось придумать следующий сценарий. Скрипт извлекает имя пользователя из CSV-файла, подключается к объявлению и экспортирует группы пользователей в другой CSV-файл. Эта часть работает отлично. Вот где я сталкиваюсь с проблемами. Каждое имя пользователя / группа помещается в новую строку. Что идеально, за исключением пользователей в нескольких группах. Так пример

ColA     ColB
User     Group
bob      admin 
jeff     domain admin  
jeff     test admin 
jeff     power user 

Я бы хотел придумать способ экспорта в следующем формате

ColA     ColB           ColC          ColD   
User     Group          Group         Group
bob      admin
jeff     domian admin   test admin    power user 

Вот мой сценарий

Begin {
Try { Import-Module ActiveDirectory -ErrorAction Stop }
Catch { Write-Host "Unable to load Active Directory module, is RSAT installed?"; Break }
}

Process {
$UserList=Get-Content C:\Userlist.csv
$users = ForEach ($U in $UserList)
{   $UN = Get-ADUser $U -Properties MemberOf
$Groups = ForEach ($Group in ($UN.MemberOf))
{   (Get-ADGroup $Group).Name
} 
$Groups = $Groups | Sort
ForEach ($Group in $Groups)
{   New-Object PSObject -Property @{
        Name = $UN.Name
        Group = $Group
    } 
} 
} 
$users | export-csv "c:\grouptest.csv" -append
} 

Можно ли это сделать?


person sjustice    schedule 28.03.2014    source источник
comment
Я отредактировал данные, чтобы попытаться сделать мою цель более ясной.   -  person sjustice    schedule 28.03.2014


Ответы (1)


Если я не понимаю вашу цель, вам просто нужно заменить это:

ForEach ($Group in $Groups)
{   New-Object PSObject -Property @{
        Name = $UN.Name
        Group = $Group
    } 
}

с этим:

New-Object PSObject -Property @{
    Name  = $UN.Name
    Group = $Groups
}
person Ansgar Wiechers    schedule 28.03.2014
comment
Когда я это делаю, я получаю только первую группу, но, более того, это дает мне полное имя Distinguished. - person sjustice; 28.03.2014
comment
@sjustice $Group должен был быть $Groups. В остальном код работал, когда я его тестировал. Однако вы можете -join элементы массива $Groups, если хотите, чтобы свойство Group было одной строкой. - person Ansgar Wiechers; 28.03.2014
comment
Спасибо, я вернулся и поработал над этим. Я заставил его работать. Работать так же, как и вы, сомнительно. :) То, что я получил, было электронной таблицей, в которой была только одна группа на пользователя, независимо от того, было ли у них несколько групп или нет. Однако я думаю, что ваша команда -join находится на правильном пути туда, где я действительно хочу быть. Я дам вам знать, к чему это приведет. Не знаю, видели ли вы это, но я отредактировал свой исходный пост, чтобы попытаться лучше объяснить, что я буду делать после. - person sjustice; 29.03.2014
comment
Я не думаю, что смогу получить это там, где я хочу, на данном этапе. Работая над логикой, похоже, это то, что я должен делать. Сравните текущего пользователя с предыдущим пользователем. Если пользователь существует, проверьте, является ли col-group1 нулевым, если не перейти к следующему столбцу, иначе вставьте. Все это кажется простой логикой, но есть вещи, в которых я еще не разобрался. 1. Как сохранить предыдущего пользователя для сравнения и как узнать, в какой строке будет находиться, когда я выполняю сравнение col-group. У меня заканчивается время, чтобы завершить мой проект, поэтому мне придется на время остановиться. - person sjustice; 29.03.2014