Freigegebene Microsoft Entra-Konten in HoloLens

Freigegebene Microsoft Entra-Konten (früher Azure Active Directory) auf HoloLens sind reguläre Microsoft Entra Benutzerkonten, die sich bei HoloLens anmelden können, ohne dass Anmeldeinformationen erforderlich sind. Dieses Setup eignet sich ideal für Szenarien, in denen die folgenden Bedingungen zutreffen:

  • Mehrere Personen teilen sich denselben Satz von HoloLens-Geräten
  • Zugriff auf Microsoft Entra Ressourcen, z. B. Dynamics 365 Guides Inhalte, ist erforderlich.
  • Die Nachverfolgung, wer das Gerät verwendet hat, ist nicht erforderlich.

Wichtige Vorteile der Verwendung von freigegebenen Microsoft Entra-Konten

  • Vereinfachte Bereitstellung. Bisher musste beim Einrichten Microsoft Entra Konten, die von mehreren Personen gemeinsam genutzt werden, jedes Gerät manuell eingerichtet werden. Mit freigegebenen Microsoft Entra-Konten können Sie Ihre Umgebung einmal konfigurieren und automatisch als Teil von Autopilot auf jedem Ihrer Geräte bereitstellen.
  • Großartige Benutzererfahrung. Benutzer von freigegebenen Microsoft Entra-Konten müssen keine Anmeldeinformationen eingeben, um mit der Verwendung des Geräts zu beginnen. Tippen Und los geht's!
  • Zugriff auf Microsoft Entra Ressourcen. Benutzer von freigegebenen Microsoft Entra-Konten erhalten einfachen Zugriff auf Microsoft Entra Ressourcen, sodass Sie einen Remote Assist-Anruf starten oder einen Leitfaden ohne zusätzliche Authentifizierung öffnen können.

Wichtig

Da auf freigegebene Microsoft Entra-Konten auf dem HoloLens-Gerät ohne Eingabe von Anmeldeinformationen zugegriffen werden kann, sollten Sie diese HoloLens-Geräte physisch schützen, sodass nur autorisierte Mitarbeiter Zugriff haben. Sie können diese Konten auch sperren, indem Sie Richtlinien für bedingten Zugriff anwenden, die Self-Service-Kennwortzurücksetzung deaktivieren und zugewiesene Zugriffsprofile für die Geräte konfigurieren, auf denen diese Konten verwendet werden.

Hinweis

Da es sich um freigegebene Konten handelt, werden Benutzern, die diese Konten verwenden, nicht die typischen Bildschirme für die Einrichtung der ersten Anmeldung angezeigt, einschließlich PIN- und Irisregistrierungen, Benachrichtigung zur Sammlung biometrischer Daten und verschiedene Einwilligungsbildschirme. Sie sollten sicherstellen, dass die entsprechenden Standardwerte für diese Konten über die Richtlinie konfiguriert sind (siehe Schnelles Einrichten von Benutzern auf HoloLens 2) und dass Ihre Benutzer diese Standardwerte kennen.

Bekannte Einschränkungen für freigegebene Microsoft Entra-Konten

  • Freigegebene Microsoft Entra-Konten können keine PIN oder Iris verwenden, um sich in der aktuellen Version anzumelden, auch wenn sie registriert wurden.

Konzeptionelle Übersicht über freigegebene Microsoft Entra-Konten

Dieser Prozess ermöglicht es einem HoloLens-Gerät, ein Benutzerkonto zuzuweisen und sich mit Anmeldeinformationen, die mit dem Gerät verknüpft sind, und dem Gerät allein anzumelden. Die Abbildung beschreibt den Prozess:

Diagramm für freigegebene Konten

  1. Intune verfügt über ein SCEP-Konfigurationsprofil für den SCEP-Dienst.
  2. Das Gerät wird in Intune aufgenommen und empfängt die Profilinformationen.
  3. Das Gerät kontaktiert den SCEP-Dienst und empfängt ein Gerätezertifikat mit dem UPN.HL-{Serial}@contoso.com
  4. Das Gerät meldet sich beim entsprechenden Benutzerkonto in Entra ID an und verwendet das Zertifikat als MFA, um eine nahtlose Anmeldung zu ermöglichen.

Das Zertifikat kann nicht vom Gerät entfernt bzw. exportiert werden, und das Benutzerkonto ist so konfiguriert, dass keine andere MFA verfügbar ist. Durch diese Konfiguration wird sichergestellt, dass das freigegebene Konto nur vom HoloLens-Gerät angemeldet werden kann.

