Das Senden von Nachrichten an Teams-Kanäle über PowerShell ist nicht so einfach wie das Eingeben eines Befehls; insbesondere, wenn Sie Benachrichtigungen und Warnungen automatisieren oder die Benutzeraktivität überprüfen möchten, ohne manuell den Client zu öffnen. Es fühlt sich etwas wie ein Workaround an – schließlich muss Microsoft es unnötig kompliziert machen. Mit etwas Einrichtung können Sie Ihre Skripte jedoch die Hauptarbeit erledigen lassen. Ob Sie Webhooks für schnelle und unkomplizierte Warnungen oder die Microsoft Graph API für mehr Kontrolle über das Lesen und Schreiben von Nachrichten bevorzugen, entscheidend ist, die richtigen Tools zu kennen und zu wissen, wie Sie die Daten aus Teams extrahieren.
So senden und lesen Sie Nachrichten in Microsoft Teams mit PowerShell
Nachrichten per Webhook an Teams senden: So funktioniert es
Diese Methode eignet sich hervorragend für schnelle Benachrichtigungen, wie z. B.„Serverausfall“-Warnungen oder Statusaktualisierungen, ohne großen Aufwand. Sie erstellen dazu einen Connector in Teams, erhalten eine URL und PowerShell sendet anschließend eine JSON-Payload per POST direkt an Ihren Kanal. Das funktioniert gut für einfache Benachrichtigungen, aber beachten Sie, dass Teams die Anzahl der Nachrichten auf vier pro Sekunde beschränkt – senden Sie also nicht zu viele Nachrichten, sonst stoßen Sie an die Ratenbegrenzung.
Beim Einrichten des Webhooks legen Sie einen Kanal fest, vergeben einen Namen und kopieren die generierte URL. Diese URL fungiert als Vermittler: Ihr Skript sendet eine POST-Anfrage an sie, und Teams zeigt Ihre Nachricht so an, als käme sie von einem Benutzer. Da Webhook-Konnektoren manchmal fehlerhaft funktionieren, wird die Nachricht oft als vom Konnektor und nicht von Ihnen stammend angezeigt. Dies ist für Benachrichtigungen ausreichend, aber nicht optimal für laufende Unterhaltungen.
Einrichten des Webhooks und Senden einer Testnachricht
- Wählen Sie in Microsoft Teams den Kanal aus, an den Sie Nachrichten senden möchten.Öffnen Sie die Konnektoren im Kontextmenü (Rechtsklick auf den Kanalnamen).
- Fügen Sie den Incoming-Webhook- Connector hinzu. Sie müssen ihm einen Namen geben – beispielsweise „Serverwarnungen“ – und anschließend die generierte URL kopieren. Bewahren Sie diese URL griffbereit auf, da Sie sie in Ihrem Skript benötigen.
Sobald Sie die URL haben, fügen Sie sie in PowerShell ein und führen Sie einen einfachen Befehl wie diesen aus:
$myTeamsWebHook = "" Invoke-RestMethod -Method post -ContentType 'application/json' -Body '{"text":"Test Teams!"}' -Uri $myTeamsWebHook
Wenn alles geklappt hat, sollte die Nachricht im Teams-Kanal erscheinen. Besonders hilfreich ist es, die JSON-Nutzdaten anzupassen und Rich Cards oder zusätzliche Informationen einzufügen – Teams bietet umfangreiche Anpassungsmöglichkeiten für den Nachrichtentext. Wichtig: Teams begrenzt die Anzahl der gesendeten Webhooks auf vier pro Sekunde. Senden Sie also nicht zu viele Nachrichten, sonst stoßen Sie an die Grenze.
Hinzufügen weiterer Daten und Formatierung
Wenn Sie Ihre Nachrichten mit Farben, Schriftarten oder zusätzlichen Informationen ansprechender gestalten möchten, können Sie eine komplexere JSON-Nutzlast erstellen. Um beispielsweise eine Karte mit einem Titel und einer Beschreibung hinzuzufügen oder die Designfarbe zu ändern, erstellen Sie einfach ein entsprechendes JSON-Objekt. Manchmal fügen Benutzer auch Fehlerdetails, Zeitstempel oder sogar Links hinzu – alles, was hilft, den Sachverhalt zu verdeutlichen. Beachten Sie jedoch, dass Teams umfangreiche Nutzlasten in einem bestimmten Format bevorzugt. Wenn Sie also mehr als nur reinen Text verwenden möchten, sollten Sie die [Dokumentation zu Microsoft Teams-Messaging-Karten](https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using) konsultieren.
Mehr Kontrolle durch die Microsoft Graph-API
Wenn Ihr Skript Nachrichten lesen oder als bestimmter Benutzer senden soll, ist die Graph-API die richtige Wahl. Die Einrichtung ist jedoch etwas aufwendiger: Sie müssen eine Azure-App registrieren, die entsprechenden Berechtigungen zuweisen Group. Read. Allund ChannelMessage. Sendein Token abrufen.
Sobald Sie dieses Token haben, können Sie eine Nachricht wie folgt per POST senden:
$ApplicationID = "" $TenantDomainName = "" $AccessSecret = "" $Body = @{ Grant_Type = "client_credentials" Scope = "https://graph.microsoft.com/.default" client_Id = $ApplicationID Client_Secret = $AccessSecret } $ConnectGraph = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenantDomainName/oauth2/v2.0/token" -Method POST -Body $Body $token = $ConnectGraph.access_token $TeamID = "" $ChannelID = "" $URL = "https://graph.microsoft.com/v1.0/teams/$TeamID/channels/$ChannelID/messages" $BodyJson = @" { "body": { "content": "Hello, this is a message from PowerShell using Graph API!" } } "@ Invoke-RestMethod -Method POST -Uri $URL -Headers @{Authorization = "Bearer $token"} -Body $BodyJson
Um die *TeamID* und *ChannelID* zu erhalten, können Sie folgenden Befehl ausführen:
Get-Team Get-TeamChannel -GroupId ""
Mit dieser Methode können Sie außerdem Nachrichten abrufen, Konversationen lesen und im Prinzip einen Zwei-Wege-Chat führen – wenn Sie den Automatisierungsmodus nutzen möchten. Der Nachteil ist, dass Sie eine Azure AD-App-Registrierung benötigen, was anfangs etwas abschreckend wirken mag, Ihnen aber deutlich mehr Kontrolle bietet.
Bei manchen Konfigurationen wirkt die Graph-API-Methode für einfache Benachrichtigungen etwas übertrieben. Andererseits ist sie ziemlich leistungsstark, sobald sie einmal funktioniert. Und wenn Ihre Skripte mehr als nur eine einmalige Ausführung erfordern, lohnt sich der Lernaufwand.