Если вы сохраните файл Excel как CSV, он будет выглядеть примерно так:
"UserName","Security Group","InsideInfo"
"bloggsj","","tall guy"
"ftastic","","nothing worth mentioning"
, это не должно быть так сложно.
$out = 'D:\Test\Updated_usersandgroups.csv'
$csv = Import-Csv -Path 'D:\Test\usersandgroups.csv'
Write-Host "Updating CSV File..."
foreach ($user in $csv) {
try {
$SG = Get-ADPrincipalGroupMembership -Identity $user.UserName -ErrorAction Stop
# if more groups are returned, combine them into a delimited string
# I'm using ', ' here, but you can change that to something else of course
$SGName = ($SG | Where-Object {$_.Name -Like "SG - *"}).Name -join ', '
}
catch [ADIdentityNotFoundException] {
$SGName = "User $($user.UserName) not found"
}
catch {
# something else went wrong?
$SGName = $_.Exception.Message
}
# update the 'Security Group' value
$user.'Security Group' = $SGName
}
Write-Host "Generating updated CSV File..."
$csv | Export-Csv -Path $out -UseCulture -NoTypeInformation
# show output on screen
$csv | Format-Table -AutoSize # or -Wrap if there is a lot of data
# show as GridView (sorts by column)
$csv | Out-GridView
Вывод в консоли будет тогда выглядит как
UserName Security Group InsideInfo
-------- -------------- ----------
bloggsj SG - Group1, SG - Group1 tall guy
ftastic SG - Group1 nothing worth mentioning
Примечание. Я не знаю, какой разделитель использует ваш Excel при сохранении в файл CSV. На моем голландском компьютере используется точка с запятой ;
, поэтому, если в вашем случае это не запятая, добавьте символ разделителя в качестве параметра в командлет Import-Csv
: -Delimiter ';'
Excel использует все, что установлено в вашем языковом стандарте, как ListSeparator для символа-разделителя. В PowerShell вы можете увидеть, что это такое, выполнив (Get-Culture).TextInfo.ListSeparator
. На выходе переключатель -UseCulture
гарантирует, что он использует этот разделитель, чтобы Excel понимал