Übersicht über die Schritte zum Konfigurieren freigegebener Microsoft Entra-Konten

Freigegebene Microsoft Entra-Konten auf HoloLens werden als reguläre Microsoft Entra Benutzerkonten implementiert, die für Microsoft Entra zertifikatbasierte Authentifizierung (Certificate-Based Authentication, CBA) konfiguriert sind.

Auf hoher Ebene umfasst das Konfigurieren freigegebener Microsoft Entra-Konten die folgenden Schritte:

  1. (Empfohlen) Konfigurieren Sie Ihre Zielgeräte so, dass sie Microsoft Entra beitreten und sich mit Autopilot bei Intune registrieren.
  2. Konfigurieren Sie Ihren Microsoft Entra Mandanten, um Microsoft Entra CBA für eine ausgewählte Gruppe von Konten zu aktivieren.
  3. Konfigurieren Sie Microsoft Intune, um Gerätekonfigurationen auf eine ausgewählte Gruppe von Geräten anzuwenden, die:
    1. Stellen Sie Clientzertifikate, die für Microsoft Entra CBA verwendet werden, auf den Geräten über die SCEP-Zertifikatprofile von Intune bereit.
    2. Stellen Sie das Zertifizierungsstellenzertifikat bereit, damit die Geräte dem Aussteller der Clientzertifikate vertrauen.
    3. Stellen Sie die Konfiguration des freigegebenen Kontos bereit, und weisen Sie dem Gerät an, welche Zertifikate für Microsoft Entra CBA gültig sind.
  4. Bereitet einzelne Geräte auf freigegebene Microsoft Entra-Konten vor.

Voraussetzungen

Unterstützung für freigegebene Microsoft Entra-Konten ist ab Insider Preview für Microsoft HoloLens Build 10.0.22621.1217 verfügbar.

Zusätzlich zur Erstellung des erforderlichen Betriebssystems auf Ihrer HoloLens müssen Sie auch die Voraussetzungen für Microsoft Entra CBA (Konfigurieren Microsoft Entra zertifikatbasierten Authentifizierung) erfüllen.

Schließlich benötigen Sie Zugriff auf Microsoft Intune, um Gerätekonfigurationen und Clientzertifikate bereitzustellen. Informationen zur erforderlichen Infrastruktur zum Bereitstellen von Clientzertifikaten über Intune finden Sie unter Informationen zu den Zertifikattypen, die von Microsoft Intune unterstützt werden. In diesem Beispiel verwenden wir SCEP-Zertifikate.

Hinweis

Für die Bereitstellung von SCEP-Zertifikaten stehen mehrere Optionen zur Verfügung, einschließlich Microsoft NDES und PKI. Für HoloLens kann es einfacher sein, einen Azure-Dienst für die Zertifikatregistrierung zu verwenden. Innerhalb der (Azure Marketplace) stehen mehrere Optionen zur Verfügung, wodurch die Konfigurationen für gemeinsam genutzte Microsft Entra-Konten von HoloLens von Ihrer Unternehmens-PKI isoliert werden können.

Die wichtigsten Anforderungen für den SCEP-Dienst sind:

  1. Der Dienst kann Gerätezertifikatanforderungen von Microsoft Intune akzeptieren.
  2. Der Dienst kann Zertifikate mit definierten EKU's (Clientauthentifizierung und Smartcardanmeldung) generieren.

Es wird dringend empfohlen, Ihre Geräte für Autopilot zu konfigurieren. Autopilot vereinfacht die Geräteeinrichtung für Endbenutzer.

Konfigurieren Sie Ihren Microsoft Entra Mandanten, um Microsoft Entra CBA zu aktivieren.

