Category Archives for PowerShell

Installation Exchange Online PowerShell V2

Microsoft entwickelt für Exchange Online eine neue PowerShell, die sich schon bei der Installation von bisherigen PowerShell-Erweiterungen unterscheidet.

Es gibt keinen manuellen Download mehr von einer Microsoft Download-Seite.

Stattdessen muss zuerst das Modul „PowerShellGet“ installiert werden, wenn noch nicht vorhanden.

Install-Module PowershellGet

Dazu wird der NuGet Paketmanager benötigt, welcher gleich mitinstalliert werden will:

Der NuGet-Anbieter ist erforderlich, um den Vorgang fortzusetzen.
PowerShellGet erfordert die NuGet-Anbieterversion 2.8.5.201 oder höher für die Interaktion mit NuGet-basierten
Repositorys. Der NuGet-Anbieter muss in "C:\Program Files\PackageManagement\ProviderAssemblies" oder
"C:\Users\administrator\AppData\Local\PackageManagement\ProviderAssemblies" verfügbar sein. Sie können den
NuGet-Anbieter auch durch Ausführen von 'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'
installieren. Möchten Sie den NuGet-Anbieter jetzt durch PowerShellGet installieren und importieren lassen?
[J] Ja  [N] Nein  [H] Anhalten  [?] Hilfe (Standard ist "J"):

Schlägt die Installation fehl, könnte dieser Artikel den Fehler beheben:

Die nächste Abfrage bestätigen…

Nicht vertrauenswürdiges Repository
Sie installieren die Module aus einem nicht vertrauenswürdigen Repository. Wenn Sie diesem Repos
 Sie dessen InstallationPolicy-Wert, indem Sie das Set-PSRepository-Cmdlet ausführen. Möchten Si
'PSGallery' wirklich installieren?
[J] Ja  [A] Ja, alle  [N] Nein  [K] Nein, keine  [H] Anhalten  [?] Hilfe (Standard ist "N"):

Bei mir ist das Modul in einer älteren Version schon installiert:

WARNUNG: Version 1.0.0.1 des Moduls "PowerShellGet" ist bereits auf "C:\Program
Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1" installiert. Um Version 2.2.5 zu installieren, führen Sie
Install-Module aus und fügen den -Force-Parameter hinzu. Durch diesen Befehl werden Version 2.2.5 und Version 1.0.0.1
parallel installiert.

Also machen wir weiter und installieren im zweiten Schritt das ExchangeOnlineManagement-Modul:

Install-Module -Name ExchangeOnlineManagement

Die Abfrage (siehe oben) wieder bestätigen und das Modul ist installiert.

Es hat sich bewährt die PowerShell im Anschluss zu schließen und neu zu öffnen, damit die neuen Module auch mit eingebunden werden.

In der neu geöffneten PowerShell lässt sich nun das ExchangeOnlineManagement aufrufen

Connect-ExchangeOnline

Es werden hier noch die alten und neuen Befehle gegenübergestellt.

Außerdem öffnet sich die Microsoft 365 Anmeldemaske, welche auch MFA unterstützt:

Installation von NuGet in der PowerShell schlägt fehl – Es kann kein Download von URI durchgeführt werden

Bei der Installation des ExchangeOnlineManagement-Moduls (und wahrscheinlich jedem anderen Modul) in der PowerShell wird der NuGet Paketmanager benötigt. Dieses kann direkt mitinstalliert werden.

Dabei bin ich dann auf das folgende Problem gestossen :

Die Fehlermeldung lautet:

WARNUNG: Es kann kein Download von URI "https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409" nach ""
durchgeführt werden.
WARNUNG: Die Liste der verfügbaren Anbieter kann nicht heruntergeladen werden. Überprüfen Sie Ihre Internetverbindung.
PackageManagement\Install-PackageProvider : Für die angegebenen Suchkriterien für Anbieter "NuGet" wurde keine
Übereinstimmung gefunden. Der Paketanbieter erfordert das PackageManagement- und Provider-Tag. Überprüfen Sie, ob das
angegebene Paket über die Tags verfügt.
In C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:7405 Zeichen:21
+ ...     $null = PackageManagement\Install-PackageProvider -Name $script:N ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (Microsoft.Power...PackageProvider:InstallPackageProvider) [Install-Pac
   kageProvider], Exception
    + FullyQualifiedErrorId : NoMatchFoundForProvider,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackagePro
   vider

