Петля Powershell Foreach для почтового ящика - PullRequest
0 голосов
/ 11 мая 2018

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

Function Shared 
{
$strUserDetails=@()
$Filename = $Save_Path + $SFilename
$Shared_MBX = (Get-Mailbox -recipienttype sharedmailbox -ResultSize Unlimited -SortBy Name)
foreach ($mbx in $Shared_MBX)
{
$upn = Get-Mailbox $mbx.DisplayName | Select UserPrincipalName
$UserMailbox = get-mailboxstatistics -Identity $($mbx.DisplayName) | Select DisplayName, ItemCount,TotalItemSize 
$ItemSizeString = $UserMailbox.TotalItemSize.ToString()  
$strUserDetails = @(
$UserName = $upn
$ItemCount = $UserMailbox.ItemCount
$strMailboxSize = "{0:N2}" -f ($ItemSizeString.SubStrin(($ItemSizeString.IndexOf("(") + 1),($itemSizeString.IndexOf(" bytes") -  ($ItemSizeString.IndexOf("(") + 1))).Replace(",","")) 
)
  $strUserDetails += New-Object psobject -Property @{Items=$ItemCount;Size=$strMailboxSize;Name=$UserName}
} 
$strUserDetails | Export-Csv -NoTypeInformation -Append -Path $Filename
}

Когда я проверяю CSV после его завершения, я ожидаю UPN, Itemcount, размер длявсе общие почтовые ящики, но я получаю только один

Скажите, пожалуйста, где я ошибаюсь

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Получил работу с помощью, которую вы предложили

Function Shared 
{
write-host "Running Shared Mailbox extract." -ForegroundColor Cyan
$Mailboxes = (Get-Mailbox -recipienttype sharedmailbox -ResultSize Unlimited)   
$Filename = $Save_Path + $SFilename
Write-Host "This will save the extract file to " $Filename
foreach ($mbx in $Mailboxes)
{
    $strUserDetails = @()
    $upn = Get-Mailbox $mbx.DisplayName | Select UserPrincipalName
    $UserMailbox = get-mailboxstatistics -Identity $($mbx.DisplayName) | Select DisplayName, ItemCount,TotalItemSize 
    $ItemSizeString = $UserMailbox.TotalItemSize.ToString()  
    $UserName = $upn.UserPrincipalName
    $ItemCount = $UserMailbox.ItemCount
    $strMailboxSize = "{0:N2}" -f ($ItemSizeString.SubString(($ItemSizeString.IndexOf("(") + 1),($itemSizeString.IndexOf(" bytes") - ($ItemSizeString.IndexOf("(") + 1))).Replace(",","")) 
    #Write-Host  "Accessing stats for mailbox:" $username
    $strUserDetails = [PSCustomObject]@{
        Name=$UserName
        Items=$ItemCount
        Size=$strMailboxSize
        }
    $strUserDetails | Export-Csv -NoTypeInformation -Append -Path $Filename
}
Write-host "Completed Shared Extract" -ForegroundColor Cyan
}
0 голосов
/ 11 мая 2018
$strUserDetails += New-Object psobject -Property @{Items=$ItemCount;Size=$strMailboxSize;Name=$UserName}

Это ваша проблема, + = здесь ничего не делает и действует как =. Вы создаете новый объект для каждого почтового ящика и перезаписываете. В результате вы получите только последний почтовый ящик.

Ошибка вызова метода, поскольку [System.Management.Automation.PSObject] не содержит метод с именем «op_Addition».

Создайте массив перед циклом foreach. Затем добавьте в него PSCustomObject для каждого цикла. Пример:

$strUserDetails = @()
foreach ($mbx in $Shared_MBX)
{
    $strUserDetails += [PSCustomObject]@{
        Items=$ItemCount
        Size=$strMailboxSize
        Name=$UserName
    }
}

$strUserDetails

Вот пример решения проблемы с MCVE.

My Testing

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...