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
- Webhook Nachricht mit PowerShell senden
- Installations-Transkript an Teams senden
- Installations-Error an Teams senden
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 @parameters
Code language: PowerShell (powershell)
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 @parameters
Code language: PowerShell (powershell)
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)
Hi, When you mention #Paste in your Installation routine here, exactly what routine do you mean, can you give an example, I don't understand what you mean.
Thanks and great article.
This can be everything you have in an existing win32-package.
For example, for installing an EXE:
(Start-Process 'your.exe' -ArgumentList '/quiet /norestart' -Wait -Passthru).ExitCode
Thanks, Florian.
Your posts are highly recommended.
Thank you, happy to hear and help 🙂