Exchange Online / Office 365 : Message Trace der Nachrichten

Ich hab hier ein paar nützliche Befehle die ein Message Tracing der Nachrichten ermöglicht die in Exchange Online gesendet oder empfangen werden. Als erstes muss die Verbindung zu Exchange Online stehen.
Zeige mir alle Mails die in den letzten 24 Stunden den Status FAILED hatten
Get-MessageTrace -StartDate (Get-Date).addhours(-24) -EndDate (Get-Date).addhours(-0) | Where-Object {($_.Status -eq 'Failed')}
Zähle Mails mit einem bestimmten Betreff der letzten 24 Stunden
(Get-MessageTrace -StartDate (Get-Date).addhours(-24) -EndDate (Get-Date).addhours(-0) | Where-Object {($_.Subject -like "Discount*")}).count
Zeige mir alle E-Mails mit einem bestimmten Empfänger der letzten 24 Stunden mit dem Status FAILED und exportiere diese in eine CSV
Get-MessageTrace -StartDate (get-date).adddays(-1) -EndDate (get-date).addhours(-0) -Status 'Failed' -RecipientAddress 'EMAILADRESSE' | Export-CSV -Path 'PFAD_ZUR_CSV\EMAILADRESSE.csv' -Encoding UTF8
Zeige mir alle E-Mails eines Absenders der letzten 25 Tage
Get-MessageTrace -StartDate (get-date).adddays(-25) -EndDate (get-date).addhours(-0) -SenderAddress 'ABSENDERADRESSE'

Exchange Online / Office 365 : Erstellen neuer Verteiler und Zuordnen der Mitglieder

Als erstes muss die Verbindung zu Exchange Online stehen. Für meine Funktionen hatte ich eine CSV als Grundlage.
Die Struktur der CSV sah wie folgt aus :
Verteiler;Mitglieder
Verteiler-NAME;"USER1;USER2;USER3;USER4"
Aus Grunden der Sicherheit ist hier WhatIf auf True gesetzt ! d.h. es werden keine Verteiler oder Mitglieder hinzugefügt.
Wenn ihr sicher seit das alles richtig ist könnt ihr einfach bei WhatIf $true auf $false ändern.
#region Vars
    $DLCSV = Import-Csv -Path "$env:HOMEDRIVE\DEIN_PFAD_ZUR_CSV\Verteiler.csv" -Encoding UTF8 -Delimiter ';'
    # new object
    $CsvOutput = @()
#endregion Vars

#region CreateGroup_ReadCSV
foreach ($entry in $DLCSV) {
    $DL_NAME    = $entry.Verteiler
    $DL_MEMBERS = $entry.Mitglieder
    $DL_MEMBER = ($DL_MEMBERS -split ';')  
    
    #region CreateNewDL
    $NewDisGroupParameter = $null
    $NewDisGroupParameter = @{
        Name   = $DL_NAME
        WhatIf = $true
    }
    $crDis = (New-DistributionGroup @NewDisGroupParameter)
    #endregion CreateNewDL

    Start-Sleep -Seconds 1.5

    #region AddMembersToDL
    foreach ($m in $DL_MEMBER) {
        $user = $m.Trim()
        Add-DistributionGroupMember -Identity $DL_NAME -Member $user -whatif:$true
    }
    #endregion AddMembersToDL
}
#endregion CreateGroup_ReadCSV

Exchange Online / Office 365 : Connect mit der Powershell

Wenn man Exchange Online mit der Powershell administrieren will muss zuvor ein connect aufgebaut werden. Dieser wird mit diesem Schnipsel aufgebaut.
<# Connect To Exchange Online #>
if (-not ($ExoCreds)) {
   $ExoCreds = Get-Credential -Message 'Global Admin please' -UserName 'ADMINUSER'
}

$ProxyOptions = New-PSSessionOption -ProxyAccessType None

$ExoSession = $null
Get-PSSession -ErrorAction SilentlyContinue | Where-Object {$_.ComputerName -eq 'outlook.office365.com'} | Remove-PSSession -ErrorAction SilentlyContinue -Confirm:$false

$ExoSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $ExoCreds -Authentication Basic -AllowRedirection -SessionOption $ProxyOptions
Import-PSSession $ExoSession -DisableNameChecking -AllowClobber

