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

Schritt-für-Schritt-Anleitung, wie du mit Logic Apps und Managed Identity einen täglichen Geräte-Report (inklusive Co-Managed-Geräte) per E-Mail oder…

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?

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

  • 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

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

  • 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.

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

  • 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"
                }
            }
        }
    }
}

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

  • 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

  • Füge eine HTTP Action hinzu
  • Fülle die folgenden Attribute aus:
    • Method: GET
    • URI: https://graph.microsoft.com/beta/deviceManagement/deviceCompliancePolicyDeviceStateSummary
  • 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ü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

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

  • 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.

Kommentare

shashi Devadiga

Nice one!

Daniel

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”
}
}
}

jannikreinhard

Did you add all the needed api permissions?

Bleyer, Daniel

Hi Yannik,
It is working – but the Data is wrong ( no data at all)
What am I doing wrong?

Daniel

The concept works – I get a email. So we care good. Apart from that the Data is 0 🙁
we constantly enroll devices….
What am I doing wrong?

Below is your daily Device report:

Total devices:
Mdm enrolled:
Hybrid enrolled:
ConfigManDevices: 0

Per device group:

Windows:
Android:
iOS:
MacOS:

Compliance:

Compliant devices:
Uncompliant devices:

James Everett

Cool concept, Jannik, but unfortunately I’m being stopped by these pay-walls. You should do one with pure MSGraph calls and PowerShell for us poor folks. 🙂

jannikreinhard

This should be 100% for free. Where did you have the pay wall?

Dennie

same as Daniel concept works, Beta data will be retrieved:

Daily status rapport:
– Total devices:
– Mdm enrolled:
– Hybrid enrolled:
– ConfigManDevices: 0

Per categorie:
– Windows:
– Android:
– iOS:
– MacOS:

Compliance:
– Compliant devices: 13
– Uncompliant devices: 2

Dennie

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

Kommentar schreiben

Kommentare werden vor der Veröffentlichung geprüft. Deine E-Mail-Adresse bleibt privat.

Mit deiner Zustimmung erfasst Microsoft Clarity maskierte Interaktionen zur Verbesserung der Website. Eine Ablehnung hat keinen Einfluss auf den Zugang.

Datenschutzdetails