Powershell: querendo estatísticas do Exchange e encontrando limitações (de saída)

2

Estou tentando reunir estatísticas de caixa de correio para todas as caixas de correio em nossa organização, exportando-as para um arquivo Excel / CSV. Este é o código que eu inventei / colhi até agora:

Get-Mailbox -ResultSize Unlimited |Get-MailboxStatistics | where {$_.ObjectClass -eq “Mailbox”} | Sort-Object TotalItemSize -Descending |FT @{label=”User”;expression={$_.DisplayName}},ServerName,Database,@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}} |Out-File -Append -FilePath C:\Users\Public\Documents\MailboxSize.log

  1. Ao usar Export-Csv, o arquivo gravado não contém a informação / saída solicitada. Isso só mostra 'rabiscos'
  2. Ao executar o script acima, sou confrontado com uma mensagem 'Powershell no máximo permitido é 524288000' e somente uma parte (pequena) dos dados solicitados é registrada

Você pode me ajudar a resolver as duas observações feitas?

= = = = = =

Isto é o que eu estou usando atualmente. Ele me fornece os detalhes solicitados e a saída. Embora eu esteja procurando otimizar ainda mais essa parte, em um esquema maior de coisas, estou feliz com o fato de que é um comando de linha única:

Get-Recipient -ResultSize Unlimited |Where {$_.RecipientType –eq “UserMailbox”} |Get-MailboxStatistics | Sort-Object TotalItemSize –Descending |Select-Object @{label=”User”;expression={$_.DisplayName}},@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}},@{label=”Items”;expression={$_.ItemCount}},@{label=”Storage Limit”;expression={$_.StorageLimitStatus}} |Export-CSV -NoTypeInformation -Path c:\users\public\documents\$Filename

Eu tenho que ajustar o PSSessionConfiguration: Set-PSSessionConfiguration -name microsoft.powershell -MaximumReceivedObjectSizeMB 800 -Force

    
por Andor 18.05.2012 / 15:48

1 resposta

2

Você não pode usar Export-CSV após Format-Table no seu pipeline. Se você quiser usar Export-CSV , mude sua Format-Table para um Select-Object .

Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | where {$_.ObjectClass -eq “Mailbox”} | Sort-Object TotalItemSize -Descending | Select-Object @{label=”User”;expression={$_.DisplayName}},ServerName,Database,@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}} | Export-CSV "C:\Users\Public\Documents\MailboxSize.log" -notypeinformation

Atualmente, você não está obtendo all das caixas de correio na sua organização. Sua consulta está filtrando Caixas de Correio de Descoberta, Caixas de Correio de Sala, Caixas de Correio de Equipamentos, etc. Talvez você já tenha percebido isso, mas eu só queria deixar claro. Se quiser melhorar o desempenho de sua consulta, talvez você queira filtrar essas caixas estranhas no início de seu pipeline modificando o cmdlet Get-Mailbox para filtrar RecipientTypeDetails .

Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize Unlimited

Quanto ao limite 524288000, você tem algumas opções. Você pode modificar o limite no web.config para a propriedade maxAllowedContentLength, mas eu não sugeriria isso, pois realmente não sabemos qual é o limite superior que você precisará extrair esse script. Além disso, isso pode mudar no futuro, à medida que você adiciona mais caixas de correio e seu script será quebrado novamente. Definir o limite muito alto também pode causar alguns problemas.

Sua outra opção é o processo dos dados em partes. Como você está exportando para um CSV e não há nenhum parâmetro nativo -Append em Export-CSV , será necessário usar uma solução alternativa. Dmitry Sotnikov criou um wrapper para o cmdlet Export-CSV que implementa essa funcionalidade e que permitiria exportar para CSV linha por linha.

Atualização: no PowerShell 3.0 , Export-CSV tem um parâmetro de acréscimo.

Seu comando seria modificado para algo como o seguinte -

$sortedStats = Get-Recipient -ResultSize Unlimited -RecipientTypeDetails UserMailbox | Get-MailboxStatistics | Sort-Object TotalItemSize -Descending

foreach ($s in $sortedStats) {
    $s | Select-Object @{label=”User”;expression={$_.DisplayName}},ServerName,Database,@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}} | Export-CSV "C:\Users\Public\Documents\MailboxSize.csv" -notypeinformation -Append
}

Isso tudo é completamente não testado da minha parte, mas é assim que imagino que esteja funcionando. Haverá um impacto no desempenho. Eu estaria interessado em saber seus resultados se você acabar seguindo esse caminho.

    
por 18.05.2012 / 15:55