Ihr Microsoft Entra Mandant muss so konfiguriert sein, dass Microsoft Entra CBA für eine ausgewählte Gruppe von Benutzern aktiviert wird.

  1. Erstellen Sie eine Microsoft Entra Gruppe, die die freigegebenen Microsoft Entra-Konten enthält. Als Beispiel verwenden wir den Namen "SharedAccounts" für diese Gruppe.
  2. Erstellen Sie eine Microsoft Entra Gruppe, die die freigegebenen HoloLens-Geräte enthält. Als Beispiel verwenden wir den Namen "SharedDevices" für diese Gruppe. Dieser Gruppe werden später gerätebasierte Intune-Konfigurationsprofile zugewiesen.
  3. Aktivieren Sie Microsoft Entra zertifikatbasierte Authentifizierung (Certificate-Based Authentication, CBA) für die Gruppe SharedAccounts. Eine vollständige Schritt-für-Schritt-Anleitung finden Sie unter Konfigurieren der zertifikatbasierten Authentifizierung Microsoft Entra. Die folgenden allgemeinen Schritte sind erforderlich, um dies einzurichten:
    1. Fügen Sie Microsoft Entra Ihr Zertifizierungsstellenzertifikat (Zertifizierungsstelle) hinzu. Microsoft Entra ID ermöglicht Clientzertifikaten, die von dieser Zertifizierungsstelle ausgestellt wurden, die Durchführung einer CBA.
    2. Aktivieren Sie die CBA für die Gruppe "SharedAccounts".
    3. Konfigurieren Sie die CBA so, dass das von Ihrer Zertifizierungsstelle ausgestellte Zertifikat MFA verwendet. Mit diesem Schritt soll sichergestellt werden, dass Benutzer auf Ressourcen zugreifen können, die MFA erfordern, ohne einen anderen Faktor einzurichten.
    4. Aktivieren Sie die Zertifikatbindung über UserPrincipalName.

Intune-Konfiguration

Intune muss für die Bereitstellung der zertifikate konfiguriert werden, die für Microsoft Entra CBA erforderlich sind. Intune muss auch eine Konfiguration bereitstellen, um die Geräte anzuweisen, welche Zertifikate für Microsoft Entra CBA gültig sind.

Bereitstellung von Clientzertifikaten über SCEP

Die Geräte müssen über das entsprechende Clientzertifikat verfügen, um Microsoft Entra CBA auszuführen. Erstellen Sie eine SCEP-Konfiguration, und weisen Sie sie "SharedDevices" zu:

  1. Zertifikattyp: Gerät

  2. Fügen Sie einen alternativen Antragstellernamen ( User Principal Name, UPN) hinzu, wobei der Wert dem UPN des freigegebenen Kontos entspricht, das dem Gerät zugewiesen ist. Der UPN muss die Seriennummer des Geräts enthalten, um ihn einem Gerät zuzuordnen. Sie können die Intune-Variable {{Device_Serial}} verwenden, um auf die Seriennummer des Geräts zu verweisen. Geben Sie z. B. den Wert ein HL-{{Device_Serial}}@contoso.com , wenn die freigegebenen Konten das Namensformat haben HL-123456789@contoso.com.

  3. Schlüsselspeicheranbieter (KSP): Wählen Sie "TPM erforderlich, andernfalls fehler" aus, um sicherzustellen, dass das Zertifikat nicht vom Gerät exportiert werden kann, um es an anderer Stelle zu verwenden.

  4. Stellen Sie sicher, dass das Zertifikat mindestens die folgenden EKUs (Extended Key Usages) aufweist:

    • Smartcard-Anmeldung: 1.3.6.1.4.1.311.20.2.2
    • Clientauthentifizierung: 1.3.6.1.5.5.7.3.2

    Sie können dieser Liste weitere EKUs hinzufügen, um die für Microsoft Entra CBA zulässigen Zertifikate weiter einzuschränken. Sie müssen diese EKUs der XML-Richtlinie für ConfigureSharedAccount hinzufügen.

Beispiel für die SCEP-Konfiguration

Ausführliche Schritte zum Konfigurieren von SCEP in Intune finden Sie unter Verwenden von SCEP-Zertifikatprofilen mit Microsoft Intune.

Zertifizierungsstellenzertifikatbereitstellung

Die Geräte müssen auch der Zertifizierungsstelle vertrauen, die ihr Clientzertifikat ausgestellt hat. Erstellen Sie eine vertrauenswürdige Zertifikatkonfiguration, und weisen Sie sie der Gruppe "SharedDevices" zu. Diese Zuweisung stellt Ihr Zertifizierungsstellenzertifikat auf den Geräten bereit. Weitere Informationen finden Sie in der Dokumentation: Erstellen vertrauenswürdiger Zertifikatprofile in Microsoft Intune.

ConfigureSharedAccount-Richtlinie

Diese Richtlinie teilt den Geräten mit, welche Zertifikate für Microsoft Entra CBA gültig sind. Erstellen Sie eine benutzerdefinierte Gerätekonfigurationsrichtlinie, und weisen Sie sie "SharedDevices" zu:

