Exchange – Useful Powershell Commands

Here is some useful Powershell Commands for reports:

  • Connect to Office 365 / Exchange Online
    • Open the Windows PowerShell as Administrator
    • Execute the following command $LiveCred = Get-Credential and enter the admin credentials in the popup dialog.
    • Execute the following commands:
      $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $LiveCred -Authentication Basic -AllowRedirection
      Import-PSSession $Session

and enter the admin credentials in the popup dialog.
*Press enter at Import-PSSession $Session

List All Email Adresses in a .txt file

Get-recipient -resultsize unlimited | select Name -expand emailaddresses > c:\emailadresses.txt

List All Mailbox Sizes in a .html file

Get-Mailbox –ResultSize Unlimited | Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | convertto-html DisplayName, LastLoggedOnUserAccount,  LastLogonTime, TotalItemSize, ItemCount, @{label=”TotalItemSize(MB)”;expression={$_.TotalItemSize.Value.ToMB()}} | set-content c:\mailboxsizes.html

List All Mailbox Permissions in a .csv file

Get-Mailbox | Get-MailboxPermission | where {$_.user.tostring() -ne “NT AUTHORITY\SELF” -and $_.IsInherited -eq $false} | Select Identity,User,@{Name=’Access Rights’;Expression={[string]::join(‘, ‘, $_.AccessRights)}} | Export-Csv -NoTypeInformation c:\mailboxpermissions.csv

List Mailboxes by mailbox databases

Get-Mailbox | Sort database, name | Format-Table name, database

  • Here is some useful Powershell Commands for Export/Import:

Granting User Rights for Mailbox Exports in Exchange 2010

New-ManagementRoleAssignment -Role “Mailbox Import Export” -User Administrator

IMPORT MAILBOX:

New-MailboxImportRequest -Mailbox “Administrator” -FilePath “\\Exchange\Backup_PSTs\$($i.Alias).pst” 

EXPORT MAILBOX:

New-MailboxExportRequest -Mailbox administrator -FilePath “\\Exchange\Backup_PSTs\$($i.Alias).pst”

EXPORT ALLE MAILBOXE:

foreach ($i in (Get-Mailbox)) { New-MailboxExportRequest -Mailbox $i -FilePath “\\Exchange\Backup_PSTs\$($i.Alias).pst” }

EXPORT ALLE FRA OU:

foreach ($i in (Get-Mailbox -OrganizationalUnit “domain.dk”)) { New-MailboxExportRequest -Mailbox $i -FilePath “\\Exchange\Backup_PSTs\$($i.Alias).pst” }

SE STATUS PÅ EXPORT:

Get-MailboxExportRequest | Get-MailboxExportRequestStatistics

FJERN FULDFØRTE FORESPØRGSLER :

GetMailboxExportRequest -Status Completed | Remove-MailboxExportRequest

Full Accesss to All Mailboxes

Get-Mailbox -ResultSize unlimited -Filter {(RecipientTypeDetails -eq ‘UserMailbox’) -and (Alias -ne ‘Admin’)} | Add-MailboxPermission -User Administrator@domain.dk -AccessRights fullaccess -InheritanceType all

  • Here is some useful Powershell Commands for Database Management:

List Mailboxes by mailbox databases

Get-Mailbox | Sort database, name | Format-Table name, database

Move all mailboxes from one database to another database

1. Launch the Exchange Management Shell > Firstly lets get the names of my Databases, then I can simply copy and paste them into the move mailbox command.

Get-MailboxDatabase

Get-Mailbox -Database “Source Database Name” -ResultSize Unlimited | New-MoveRequest -TargetDatabase “Target Database Name

2. The Mailbox moves should then be queued, depending on how many there are, this can take some time to complete.

3. To check on progress issue the following command;

Get-MoveRequestStatistics -MoveRequestQueue “Target Database Name
 

4. When complete you should remove the movement requests like so;

Get-MoveRequest | where {$_.status -eq “Completed”} | Remove-MoveRequest
 

5. That’s all the ‘user’ mailboxes, but your source database server may have system mailboxes in it. These will be either Arbitration mailboxes, or Archive Mailboxes (or both). I don’t have any archive mailboxes, but I do have Arbitration mailboxes. To find out for your databases, use the following commands;

Get-Mailbox -Database “Source Database Name” -Arbitration

Get-Mailbox -Database “Source Database Name” -Archive

6. To move Arbitration and Archive mailboxes, use the following commands;

Get-Mailbox -Database “Source Database Name” -Arbitration | New-MoveRequest -TargetDatabase “Target Database Name

Get-Mailbox -Database “Source Database Name” -Archive | New-MoveRequest -TargetDatabase “Target Database Name

7. You can monitor progress with the same command you used in step 3, -and remove the move requests with the same command you used in step