Exchange Online / Office 365 : E-Mail senden über die Powershell

E-Mail senden über Office 365 mit der Powershell

[System.Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
 
 $PWD = 'YOURPASSWORD' | ConvertTo-SecureString -AsPlainText -Force 
 $USER = New-Object System.Management.Automation.PSCredential ("USERLOGIN", $PWD)

 $Para = @{
    SmtpServer = 'smtp.office365.com'
    UseSsl     = $true
    Port       = '587' 
    Credential = $USER
    Body       = 'TESTMAIL' 
    To         = 'EMPFÄNGERADRESSE'
    From       = 'SENDERADRESSE' 
    Subject    = 'Testmail'
} 
 
Send-MailMessage @Para

Exchange 2010 : Automapping verhindern

Problem : Ich möchte das Automapping eines freigegebenen Postfaches bei einem Outlook Client verhindern. Normalerweise ja echt kein großer Akt doch leider habe ich bei den Befehlen
Remove-MailboxPermission -Identity user@company.box -User adminuser@company.box -AccessRights FullAccess
Add-MailboxPermission -Identity user@company.box -User adminuser@company.box -AccessRights Fullaccess -AutoMapping $false
immer nur timeouts bekommen. Deswegen musste ich einen anderen Weg gehen.

Lösung :
Einmal kurz auf den Domaincontroller und Active Directory Benutzer und Computer öffnen. Die Ansicht auf "Erweiterte Features” stellen ! Dann habe ich die Eigenschaften des Benutzers user@company.box geöffnet und in den Reiter “Attribut-Editor” gewechselt. Hier habe ich den Key “msExchDelegateListLink” gesucht und manuell die Zuordnung auf adminuser@company.box entfernt

Exchange: Postfach per Powershell in PST exportieren (Eventuell Fehler: CommandNotFoundException)

Ich möchte gerne alte Postfächer von ausgeschiedenen Mitarbeiter in PST-Dateien exportieren. Das möchte ich aber ohne Outlook und zentral vom Server aus machen. Die Lösung findet man mit Powershell! Aber hier gibt es auch einen Fallstrick, den man wissen muss!

Es ist wichtig zu wissen, dass standartmäßig erst mal kein Benutzer berechtigt ist Postfächer in PST zu exportieren - auch der Administrator nicht! Man muss also einem Benutzer erstmal die Berechtigung geben. Dies erfolgt mit dem cmdlet New-ManagementRoleAssignment und der Rolle "Mailbox Import Export". Mit folgendem Befehl gebe ich dem Administrator die Berechtigung:
New-ManagementRoleAssignment –Role “Mailbox Import Export” –User domain\Administrator

Wenn man das vergißt, dann erhält man beim ersten Export folgenden Fehler:

The term 'New-MailboxExportRequest' is not recognized as the name of a cmdlet, function, script file, or operable progr
am. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:25
+ New-MailboxExportRequest <<<< -Mailbox 123456 -FilePath \\server\pstexport\export.pst
+ CategoryInfo : ObjectNotFound: (New-MailboxExportRequest:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Nachdem man die Berechtigung vergeben hat, kann man mittels dem cmdlet New-MailboxExportRequest ein Postfach exportieren. Hier ein Beispielt für einen vollständigen Aufruf:
New-MailboxExportRequest -Mailbox misterx –FilePath \\server\pstexport\misterx.pst 

Falls es Probleme mit Zugriffsrechten auf das Export-Verzeichnis gibt, dann einfach einen Pfad auf dem Exchnage-Server wählen (z.B.: \\mailserver\c$\temp).
Der Export-Request startet dann und wird beim System, je nach Auslastung, abgearbeitet. Den Status des Exports erhält man mit folgendem Befehl:
Get-MailboxExportRequest

Status InProgress = läuft noch, Status Completed = Export abgeschlossen
Da die abgeschlossenen Export-Requests nicht automatisch gelöscht werden, würde ich diese zeitnah manuell löschen, da ab einer bestimmten Anzahl keine mehr angenommen werden (ähnlich wie bei den Mailbox-Move-Requests).
Um den z.B. alle erfolgreichen Export-Request zu löschen verwenden Sie folgenden Befehl:
Get-MailboxExportRequest -Status Completed | Remove-MailboxExportRequest
“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)