Экспорт пользовательского объекта PowerShell в CSV - PullRequest
0 голосов
/ 03 октября 2018

Я хочу создать полный отчет о правах доступа к почтовому ящику и экспортировать его в CSV-файл в PowerShell.

$report = @()
$mailboxes = Get-Mailbox -ResultSize unlimited -RecipientTypeDetails sharedmailbox

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 -ExpandProperty user
    $sendOnBehalfPermissions = Get-Mailbox $mailbox.PrimarySmtpAddress | select -ExpandProperty grantsendonbehalfto

    $properties = @{
    Identity = $mailbox.PrimarySmtpAddress
    Users = ($permissions.user -join "`n")
    AccessRights = ($permissions.accessrights -join "`n")
    SendAs = ($sendAsPermissions -join "`n")  
    SendOnBehalf = ($sendOnBehalfPermissions -join "`n")
    }

    $mailboxObject = New-Object -TypeName psobject -Property $properties

    #$mailboxObject | select identity, users, accessrights | Export-Csv -Append -NoTypeInformation -Path c:\temp\test.csv
    $mailboxObject | select identity, users, accessrights, sendas, sendonbehalf | out-gridview
}

Вид сетки показывает именно то, что я хочу, но мне трудно заставить его правильно экспортироваться вCSV.

Out-Gridview example

Ответы [ 4 ]

0 голосов
/ 17 октября 2018

Можете ли вы попробовать это

Identity = $mailbox.PrimarySmtpAddress
Users = (@($permissions.user -join "`n") |Out-String).Trim()
AccessRights = (@($permissions.accessrights -join "`n")|Out-String).Trim()
SendAs = (@($sendAsPermissions -join "`n") |Out-String).Trim() 
SendOnBehalf =(@($sendOnBehalfPermissions -join "`n")|Out-String).Trim()

** вы можете посмотреть этот сайт **https://learn -powershell.net / 2014/01/24 / avoiding-system-object-or-аналогичные выходной когда-используя-Export-CSV /

0 голосов
/ 14 октября 2018

Export-Csv предназначен для этого.

Вот рабочий пример:

$o = [PSCustomObject]@{a = 1 } ,
     [PSCustomObject]@{a = 2 }

# Export     
$o | Export-Csv -Path a.csv

# check the file
Get-Content ./a.csv

Чтобы найти команды, работающие с CSV, вы можете использовать

Get-Command *csv*
0 голосов
/ 15 октября 2018

Чтобы преобразовать объект, вы можете использовать конвейер в результате выбора в ConvertTo-Csv, например:

  $selectResult = $mailboxObject | select identity, users, accessrights, sendas, sendonbehalf
  $selectResult | out-gridview
  $selectResult | ConvertTo-Csv > .\mailbox.csv
0 голосов
/ 09 октября 2018

Я точно знаю, что это может быть как лучше, так и более подходящим для вашего конкретного случая, но решил, что им все же стоит поделиться.

Вы можете получить модуль 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()

enter image description here

...