Policy Datentyp
./Vendor/MSFT/Policy/Config/MixedReality/ConfigureSharedAccount Zeichenfolge oder Zeichenfolge (XML-Datei)

Beispielkonfiguration:

<SharedAccountConfiguration>
    <SharedAccount>
        <!--
          TODO: Replace the example value below with your issuer certificate's thumbprint.
          You may customize the restrictions for which certificates are displayed. See below.
        -->
        <IssuerThumbprint>77de0879f69314d867bd08fcf2e8e6616548b3c8</IssuerThumbprint>
    </SharedAccount>
</SharedAccountConfiguration>

Sie können die Einschränkungen anpassen, für die Zertifikate für Microsoft Entra CBA angezeigt werden. Im obigen Beispiel muss der Zertifikatfingerabdruck des Ausstellers mit dem angegebenen Wert übereinstimmen. Es ist auch möglich, die Einschränkung basierend auf dem Namen des Ausstellers anzuwenden oder weitere Einschränkungen basierend auf erweiterten Schlüsselverwendungen (EKUs) auf das Zertifikat anzuwenden. Beispiele zum Konfigurieren von XML finden Sie unter ConfigureSharedAccount XML Examples (Beispiele für configureSharedAccount XML ).

Überprüfen Sie vor dem Speichern dieser Gerätekonfiguration die XML anhand des unter ConfigureSharedAccount-XML-Schema angegebenen Schemas , um sicherzustellen, dass es wohlgeformt ist.

Konfiguration einzelner Geräte

Führen Sie für jedes HoloLens-Gerät, das Sie für freigegebene Microsoft Entra-Konten konfigurieren möchten, die folgenden Schritte aus:

  1. Erstellen Sie einen Microsoft Entra Benutzer im format, das in Schritt 2 der Clientzertifikatbereitstellung über SCEP angegeben wurde. Beispiel: HL-123456789@contoso.com.
  2. Fügen Sie diesen Benutzer der Gruppe "SharedAccounts" hinzu.
  3. Stellen Sie sicher, dass das Gerät der Gruppe "SharedDevices" hinzugefügt wird. Sie sollten Zuerst Ihre Geräte für Autopilot konfigurieren, damit sie bereits in Microsoft Entra vorhanden sind.

Unter Beispielskript für die Geräteeinrichtung finden Sie ein Beispiel für ein PowerShell-Skript, das zum Automatisieren dieses Prozesses verwendet werden kann.

Testen der Konfiguration

Nachdem Sie die obige Konfiguration abgeschlossen haben, können Sie freigegebene Microsoft Entra-Konten auf HoloLens ausprobieren.

Wenn Ihr Gerät bereits für Autopilot konfiguriert ist, führen Sie das Gerät durch den normalen Autopilot-Fluss. Die erforderlichen Gerätekonfigurationen werden während autopilot angewendet. Nachdem der Autopilot-Flow abgeschlossen ist, wird der folgende Bildschirm angezeigt:

Anmeldebildschirm mit freigegebenem Konto

Tippen Sie auf die Schaltfläche "Anmelden", um mit der Verwendung des freigegebenen Microsoft Entra Kontos zu beginnen.

Problembehandlung

Problem: Das freigegebene Microsoft Entra Konto wird nicht auf dem Anmeldebildschirm angezeigt!

Lösung: Überprüfen Sie zunächst, ob das Gerät die richtigen Zertifikate empfängt. Öffnen Sie den Zertifikat-Manager (Zertifikat-Manager), und stellen Sie sicher, dass sowohl das Clientzertifikat als auch die Zertifizierungsstellenzertifikate erfolgreich auf dem Gerät bereitgestellt wurden.

Stellen Sie für das Clientzertifikat sicher, dass es im Speicher "Mein" auf dem lokalen Computer installiert ist.

Zertifikat-Manager, der den Speicherort des Zertifikats anzeigt

Wenn das Zertifikat nicht vorhanden ist, führen Sie die Schritte zur Problembehandlung für Intune-SCEP-Profile aus.

Wenn das Zertifikat vorhanden ist, stellen Sie sicher, dass das Zertifikat innerhalb der Gültigkeitsdaten den erwarteten Aussteller und EKUs aufweist:

Zertifikat-Manager mit Eigenschaften des Zertifikats

