Exchange Online / Office 365 : Erstellen einer Shared Mailbox im Hybrid Mode

Erstmal eins Vorweg , und ja ich muss mir das auch merken ;-)
Im Hybrid Exchange Mode müssen alle Befehle gegen den lokalen Exchange ausgeführt werden !

Wenn man nun eine neue Shared Mailbox haben möchte kann man das mit diesem snippet in der Exchange Shell machen. Auch hier ist das WhatIf auf true gesetzt d.h. hier wird nur getestet aber nicht ausgeführt. Ist man sich sicher kann man das true auf false ändern.
$NewRemMailPara = @{
    Name                         = 'NAME_DER_SHARED_MAILBOX' 
    OnPremisesOrganizationalUnit = 'OU_IM_LOKALEN_AD' 
    DisplayName                  = 'DISPLAYNAME_DER_SHARED_MAILBOX'
    UserPrincipalName            = 'UPN_DER_MAILBOX'
    RemoteRoutingAddress         = 'REMOTE_ROUTING_ADDRESS (normalerweise NAME@TENANT.mail.onmicrosoft.com'
    Alias                        = 'ALIAS_DER_SHARED_MAILBOX'
    PrimarySmtpAddress           = 'PRIMÄRE_EMAIL_ADRESSE'
    WhatIf                       = $true
}
New-RemoteMailbox -Shared @NewRemMailPara
hier ein Beispiel
$NewRemMailPara = @{
    Name                         = 'TEST Team' 
    OnPremisesOrganizationalUnit = 'OU=dev_mailobjects,OU=dev,DC=example,DC=box' 
    DisplayName                  = 'TEST Team'
    UserPrincipalName            = 'test_team@DOMAIN'
    RemoteRoutingAddress         = 'test_team@TENANT.mail.onmicrosoft.com'
    Alias                        = 'TEST_Team'
    PrimarySmtpAddress           = 'test_team@DOMAIN'
    WhatIf                       = $true
}
New-RemoteMailbox -Shared @NewRemMailPara
Auf dem selben Weg kann man Räume und Resourcen anlegen hierzu muss nur der Parameter Shared getauscht werden. Mögliche Werte sind
-Room
-Equipment
oder ein User Postfach
Quelle : https://docs.microsoft.com/en-us/powershell/module/exchange/new-remotemailbox?view=exchange-ps

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
“Sicher ist, dass nichts sicher ist. Selbst das nicht.”
Joachim Ringelnatz