V2 – Get an daily device report via email or teams with logic apps – Step by Step guide

V2: Geräte-Report per E-Mail & Teams mit Logic Apps

Ich habe bereits einen Blog darüber geschrieben, wie man mit Logic Apps eine Nachricht versendet, um einen regelmäßigen Geräte-Report zu erstellen. Nach einer Präsentation über Automatisierung mit Intune und Graph habe ich gutes Feedback erhalten, ob ich eine Variante mit Co-Managed-Geräten machen kann. Deshalb habe ich mich entschieden, eine V2 dieses Blogs zu schreiben und außerdem die Authentifizierung auf Managed Identity umzustellen. Wenn du an weiteren Blogs rund um das Thema Logic Apps interessiert bist, lass es mich wissen, und ich mache gerne einen Deep Dive zu Logic Apps.

V2 – Täglichen Geräte-Report per E-Mail oder Teams mit Logic Apps erhalten – Schritt-für-Schritt-Anleitung
  1. Was sind die Voraussetzungen?
  2. Wie erstellt man eine Logic App?
  3. Wie erteilt man der Logic App die notwendigen Berechtigungen?
  4. Wie erstellt man die Logic App?
  5. Status per E-Mail versenden

Was sind die Voraussetzungen?

Die Voraussetzungen sind nicht wirklich hoch. Du benötigst lediglich Berechtigungen, um Ressourcen in einer Azure-Subscription zu erstellen und einer Managed Identity API-Berechtigungen zu erteilen.

Wie erstellt man eine Logic App?

  • Klicke auf + Add
V2 – Täglichen Geräte-Report per E-Mail oder Teams mit Logic Apps erhalten – Schritt-für-Schritt-Anleitung
  • Wähle die Subscription aus
  • Wähle eine Resource Group aus oder erstelle eine
  • Gib einen eindeutigen Namen für die Logic App ein
  • Wähle eine Region aus
  • Wähle bei Log Analytics „No“, sofern du das nicht aktivieren möchtest
  • Wähle Consumption als Plan-Typ
  • Wähle Disabled für die Zone Redundancy
  • Klicke auf Review + create
  • Füge bei Bedarf Tags hinzu und klicke auf Review + create
  • Klicke auf Create

Wie erteilt man der Logic App die notwendigen Berechtigungen?

  • Stelle zunächst sicher, dass die Managed Identity deiner Logic App aktiviert ist
V2 – Täglichen Geräte-Report per E-Mail oder Teams mit Logic Apps erhalten – Schritt-für-Schritt-Anleitung
  • Öffne eine Azure PowerShell oder eine PowerShell lokal auf deinem Gerät
V2 – Täglichen Geräte-Report per E-Mail oder Teams mit Logic Apps erhalten – Schritt-für-Schritt-Anleitung
  • Führe den folgenden Code aus (füge die ID deiner Managed Identity ein):
Install-Module Microsoft.Graph -Scope CurrentUser

Connect-MgGraph -Scopes Application.Read.All, AppRoleAssignment.ReadWrite.All, RoleManagement.ReadWrite.Directory

$managedIdentityId = "Managed Identity Object ID"
$roleName = "DeviceManagementManagedDevices.Read.All"

$msgraph = Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'"
$role = $Msgraph.AppRoles| Where-Object {$_.Value -eq $roleName}

New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentityId -PrincipalId $managedIdentityId -ResourceId $msgraph.Id -AppRoleId $role.Id

Disconnect-MgGraph
  • Mache dasselbe auch für DeviceManagementConfiguration.Read.All
V2 – Täglichen Geräte-Report per E-Mail oder Teams mit Logic Apps erhalten – Schritt-für-Schritt-Anleitung

Wie erstellt man die Logic App?

  • Wir wollen unseren Flow mit einem Recurrence-Trigger aufbauen. Wähle dafür Recurrence.
V2 – Täglichen Geräte-Report per E-Mail oder Teams mit Logic Apps erhalten – Schritt-für-Schritt-Anleitung
  • Stelle den Zeitplan auf einmal pro Tag ein.
  • Füge eine HTTP Action hinzu
  • Fülle die folgenden Attribute aus:
    • Method: GET
    • URI: https://graph.microsoft.com/v1.0/deviceManagement/managedDeviceOverview
  • Klicke auf „add new Parameter“ und wähle Authentication
  • Wähle als Authentication Type Managed Identity
  • Gib https://graph.microsoft.com als Audience ein
V2 – Täglichen Geräte-Report per E-Mail oder Teams mit Logic Apps erhalten – Schritt-für-Schritt-Anleitung
  • Führe den ersten Test aus
V2 – Täglichen Geräte-Report per E-Mail oder Teams mit Logic Apps erhalten – Schritt-für-Schritt-Anleitung
  • Prüfe im Body, ob du Gerätedaten sehen kannst