PackageManagement\Import-PackageProvider : Für die angegebenen Suchkriterien und den Anbieternamen "NuGet" wurde keine
Übereinstimmung gefunden. Führen Sie "Get-PackageProvider -ListAvailable" aus, um festzustellen, ob der Anbieter im
System vorhanden ist.
In C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:7411 Zeichen:21
+ ...     $null = PackageManagement\Import-PackageProvider -Name $script:Nu ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (NuGet:String) [Import-PackageProvider], Exception
    + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.ImportPackageProv
   ider

Da eine Internetverbindung vorhanden war, musste der Fehler eine andere Ursache haben.

Nach kurzer Recherche im Netz bin ich auf den folgenden Artikel von ugg.li gestossen (vielen Dank dafür):

Das Problem scheint wohl an TLS zu liegen. Seit April 2020 lässt der Endpunkt nur noch Verbindungen mit mindestens TLS 1.2 zu.

Allerdings spricht die PowerShell im Default-Zustand nur TLS 1.1.

Der nachfolgende Befehl stell die PowerShell auf TLS 1.2 um:

[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12

Und siehe da, der Installer funktioniert wieder und die eigentliche Installation kann weiter gehen.

Empfangsconnector in Exchange 2013 erlauben externe E-Mails zu verschicken

In Exchange 2013 können Empfangsconnectoren (Receive Connectors) eingerichtet werden um beispielsweise Applikationen oder Geräten wie Kopierern oder Scannern den E-Mail-Versand zu ermöglichen.

Da dies auch ohne Authentifizierung möglich ist, dürfen über Empfangsconnectoren im Standard nur E-Mails an interne Empfänger verschickt werden.

Versucht man eine E-Mail an externe Empfänger zu schicken, bekommt man die folgende Fehlermeldung vom Exchange zurück:

5.7.1 Unable to relay

Um auch externe E-Mails verschicken zu können, muss der Empfangsconnector über die Exchange Powershell angepasst werden.

Das macht man mit dem Befehl:

Get-ReceiveConnector "Anonymous Relay" | Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" -ExtendedRights "Ms-Exch-SMTP-Accept-Any-Recipient"

„Anonymous Relay“ ist in diesem Beispiel der Name des Empfangsconnector. Den genauen Namen des Empfangsconnector bzw. ReceiveConnector kann man mit dem Befehl

Get-ReceiveConnector

auslesen. Hat man mehrere Exchange-Server im Einsatz muss der Servername vor den Connector geschrieben werden.

Achtung bei DEUTSCHEN Exchange-Servern:

Microsoft hat bei den Powershell-Befehlen die Berechtigungen eingedeutscht, was zur Folge hat, dass der User „NT AUTHORITY\ANONYMOUS LOGON“ auf deutschen Exchange-Servern nicht bekannt ist. Hier heißt er „NT-AUTORITÄT\ANONYMOUS-ANMELDUNG“.

Auf deutschen Exchange-Servern muss der Befehl dementsprechend so lauten:

Get-ReceiveConnector "Anonymous Relay" | Add-ADPermission -User "NT-AUTORITÄT\ANONYMOUS-ANMELDUNG" -ExtendedRights "Ms-Exch-SMTP-Accept-Any-Recipient"

Ist der Befehl ausgeführt, können über diesen Connector E-Mails an externe Empfänger geschickt werden.

ACHTUNG: Der Exchange-Server ist jetzt ein „Offenes Relay“. Deshalb den Empfangs-Connector immer nur für den benötigten Server (über die IP-Adresse) berechtigen.