Я точно знаю, что это может быть как лучше, так и более подходящим для вашего конкретного случая, но решил, что им все же стоит поделиться.
Вы можете получить модуль Import-Excel
, который легко позволяет создавать иформатировать файлы Excel.Вы можете установить его из галереи Powershell , расположенной здесь .Это в основном предполагает, что ваши листы предназначены только для человеческих глаз, и учитывая формат, я думаю, я могу сказать с некоторой степенью уверенности, что это правда.
Сначала я начал собирать все объекты перед добавлением, чтоЯ думаю, что это довольно распространенная ошибка.Просто выведите объект напрямую и соберите его в переменную.
$report = @()
$mailboxes = Get-Mailbox -ResultSize unlimited -RecipientTypeDetails sharedmailbox
$collectOutput = foreach ($mailbox in $mailboxes)
{
$permissions = Get-Mailbox $mailbox.PrimarySmtpAddress | Get-MailboxPermission | Select-Object user, accessrights
$users = $permissions.user
$accessRights = $permissions.accessrights
$sendAsPermissions = Get-Mailbox $mailbox.PrimarySmtpAddress | Get-ADPermission |
Where-Object {
$_.extendedrights -eq 'send-as'
} | Select-Object -ExpandProperty user
$sendOnBehalfPermissions = Get-Mailbox $mailbox.PrimarySmtpAddress | Select-Object -ExpandProperty grantsendonbehalfto
[pscustomobject]@{
Identity = $mailbox.PrimarySmtpAddress
Users = ($permissions.user -join "`r`n")
AccessRights = ($permissions.accessrights -join "`r`n")
SendAs = ($sendAsPermissions -join "`r`n")
SendOnBehalf = ($sendOnBehalfPermissions -join "`r`n")
}
}
Теперь я собираюсь использовать командлет Export-Excel
для создания объекта OfficeOpenXml.ExcelPackage, которым мы затем можем манипулировать с помощью нескольких помощников.функции.Я обнаружил, что это почти подражал Out-Gridview
.Обтекание заголовка только немного отключено, но вы можете экспериментировать с другими параметрами, пока не найдете то, что выглядит именно вам.
$sheet = $collectOutput | Export-Excel -Path 'C:\Users\username\Desktop\testing.xlsx' -PassThru -AutoSize
$sheet.Sheet1.Column(1) | Set-ExcelRange -VerticalAlignment Center
$sheet.Sheet1.Column(2) | Set-ExcelRange -WrapText
$sheet.Sheet1.Column(3) | Set-ExcelRange -WrapText
$sheet.Sheet1.Column(4) | Set-ExcelRange -WrapText
$sheet.Save()
$sheet.Dispose()