V2 – Täglichen Geräte-Report per E-Mail oder Teams mit Logic Apps erhalten – Schritt-für-Schritt-Anleitung
  • Füge eine Parse-JSON-Action hinzu
  • Wähle Body als Content und füge den folgenden Inhalt als Schema ein:
{
    "type": "object",
    "properties": {
        "@@odata.context": {
            "type": "string"
        },
        "id": {
            "type": "string"
        },
        "enrolledDeviceCount": {
            "type": "integer"
        },
        "mdmEnrolledCount": {
            "type": "integer"
        },
        "dualEnrolledDeviceCount": {
            "type": "integer"
        },
        "deviceOperatingSystemSummary": {
            "type": "object",
            "properties": {
                "androidCount": {
                    "type": "integer"
                },
                "iosCount": {
                    "type": "integer"
                },
                "macOSCount": {
                    "type": "integer"
                },
                "windowsMobileCount": {
                    "type": "integer"
                },
                "windowsCount": {
                    "type": "integer"
                },
                "unknownCount": {
                    "type": "integer"
                },
                "androidDedicatedCount": {
                    "type": "integer"
                },
                "androidDeviceAdminCount": {
                    "type": "integer"
                },
                "androidFullyManagedCount": {
                    "type": "integer"
                },
                "androidWorkProfileCount": {
                    "type": "integer"
                },
                "androidCorporateWorkProfileCount": {
                    "type": "integer"
                },
                "configMgrDeviceCount": {
                    "type": "integer"
                }
            }
        },
        "deviceExchangeAccessStateSummary": {
            "type": "object",
            "properties": {
                "allowedDeviceCount": {
                    "type": "integer"
                },
                "blockedDeviceCount": {
                    "type": "integer"
                },
                "quarantinedDeviceCount": {
                    "type": "integer"
                },
                "unknownDeviceCount": {
                    "type": "integer"
                },
                "unavailableDeviceCount": {
                    "type": "integer"
                }
            }
        }
    }
}
  • Um auch den Compliance-Status zu erhalten, machen wir im Grunde dasselbe in einem zweiten Branch:
V2 – Täglichen Geräte-Report per E-Mail oder Teams mit Logic Apps erhalten – Schritt-für-Schritt-Anleitung
V2 – Täglichen Geräte-Report per E-Mail oder Teams mit Logic Apps erhalten – Schritt-für-Schritt-Anleitung
  • Füge erneut einen Parse-JSON-Block hinzu und füge den folgenden Inhalt ein
{
    "type": "object",
    "properties": {
        "@@odata.context": {
            "type": "string"
        },
        "inGracePeriodCount": {
            "type": "integer"
        },
        "configManagerCount": {
            "type": "integer"
        },
        "id": {
            "type": "string"
        },
        "unknownDeviceCount": {
            "type": "integer"
        },
        "notApplicableDeviceCount": {
            "type": "integer"
        },
        "compliantDeviceCount": {
            "type": "integer"
        },
        "remediatedDeviceCount": {
            "type": "integer"
        },
        "nonCompliantDeviceCount": {
            "type": "integer"
        },
        "errorDeviceCount": {
            "type": "integer"
        },
        "conflictDeviceCount": {
            "type": "integer"
        }
    }
}

V2 – Täglichen Geräte-Report per E-Mail oder Teams mit Logic Apps erhalten – Schritt-für-Schritt-Anleitung

Status per E-Mail versenden

  • Füge eine Outlook Send an Email (V2) Action hinzu
  • Melde dich mit einem Konto an
  • Trage den Empfänger in der Spalte To ein
  • Füge einen Subject hinzu
  • Wenn du dem Betreff ein Datum hinzufügen möchtest, füge den folgenden Ausdruck hinzu:
string(utcNow('yyyyMMdd'))
  • Füge das Folgende in der Spalte Body ein. (Du kannst den Text beliebig anpassen)
Dear MDM Team,

attached your daily report:
- Total devices: @{body('Parse_JSON')?['properties']?['enrolledDeviceCount']}
- Mdm enrolled: @{body('Parse_JSON')?['properties']?['mdmEnrolledCount']}
- Hybrid enrolled: @{body('Parse_JSON')?['properties']?['dualEnrolledDeviceCount']}
- ConfigManDevices: @{body('Parse_JSON')?['deviceOperatingSystemSummary']?['configMgrDeviceCount']}

Per device group:
- Windows: @{body('Parse_JSON')?['properties']?['deviceOperatingSystemSummary']?['properties']?['windowsCount']}
- Android: @{body('Parse_JSON')?['properties']?['deviceOperatingSystemSummary']?['properties']?['androidCount']}
- iOS: @{body('Parse_JSON')?['properties']?['deviceOperatingSystemSummary']?['properties']?['iosCount']}
- MacOS: @{body('Parse_JSON')?['properties']?['deviceOperatingSystemSummary']?['properties']?['macOSCount']}

Compliance:
- Compliant devices: @{body('Parse_JSON_2')?['compliantDeviceCount']}
- Uncompliant devices: @{body('Parse_JSON_2')?['nonCompliantDeviceCount']}

Best regards and have a nice day without troubles
Your logic app
  • Jetzt können wir einen Testlauf durchführen, um zu prüfen, ob alles funktioniert
