Hier möchte ich von mir häufig benutzte Exchange PowerShell Befehle notieren.

Weiterleitungen ermitteln

Get-Mailbox -ResultSize unlimited | Where-Object {$_.ForwardingSMTPAddress -ne $null} | Select-Object Name,ForwardingSMTPAddress

Verteilergruppen ermitteln und abspeichern

write-output “” > C:\temp\outputDGmembers.txt
get-distributiongroup | Sort -Property DisplayName | foreach {
$name = $_.displayname
$mailadresse = $_.PrimarySmtpAddress
$output = ‘Group Name: ‘ + $Name + ' ' + $mailadresse
write-output $output >> C:\temp\outputDGmembers.txt
Get-DistributionGroupMember $name | Sort -Property DisplayName | Select DisplayName, Alias, Department >> C:\temp\outputDGmembers.txt
write-output “” “” >> C:\temp\outputDGmembers.txt
}

Senden-Als Berechtigungen ermitteln (kann länger dauern)

Get-Mailbox | Get-ADPermission | where {($_.ExtendedRights -like '*Send*') -and -not ($_.User -like "NT-AUTORITÄT\SELBST")}  | Format-Table -Auto Identity,User,Deny,ExtendedRights

Senden im Auftrag ermitteln (kann länger dauern)

Get-Mailbox | Where-Object {$_.GrantSendOnBehalfTo -ne $null} | fl DisplayName,Alias,Identity,GrantSendOnBehalfTo

Vollzugriff auf Postfach ermitteln (alle)

$nbdomain = "NetBIOS-DOMAIN"
Get-Mailbox | Get-mailboxPermission | Where-Object { ($_.accessRights -like "*fullaccess*") -and -not ($_.User -like "nt-autorität\selbst") -and -not ($_.User -like "$nbdomain\Domänen-Admins")-and -not ($_.User -like "$nbdomain\Organisations-Admins") -and -not ($_.User -like "$nbdomain\Organization Management") -and -not ($_.User -like "$nbdomain\Administrator") -and -not ($_.User -like "$nbdomain\Exchange Servers") -and -not ($_.User -like "$nbdomain\Exchange Trusted Subsystem") -and -not ($_.User -like "nt-autorität\system")} | ft -AutoSize

Berechtigung eines einzelnen Postfachs auslesen

$user = "k.mustermann"
get-mailbox -identity $user| Get-MailboxPermission | ?{($_.IsInherited -eq $False) -and -not ($_.User -match "SELBST")} | ft $user,User,AccessRights -AutoSize

Mailbox Exportieren vorbereiten. Dieser Nutzer hat nach dem Neustart der Powershell das Recht Postfächer zu ex- bzw. importieren.

New-ManagementRoleAssignment -Role "Mailbox Import Export" -User <BENUTZERAME>

Postfach exportieren

New-MailboxExportRequest -Mailbox <username> -FilePath \\servername\verzeichnis\username.pst -BadItemLimit 100

Postfach importieren

New-MailboxImportRequest -Mailbox <username> -FilePath \\servername\verzeichnis\username.pst -BadItemLimit 100

Mailbox Export überwachen

Get-MailboxExportRequest
Get-MailboxExportRequest |Sort-Object -Property Status | ft FilePath, Status

Bulk Export von Postfächern

$allmailboxes = Get-Mailbox
$allmailboxes |% {$_| New-MailboxExportRequest -FilePath "\\localhost\c$$($_.Alias).pst" -BadItemLimit 100}

Mailqueue (ausführlich) ausgeben. (Info-Link)

Get-Queue | Format-List

Mailqueue erneut abarbeiten (Info-Link)

Retry-Queue 

Maillog durchsuchen. Datum ist amerikanisch! (Info-Link)

Get-MessageTrackingLog -ResultSize Unlimited -Start "5/20/2021 8:00AM" -End "5/20/2021 11:00PM" 
Get-MessageTrackingLog -ResultSize Unlimited -Start "5/20/2021 8:00AM" -End "5/20/2021 11:00PM" | Format-List

Nachrichtentracking, wurde Mail an den Connector übermittelt?

Get-MessageTrackingLog -EventId Send -ResultSize Unlimited -Sender [sender@mail] -Recipients [empfänger@mail] | Format-List Time*,MessageSubject,SourceCo*,Send*,Recipient*
  

Postfachgröße für Benutzer XY ermitteln

Get-MailboxStatistics [XY] | Format-List DisplayName,StorageLimitStatus,TotalItemSize,TotalDeletedItemSize,ItemCount,DeletedItemCount

Postfachgröße für alle Benutzer ermitteln

Get-Mailbox | Get-MailboxStatistics | Format-List DisplayName,StorageLimitStatus,TotalItemSize,TotalDeletedItemSize,ItemCount,DeletedItemCount
Get-MailboxDatabase | Get-MailboxStatistics | Select-Object displayname,totalitemsize |Sort-Object totalitemsize -Descending | Format-Table -AutoSize | Out-File -PSPath 'C:\temp\Postfachgroessen.txt'