Stellen Sie als Nächstes sicher, dass der XML-Richtlinienwert, den Sie auf MixedReality/ConfigureSharedAccount angewendet haben, wohlgeformt ist. Sie können eine der vielen XSD-Validierungssteuerelemente (XML Schema) online verwenden, um zu überprüfen, ob Ihr XML dem unter ConfigureSharedAccount XML Schema beschriebenen Schema entspricht.

Problem: Der Anmeldeversuch schlägt fehl!

Lösung: Vergewissern Sie sich, dass Sie die CBA ordnungsgemäß konfiguriert haben, indem Sie die Anweisungen unter Konfigurieren der Microsoft Entra zertifikatbasierten Authentifizierung befolgen. Lesen Sie auch die häufig gestellten Fragen zu Microsoft Entra häufig gestellten Fragen zur zertifikatbasierten Authentifizierung (Certificate-Based Authentication, CBA). Manchmal kann es hilfreich sein, zuerst die folgenden Debugschritte auf einem Windows-Desktopgerät auszuprobieren: Windows Smart Karte Anmeldung mit Microsoft Entra zertifikatbasierten Authentifizierung.

Referenzen

ConfigureSharedAccount XML-Schema

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="SharedAccountConfiguration">
    <xsd:complexType mixed="true">
      <xsd:sequence>
        <xsd:element minOccurs="1" maxOccurs="1" name="SharedAccount">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:choice>
                <xsd:element name="IssuerThumbprint">
                  <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                      <xsd:maxLength value="40" />
                    </xsd:restriction>
                  </xsd:simpleType>
                </xsd:element>
                <xsd:element name="IssuerName">
                  <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                      <xsd:maxLength value="512" />
                    </xsd:restriction>
                  </xsd:simpleType>
                </xsd:element>
              </xsd:choice>
              <xsd:element minOccurs="0" maxOccurs="1" name="EkuOidRequirements">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element maxOccurs="5" name="Oid">
                      <xsd:simpleType>
                        <xsd:restriction base="xsd:string">
                          <xsd:maxLength value="100" />
                        </xsd:restriction>
                      </xsd:simpleType>
                    </xsd:element>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Xml-Beispiele für ConfigureSharedAccount

Fordern Sie an, dass das Ausstellerzertifikat über einen Betreff von CN=YourCA, DC=Test verfügt:

<SharedAccountConfiguration>
    <SharedAccount>
        <IssuerName>CN=yourCA, DC=Test</IssuerName>
    </SharedAccount>
</SharedAccountConfiguration>

Setzen Sie voraus, dass das Zertifikat des Ausstellers einen angegebenen Fingerabdruck aufweist:

<SharedAccountConfiguration>
    <SharedAccount>
        <IssuerThumbprint>77de0879f69314d867bd08fcf2e8e6616548b3c8</IssuerThumbprint>
    </SharedAccount>
</SharedAccountConfiguration>

Fordern Sie an, dass das Ausstellerzertifikat über einen angegebenen Fingerabdruck verfügt und dass das Clientzertifikat EKUs mit den OIDs 1.2.3.4.5.6 und 1.2.3.4.5.7 aufweist:

<SharedAccountConfiguration>
    <SharedAccount>
        <IssuerThumbprint>77de0879f69314d867bd08fcf2e8e6616548b3c8</IssuerThumbprint>
        <EkuOidRequirements>
            <Oid>1.2.3.4.5.6</Oid>
            <Oid>1.2.3.4.5.7</Oid>
        </EkuOidRequirements>
    </SharedAccount>
</SharedAccountConfiguration>

EKUs 1.3.6.1.4.1.311.20.2.2 (Smartcard-Anmeldung) und 1.3.6.1.5.5.7.3.2 (Clientauthentifizierung) sind immer erforderlich, unabhängig davon, ob sie in dieser Liste enthalten sind.

Beispielskript für die Geräteeinrichtung

Bevor Sie dieses Beispielskript für die Geräteeinrichtung verwenden, sollten Sie Verweise von "contoso" in Ihren Domänennamen ändern.

<#
.Synopsis
Configures a device for shared account

.Description
This script configures a device for shared account.

Note that you'll need to have the necessary permissions in your tenant to manage
user and device memberships and query Intune devices.

.Example
.\ConfigureSharedDevice.ps1 400064793157
#>


