Export-csv: Обединяване на дублиращи се редове

Всичко, благодарение на решението във въпроса Редактиране на скрипт, който намерих, за импортиране на списък с потребители, вземане на тяхната информация и експортиране обратно в друг 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 е null, ако не отидете на следващата колона, иначе поставете. Всичко това изглежда проста логика, но има неща, които все още не съм разбрал. 1. Как да съхраня предишния потребител за сравнение и как да разбера в кой ред да бъда, когато правя сравнението на col-group. Времето ми изтича, за да завърша проекта си, така че ще трябва да спра за известно време. - person sjustice; 29.03.2014