Wenn eine Win32 App Installation via Intune fehlschlägt, ist es nicht immer ganz einfach, das Log einzusehen. Darum habe ich begonnen, bei ausgewählten Installationen das Log der Win32-Instalaltion oder eines mit Intune verteilten PowerShell Scripts an einen Teams Kanal zu senden, umso eine schnelle Übersicht des Installationsprozess auf einem Gerät zu haben. Für das Senden des Logs verwende ich einen «Incoming Webhook», welchen ich auf dem Teams Kanal aktiviert habe.

Table of Contents

Webhook in Teams einrichten

Als Grundvoraussetzung muss du in dem Teams Kanal, in welchem du die Nachriten erhalten möchtest, den "Incoming Webhook" aktivieren. Dies ist eine URL, über welche wir Konversationen an den Kanal senden können, dies ohne Authentifizierung. Darum achte darauf, dass die URL nicht publik wird und du keine heiklen Daten darüber versendest.

Den Webhook richtest du über die drei Punkte im Kanal unter "Connectors" ein. In diesem Menü wählst du dann beim Punkt "Incoming Webhook" zweimal "Add" aus.

Ist der "Incoming Webhook" als Connector hinzugefügt, können wir ihn konfigurieren. Dazu gehen wir im Kanal erneut in die "Connectors". Dieses Mal sehen wir nicht mehr "Add", sondern "Configure" und können dem "Incoming Webhook" einen Namen und wenn gewünscht auch ein Anzeigebild verpassen. Das Anzeigebild wird später beim Erstellen von Unterhaltungen angezeigt.

Nach dem Klick auf "Create" erscheint die URL, welche wir später in unserem Skript benötigen.
Kopiere dir diese heraus.

Alternativ die Anleitung von Microsoft: Create an Incoming Webhook - Teams | Microsoft Docs

Webhook Nachricht mit PowerShell senden

Um einen Webhook abzusetzen, brauchen wir nicht sehr viele Parameter. Untenstehend ein Beispiel Code inklusive Resultat im Team Kanal. Den Code kannst du testweise auch in einem x-beliebigen PowerShell Terminal absenden. Du musst dazu nur in der ersten Linie deine Webhook URL einfügen.

$WebHookURL = "https://xxxxx.webhook.office.com/webhookb2/someid..."
$Message_Json = [PSCustomObject][Ordered]@{
	"@type" = "MessageCard"
	"@context" = "<http://schema.org/extensions>"
        "themeColor" = "0078D7"
	"title" = "Test"
	"text" = "some message..."
} | ConvertTo-Json

$parameters = @{
	"URI" = $WebHookURL
	"Method" = 'POST'
	"Body" = $Message_Json
	"ContentType" = 'application/json'
}

Invoke-RestMethod @parametersCode language: PowerShell (powershell)
Incoming Webhook Teams

Installations-Transkript an Teams senden

Möchtest du das ganze Transkript / Log einer Intune Win32-App Installation oder eines PowerShell Scrips an Teams senden, kannst du folgende Vorlage verwenden. Setze dazu deine Installationsroutine unter "# Paste in your Installation routine here" ein. Vergiss auch nicht, den Parameter "$WebHookURL" anzupassen.

$Transcript_Path = "$env:TEMP\demo-installation.log"
Start-Transcript $Transcript_Path

# Paste in your Installation routine here

Stop-Transcript 

$WebHookURL = "https://xxxxx.webhook.office.com/webhookb2/someid..."
$Message_Json = [PSCustomObject][Ordered]@{
	"@type" = "MessageCard"
	"@context" = "<http://schema.org/extensions>"
        "themeColor" = "0078D7"
	"title" = "Transcript - Demo"
	"text" = "<pre>$($(Get-Content $Transcript_Path) -join '<br>')</pre>"
} | ConvertTo-Json

$parameters = @{
	"URI" = $WebHookURL
	"Method" = 'POST'
	"Body" = $Message_Json
	"ContentType" = 'application/json'
}

Invoke-RestMethod @parametersCode language: PowerShell (powershell)
Teams incoming webhook, PowerShell transcript

Installations-Error an Teams senden

Für das Senden eines Error-Logs verwenden wir wieder dieselbe Basis wie oben. Dieses Mal Packen wir die Installationsroutine aber nicht in ein Transkript, sondern in ein "Try/Catch".

try{
	# Paste in your Installation routine here
}catch{
    $WebHookURL = "https://xxxxx.webhook.office.com/webhookb2/someid..."
    $Message_Json = [PSCustomObject][Ordered]@{
        "@type" = "MessageCard"
        "@context" = "<http://schema.org/extensions>"
        "themeColor" = "ff0000"
        "title" = "Error - DEMO - $($env:computername) - $env:username"
        "text" = "<pre>$($($_ | Format-List * -Force | Out-String) -join '<br>')</pre>"
    } | ConvertTo-Json

    $parameters = @{
        "URI" = $WebHookURL
        "Method" = 'POST'
        "Body" = $Message_Json
        "ContentType" = 'application/json'
    }

    Invoke-RestMethod @parameters
}Code language: PowerShell (powershell)
Teams webhook PowerShell script error catch