param (
    [Parameter(Mandatory = $true)]
    [string]
    # Serial number of the device. Typically a 12-digit numeric string.
    $DeviceSerialNumber,
    [string]
    # Group ID of the group that contains the shared accounts such as HL-123456789@contoso.com
    $SharedAccountGroupId,
    [string]
    # Group ID of the group that contains the shared devices
    $SharedDeviceGroupId
)

function Install-Dependencies {
    Write-Host -Foreground Cyan "Installing Dependencies..."

    if (!(Get-InstalledModule Microsoft.Graph -ErrorAction SilentlyContinue)) {
        Write-Host -Foreground Cyan "Installing Microsoft.Graph"
        Install-Module Microsoft.Graph -Scope CurrentUser -Repository 'PSGallery'
    }

    Write-Host -Foreground Cyan "Installing Dependencies... Done"
}

function New-PasswordString {
    $alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_-=+[]{}|;:,.<>/?'
    $length = 40
    $password = ""
    for ($i = 0; $i -lt $length; $i++) {
        $password += $alphabet[(Get-Random -Minimum 0 -Maximum $alphabet.Length)]
    }

    return $password
}

function New-SharedUser {
    param (
        $UserName,
        $DisplayName
    )

    # Does user already exist?
    $searchResult = Get-MgUser -Count 1 -ConsistencyLevel eventual -Search "`"UserPrincipalName:$UserName`""

    if ($searchResult.Count -gt 0) {
        Write-Host -Foreground Cyan "$UserName exists, using existing user."
        return $searchResult
    }

    $mailNickName = $UserName.Split('@')[0];

    Write-Host -Foreground Cyan "Creating $UserName"

    $passwordProfile = @{
        Password = New-PasswordString
    }

    return New-MgUser -AccountEnabled -DisplayName $DisplayName -Country US -UsageLocation US -MailNickname $mailNickName -UserPrincipalName $UserName -PasswordProfile $passwordProfile
}

function New-SharedUserForDevice {
    param (
        $DeviceSerialNumber
    )

    $userName = "HL-$DeviceSerialNumber@contoso.onmicrosoft.com"
    $displayName = "Shared HoloLens"

    return New-SharedUser -UserName $userName -DisplayName $displayName
}

function Add-UserToGroup {
    param (
        $UserId,
        $GroupId
    )

    $groupResult = Get-MgGroup -GroupId $GroupId
    if ($groupResult.Count -eq 0) {
        throw "Failed to find user group"
    }

    Write-Host -Foreground Cyan "Adding user ($UserId) to group"
    New-MgGroupMember -GroupId $GroupId -DirectoryObjectId $UserId
}

function Get-DeviceAADId {
    param (
        $DeviceSerialNumber
    )

    $deviceResult = Get-MgDeviceManagementManagedDevice | Where-Object { $_.SerialNumber -eq $DeviceSerialNumber }

    if ($deviceResult.Count -eq 0) {
        throw "Cannot find device with serial number $DeviceSerialNumber in Intune"
    }

    $result = ($deviceResult | Select-Object -First 1).AzureAdDeviceId

    Write-Host "Found device: $result"

    return $result
}

function Add-DeviceToGroup {
    param (
        $DeviceAADId,
        $GroupId
    )

    $groupResult = Get-MgGroup -GroupId $GroupId
    if ($groupResult.Count -eq 0) {
        throw "Failed to find device group"
    }

    $deviceResult = Get-MgDevice -Count 1 -ConsistencyLevel eventual -Search "`"DeviceId:$DeviceAADId`""
    if ($deviceResult.Count -eq 0) {
        throw "Failed to find device $DeviceAADId"
    }

    Write-Host -Foreground Cyan "Adding device $($deviceResult.Id) to group"
    
    New-MgGroupMember -GroupId $GroupId -DirectoryObjectId $deviceResult.Id
}

function Register-SharedDevice {
    param (
        $DeviceSerialNumber
    )

    Install-Dependencies

    Connect-MgGraph -Scopes "User.ReadWrite.All", "Group.Read.All", "GroupMember.ReadWrite.All", "DeviceManagementManagedDevices.Read.All", "Device.ReadWrite.All"

    $deviceAADId = Get-DeviceAADId $DeviceSerialNumber
    Add-DeviceToGroup $deviceAADId $SharedDeviceGroupId

    $user = New-SharedUserForDevice $DeviceSerialNumber
    Add-UserToGroup $user.Id $SharedAccountGroupId
}

Register-SharedDevice $DeviceSerialNumber