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 !
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.
<# Mailcontact #>
$NewMailContactParameter = @{
    Name                 = 'demo-contact' 
    Alias                = 'demo-contact' 
    DisplayName          = 'demo-contact' 
    OrganizationalUnit   = 'OU=dev_mailobjects,OU=dev,DC=example,DC=box'
    ExternalEmailAddress = 'demo-contact@service.example.box' 
    WhatIf               = $true
}
New-MailContact @NewMailContactParametertesten ob alles funktioniert hat kann man das mit dem Befehl
Get-Recipient demo-contact@service.example.box
Name      RecipientType
----      -------------
demo-contact MailContact  
                 
                
        
    
        
        
    
                
        
        
                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 @NewRemMailParahier 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 @NewRemMailParaAuf 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
                 
                
        
    
        
        
    
            
        
        
                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*")}).countZeige 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 TageGet-MessageTrace -StartDate (get-date).adddays(-25) -EndDate (get-date).addhours(-0) -SenderAddress 'ABSENDERADRESSE'
                 
                
        
    
        
        
    
            
        
        
                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 
                 
                
        
    
        
        
    
            
        
        
                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
                 
                
        
    
        
        
    
                
        
        
                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