V2 – Täglichen Geräte-Report per E-Mail oder Teams mit Logic Apps erhalten – Schritt-für-Schritt-Anleitung
V2 – Täglichen Geräte-Report per E-Mail oder Teams mit Logic Apps erhalten – Schritt-für-Schritt-Anleitung
  • Prüfe dein Postfach
V2 – Täglichen Geräte-Report per E-Mail oder Teams mit Logic Apps erhalten – Schritt-für-Schritt-Anleitung

Fazit: Dein automatisierter täglicher Geräte-Report

Das war es auch schon. Mit diesem V2-Setup hast du jetzt einen vollständig automatisierten täglichen Geräte-Report, der Enrollment- und Compliance-Daten direkt aus Microsoft Graph abruft und sie dir jeden Morgen in dein Postfach oder nach Teams liefert. Da der Flow eine Managed Identity verwendet, musst du keine Secrets oder Zertifikate mehr rotieren, und die Logic App läuft sicher und wartungsfrei weiter. Das ist gerade in Co-Managed-Umgebungen ein echter Vorteil, weil du sowohl die Intune- als auch die ConfigMgr-Geräte in einer einzigen Übersicht zusammenführst.

Ein praktischer Tipp aus der Praxis: Aktiviere im HTTP-Schritt die Wiederholung bei Fehlern und lege eine zweite Empfängeradresse an, damit der Report nicht ins Leere läuft, falls ein Postfach einmal nicht erreichbar ist. Häufige Stolperfallen sind außerdem fehlende Graph-Berechtigungen auf der Managed Identity sowie ein falsch gesetzter Audience-Wert. Wenn der erste Testlauf einen 401- oder 403-Fehler liefert, prüfe genau diese beiden Punkte zuerst, bevor du weiter suchst.

Du kannst den Report natürlich beliebig erweitern: Ergänze zusätzliche Kennzahlen, tausche die Outlook-Action gegen eine Teams-Nachricht aus oder passe den Zeitplan an deine Bedürfnisse an. Ebenso lässt sich die Ausgabe als HTML-Tabelle formatieren, sodass der tägliche Geräte-Report direkt im E-Mail-Client gut lesbar ankommt. Wenn dir diese Anleitung geholfen hat, lass es mich wissen, dann gehe ich gerne in weiteren Blogs tiefer auf Logic-Apps-Automatisierung ein.

9 thoughts on “V2: Geräte-Report per E-Mail & Teams mit Logic Apps

  1. Hi yannik – it failed on step HTTP2 for me?
    FORBIDDEN:

    {
    “error”: {
    “code”: “Forbidden”,
    “message”: “{\r\n \”_version\”: 3,\r\n \”Message\”: \”Application is not authorized to perform this operation. Application must have one of the following scopes: DeviceManagementConfiguration.Read.All, DeviceManagementConfiguration.ReadWrite.All – Operation ID (for customer support): 00000000-0000-0000-0000-000000000000 – Activity ID: c4e76d81-22fb-40bd-bd50-e4e7ab42092a – Url: https://fef.msua04.manage.microsoft.com/DeviceConfiguration_2305/StatelessDeviceConfigurationFEService/deviceManagement/deviceCompliancePolicyDeviceStateSummary?api-version=5023-03-24\”,\r\n \”CustomApiErrorPhrase\”: \”\”,\r\n \”RetryAfter\”: null,\r\n \”ErrorSourceService\”: \”\”,\r\n \”HttpHeaders\”: \”{}\”\r\n}”,
    “innerError”: {
    “date”: “2023-06-07T11:35:04”,
    “request-id”: “c4e76d81-22fb-40bd-bd50-e4e7ab42092a”,
    “client-request-id”: “c4e76d81-22fb-40bd-bd50-e4e7ab42092a”
    }
    }
    }

  2. Update the send mail V2

    Dear MDM Team,

    attached your daily report:
    – Total devices: @{body(‘Parse_JSON’)?[‘enrolledDeviceCount’]}
    – Mdm enrolled: @{body(‘Parse_JSON’)?[‘mdmEnrolledCount’]}
    – Hybrid enrolled: @{body(‘Parse_JSON’)?[‘dualEnrolledDeviceCount’]}
    – Config Management Devices: @{body(‘Parse_JSON’)?[‘deviceOperatingSystemSummary’]?[‘configMgrDeviceCount’]}

    Per device group:
    – Windows: @{body(‘Parse_JSON’)?[‘deviceOperatingSystemSummary’]?[‘windowsCount’]}
    – Android: @{body(‘Parse_JSON’)?[‘deviceOperatingSystemSummary’]?[‘androidCount’]}
    – iOS: @{body(‘Parse_JSON’)?[‘deviceOperatingSystemSummary’]?[‘iosCount’]}
    – MacOS: @{body(‘Parse_JSON’)?[‘deviceOperatingSystemSummary’]?[‘macOSCount’]}Compliance:- Compliant devices: @{body(‘Parse_JSON_3’)?[‘compliantDeviceCount’]}
    – Uncompliant devices: @{body(‘Parse_JSON_3’)?[‘nonCompliantDeviceCount’]}

    This should work

Comments are closed.