JumalaSika ltd - Fotolia

Azure-AD-Nutzerberichte mit Microsoft Graph erstellen

Microsoft Graph wird bald zum wichtigsten Tool, um Benutzer und Geräte zu verwalten, die sich mit Office 365 verbinden. Wir erklären, was Sie zum Einstieg wissen müssen.

Die bevorstehende Stilllegung bestimmter Funktionen in den Modulen MSOnline und Azure AD PowerShell bedeutet, wird viele Admins dazu veranlassen, einen Wechsel zu Microsoft Graph zu vollziehen.

Microsoft plant, die Lizenzierungszuweisungs-APIs und PowerShell-Cmdlets in den Modulen Azure AD Graph und MSOnline bis zum 31. März 2023 abzuschalten. Der Übergang vom Active Directory PowerShell-Modul oder dem Azure AD PowerShell-Modul zum Microsoft Graph PowerShell-Modul ist in der Regel aufwendig. Die gute Nachricht ist, dass es sich nicht um eine Verschlechterung handelt, sondern lediglich um eine andere Art der Arbeit mit der Cloud-basierten Identitäts- und Zugriffsmanagement-Plattform. Wir erklären in diesem Artikel, wie man grundlegende Azure Active Directory-Berichtstools erstellt und Lizenzzuweisungen mit dem Microsoft Graph PowerShell-Modul anpasst.

So richten Sie Microsoft Graph ein

Bevor wir den Azure AD-Benutzerbericht erstellen, müssen wir die PowerShell-Umgebung für Microsoft Graph einrichten. Alle Skripte in diesem Lernprogramm hängen von den Microsoft Graph PowerShell-Modulen ab. Sie können die gesamte Bibliothek der Microsoft Graph-Module mit dem folgenden Befehl installieren:

Install-Module Microsoft.Graph

Die Installation kann einige Minuten dauern. Wenn Sie es vorziehen, selektiv nur die Module zu installieren, die Sie benötigen, um mitzuarbeiten, führen Sie das folgende PowerShell-Skript aus:

$modules = @(

    'Microsoft.Graph.Authentication'

    'Microsoft.Graph.Users'

    'Microsoft.Graph.Identity.DirectoryManagement'

)

Install-Module $modules

Als nächstes verbinden Sie sich mit Microsoft Graph:

Connect-MgGraph

Wenn Sie sich zum ersten Mal bei dem Microsoft Graph-Modul anmelden, werden Sie aufgefordert, ein Konto mit der Berechtigung zum Hinzufügen der Microsoft Graph-Anwendung zu Azure AD anzugeben. Dies erfordert ein administratives Konto oder die Zugriffsgenehmigung eines Administrators für andere Konten. Weitere Informationen zur Authentifizierung bei Microsoft Graph finden Sie in der Dokumentation von Microsoft.

In diesem Tutorial werden wir außerdem einige Berichte als Excel exportieren. Führen Sie den folgenden PowerShell-Befehl aus, um das ImportExcel-Modul zu installieren:

Install-Module ImportExcel

Wie man einen Azure AD-Benutzerbericht mit Microsoft Graph erstellt

Es kann frustrierend sein, den Status von Benutzern in Microsoft 365 oder Azure AD über das Verwaltungsportal abzurufen, insbesondere wenn Sie mehr als eine Seite mit Benutzern haben. Die Microsoft Graph-Module machen diese Art von Aufgabe einfach. Mit dem folgenden Befehl erhalten Sie zum Beispiel eine Liste aller Benutzer:

Get-MgUser -All

Dieser Befehl gibt nur einige wenige Eigenschaften jedes Benutzers aus. Um weitere Informationen für jeden Benutzer zu erhalten, verwenden Sie den Parameter -Property. Im Gegensatz zum Cmdlet Get-AdUser von Active Directory schränkt diese Eigenschaft jedoch die zurückgegebenen Eigenschaften ein, statt sie dem Standardsatz hinzuzufügen. Das heißt, wenn wir die Standardeigenschaften einschließen möchten, müssen wir sie in das Array aufnehmen, das wir an -Property übergeben.

Zum Beispiel schließt der folgende Befehl die Abteilung des Benutzers zusätzlich zu den Standardeigenschaften ein:

$props ='Id','DisplayName','Mail','UserPrincipalName','UserType','Department'

Get-MgUser -All -Property $props | Select-Object $props

Als nächstes können wir einen umfassenderen Benutzerbericht erstellen, der die folgenden Daten zurückgibt:

  • grundlegende Metadaten: Name, E-Mail, Hauptbenutzername (UPN), Titel und Abteilung;
  • Kontostatus;
  • zuletzt festgelegtes Passwort;
  • letzte Anmeldung; und
  • zugewiesene Lizenzen.

Die Eigenschaft der letzten Anmeldung, SignInActivity, ist derzeit in der Microsoft Graph REST API v1.0 nicht abrufbar. Mit dem folgenden Befehl wird zur Beta-API gewechselt, die diese Eigenschaft bietet:

Select-MgProfile beta

Die meisten der gewünschten Eigenschaften sind so einfach, dass wir ein Array erstellen können, um sie abzurufen.

$props = @(

    # Basic metadata

    'Id','DisplayName','Mail','UserPrincipalName','Department','JobTitle'

    # Account Status

    'AccountEnabled',

    # Password last set

    'LastPasswordChangeDateTime',

    # Last logon

    'SignInActivity',

    # Assigned Licenses

    'AssignedLicenses'

)

Get-MgUser -All -Property $props | Select-Object $props

Sowohl die SignInActivity als auch die AssignedLicenses sind Objekte, was zusätzliche Arbeit erfordert, um sie für einen Bericht zu formatieren.

Für SignInActivity gibt es zwei Eigenschaften: interaktive und nicht-interaktive Anmeldungen. In diesem Bericht wird die letzte interaktive Anmeldung aus LastSignInDateTime verwendet.

Die Eigenschaft AssignedLicenses ist ein Array von SKU-IDs, bei denen es sich um global eindeutige Bezeichner (GUIDs) handelt.

Die SKU-IDs sind in einem Bericht nicht nützlich, aber wir können jede SKU-ID in eine Lizenz auflösen, indem wir zunächst die Lizenzen mit dem Cmdlet Get-MgSubscribedSku abrufen und dann jede AssignedLicense nach dem Lizenznamen filtern. Der folgende Code verwendet eine Hashtabelle für Suchvorgänge, um eine schnellere Leistung als die Where-Object-Methode zu erzielen:

# Abrufen der SKUs

$skus = Get-MgSubscribedSku

# Erstellen einer Hashtabelle für schnellere Suchvorgänge

$skuHt = @{}

foreach ($sku in $skus) {

  $skuHt[$sku.SkuId] = $sku

}

# Lösen Sie die ID in den Lizenznamen auf

foreach($license in $testUser.AssignedLicenses) {

  $skuHt[$license.SkuId].SkuPartNumber

}

Die Ausgabe für den Testbenutzer gibt die String-IDs für die lizenzierten Produkte zurück.

Kombinieren Sie alle Befehle in einem einzigen Skript mit einer zusätzlichen Zeile am Ende, um den Bericht in ein Excel-Tabellenblatt zu exportieren.

# Da wir SignInActivity erhalten

Select-MgProfile beta

 

# Bauen Sie das Eigenschaften-Array

$props = @(

    # Basic metadata

    'Id','DisplayName','Mail','UserPrincipalName','Department','JobTitle'

    # Account Status

    'AccountEnabled',

    # Password last set

    'LastPasswordChangeDateTime',

    # Last logon

    'SignInActivity',

    # Assigned Licenses

    'AssignedLicenses'

)

$mgUsers = Get-MgUser -All -Property $props | Select-Object $props

 

# Beziehen Sie die SKUs

$skus = Get-MgSubscribedSku

 

# Erstellen Sie eine Hashtabelle, um Informationen schneller zu finden

$skuHt = @{}

foreach ($sku in $skus) {

    $skuHt[$sku.SkuId] = $sku

}

 

$userOutput = foreach ($user in $mgUsers) {

    # Resolve the ID to license name

    $licenses = foreach($license in $user.AssignedLicenses) {

        $skuHt[$license.SkuId].SkuPartNumber

    }

So erstellen Sie einen Gerätebericht aus Azure AD mit Microsoft Graph

Das Abrufen von Geräteinformationen ist etwas anders. Wie das Abrufen von Benutzern kann es eine frustrierende Übung sein, welche die Verwendung mehrerer Admin-Tools erfordert, um alle Informationen zu erhalten. Microsoft Graph stellt jedoch alle Daten ohne zusätzlichen Aufwand zur Verfügung.

Mit dem folgenden Befehl werden alle registrierten Geräte aufgelistet:

Get-MgDevice

Mit dem Parameter -Property können wir detailliertere Informationen über das Gerät und seinen Benutzer abrufen.

$props = 'AccountEnabled','ApproximateLastSignInDateTime','Id','OperatingSystem','OperatingSystemVersion','TrustType'

Get-MgDevice -All -Property $props | Select-Object $props | Format-Table

Wenn Sie Microsoft Intune verwenden, ist es sinnvoll, herauszufinden, wer der registrierte Besitzer ist. Wir können dies mit einem separaten Befehl tun, um die ID zu erhalten.

Get-MgDeviceRegisteredOwner -DeviceId <id>

Um weiter zu gehen, können wir diese Informationen über die Pipeline an das Cmdlet Get-MgUser weiterleiten.

Get-MgDeviceRegisteredOwner -DeviceId <id> | %{Get-MgUser -UserId $_.Id}

Das folgende Skript kombiniert sowohl den Benutzer- als auch den Gerätebericht, um einen einzigen Bericht zu erstellen:

# Bauen Sie das Eigenschaften-Array

 

$props = 'AccountEnabled','ApproximateLastSignInDateTime','Id','OperatingSystem','OperatingSystemVersion','TrustType'

 

# Erhalten Sie alle Geräte

$mgDevices = Get-MgDevice -All -Property $props | Select-Object $props

 

foreach ($mgDevice in $mgDevices) {

    # Get the registered owner and associate to a UPN

    $owner = Get-MgDeviceRegisteredOwner -DeviceId $mgDevice.Id | ForEach-Object {Get-MgUser -UserId $_.Id}

 

    # Add the UPN to the device report

    $mgDevice | Add-Member -MemberType NoteProperty -Name RegisterOwnerUPN -Value $owner.UserPrincipalName

}

 

$mgDevices | Export-Excel C:\tmp\Devices.xlsx -TableName Devices -AutoSize

Das Erstellen dieses Berichts kann bei großen Unternehmen sehr lange dauern, da das Skript für jedes Gerät eine Suche durchführt. Ich schlage vor, das Skript so zu planen, dass es unbeaufsichtigt durchläuft. Wenn Sie den Fortschritt des Skripts sehen möchten, können Sie Write-Host-Zeilen hinzufügen, um seinen Status zu überprüfen.

Bereitstellen von Benutzern und Lizenzen mit Microsoft Graph

Eine weitere Möglichkeit, Microsoft Graph zu nutzen, ist das Bereitstellen von Benutzern, einschließlich das Zuweisen von Lizenzen. Wenn Sie sich die Hilfe zum Cmdlet New-MgUser ansehen, werden Sie eine Vielzahl von Parametern finden. Anstatt jeden Aspekt des Cmdlets zu behandeln, werden wir die Grundlagen für den Einstieg behandeln.

Definieren Sie zunächst das Kennwort in einem Kennwortprofil, das Microsoft Graph als solches betrachtet. Dabei handelt es sich lediglich um eine Hashtabelle mit den folgenden Eigenschaften:

$passwordProfile = @{

  ForceChangePasswordNextSignIn = $true

  ForceChangePasswordNextSignInWithMfa = $true

  Passwort = (ConvertTo-SecureString 'RandomPasswordsRule123!' -AsPlainText -Force)

}

Als Nächstes definieren Sie die grundlegenden Metadaten über den Benutzer. Es muss darauf geachtet werden, dass der Verwendungsort für die Anwendung von Lizenzen im nächsten Schritt korrekt festgelegt wird.

$userSplat = @{

    # User metadata

    GivenName = 'Test'

    Surname = 'Nutzer'

    DisplayName = 'Test-Nutzer'

    JobTitle = 'Minion of the First Class'

    Department = 'Buchhaltung'

 

    # Mail und UPN

    MailNickname = 'tuser'

    Mail = '[email protected]'

    UserPrincipalName = '[email protected]'

 

    # Für die Lizenzen

    UsageLocation = 'DE'

 

    # Passwort

    PasswordProfile = $passwordProfile

 

    # Account aktivieren

    AccountEnabled = $true

}

$newUser = New-MgUser @userSplat

Als nächstes weisen Sie die Lizenzen mit dem Cmdlet Set-MgUserLicense zu.

$license = Get-MgSubscribedSku | ?{$_.SkuPartNumber -eq 'ENTERPRISEPACK'}

Set-MgUserLicense -UserId $newUser.Id -AddLicenses @{SkuId = $license.SkuId}

In diesem Beispiel wird diesem Benutzer die Office 365 E3-Lizenz zugewiesen, indem auf die Dienstplan-String-ID ENTERPRISEPACK verwiesen wird. Diese Liste von Microsoft zeigt die vollständige Liste der Produktnamen und Serviceplanbezeichner.

Um einen Benutzer zu erstellen, bei dem einige der Office 365 E3-Funktionen deaktiviert sind, können wir auf die SKU-IDs verweisen. Sehen Sie sich dazu die Eigenschaft ServicePlans in der Ausgabe des Cmdlets Get-MgSubscribedSku an.

$license.ServicePlans

Um in diesem Beispiel zu verhindern, dass Benutzer auf Microsoft Teams zugreifen, weil Ihre Organisation Slack verwendet, können Sie die Office 365 E3-Lizenz zuweisen und Microsoft Teams mit dem folgenden Code deaktivieren:

# Beziehen Sie die E3-Lizenz

$license = Get-MgSubscribedSku | ?{$_.SkuPartNumber -eq 'ENTERPRISEPACK'}

 

# Deaktivieren Sie Teams

$disableSps = 'TEAMS1'

$toDisable = ($license.ServicePlans | ?{$disableSps -contains $_.ServicePlanName}).ServicePlanId

 

# Weisen Sie die Lizenz zu

Set-MgUserLicense -UserId $newUser.Id -AddLicenses @{DisabledPlans = $toDisable;SkuId = $license.SkuId} -RemoveLicenses @()

Das gesamte Provisioning-Skript legt das Kennwort fest und fügt die angepassten Microsoft-Lizenzen hinzu.

$passwordProfile = @{

    ForceChangePasswordNextSignIn = $true

    ForceChangePasswordNextSignInWithMfa = $true

    Password = (ConvertTo-SecureString 'ZufälligesPasswort123!' -AsPlainText -Force)

}

 

$userSplat = @{

    # Nutzer-Metadaten

    GivenName = 'Test'

    Surname = 'Nutzer'

    DisplayName = 'Test Nutzer'

    JobTitle = 'Minion of the First Class'

    Department = 'Buchhaltung'

 

    # Mail und UPN

    MailNickname = 'tuser'

    Mail = '[email protected]'

    UserPrincipalName = '[email protected]'

 

    # Für Lizenzierung

    UsageLocation = 'DE'

 

    # Passwort

    PasswordProfile = $passwordProfile

 

    # Account aktivieren

    AccountEnabled = $true

}

$newUser = New-MgUser @userSplat

 

# Erhalten Sie die E3-Lizenz

$license = Get-MgSubscribedSku | ?{$_.SkuPartNumber -eq 'ENTERPRISEPACK'}

 

# Deaktivieren Sie Teams

$disableSps = 'TEAMS1'

$toDisable = ($license.ServicePlans | ?{$disableSps -contains $_.ServicePlanName}).ServicePlanId

 

# Weisen Sie die Lizenzen zu

Set-MgUserLicense -UserId $newUser.Id -AddLicenses @{DisabledPlans = $toDisable;SkuId = $license.SkuId} -RemoveLicenses @()

Um mit dem Skript noch weiter zu gehen, wandeln Sie es in eine einfache Funktion namens New-OrgUser um, indem Sie jedes der Elemente aus dem userSplat als Funktionsparameter verwenden.

Function New-OrgUser {

    param (

        [string]$GivenName,

        [string]$Surname,

        [string]$JobTitle,

        [string]$Department,

        [string]$MailNickname,

        [string]$UsageLocation = 'DE',

        [securestring]$Password

    )

 

    $passwordProfile = @{

        ForceChangePasswordNextSignIn        = $true

        ForceChangePasswordNextSignInWithMfa = $true

        Password                             = $Password

    }

   

    $userSplat = @{

        # Nutzer-Metadaten

        GivenName         = $GivenName

        Surname           = $Surname

        DisplayName       = "$GivenName $Surname"

        JobTitle          = $JobTitle

        Department        = $Department

 

        # Mail und UPN

        MailNickname      = $MailNickname

        Mail              = "[email protected]"

        UserPrincipalName = "[email protected]"

 

        # Für Lizenzierung

        UsageLocation     = $UsageLocation

 

        # Passwort

        PasswordProfile   = $passwordProfile

 

        # Account aktivieren

        AccountEnabled    = $true

    }

    $newUser = New-MgUser @userSplat

 

    # Beziehen der E3-Lizenz

    $license = Get-MgSubscribedSku | Where-Object { $_.SkuPartNumber -eq 'ENTERPRISEPACK' }

 

    # Teams deaktivieren

    $disableSps = 'TEAMS1'

    $toDisable = ($license.ServicePlans | Where-Object { $disableSps -contains $_.ServicePlanName }).ServicePlanId

 

    # Lizenzen zuweisen

    Set-MgUserLicense -UserId $newUser.Id -AddLicenses @{DisabledPlans = $toDisable; SkuId = $license.SkuId } -RemoveLicenses @()

 

    $newUser

}

Anschließend können Sie den Bereitstellungsprozess vereinfachen, indem Sie das neu definierte Cmdlet aufrufen.

$splat = @{

    GivenName = 'Test'

    Surname = 'Nutzer'

    JobTitle = 'Minion of the First Class'

    Department = 'Buchhaltung'

    MailNickname = 'tuser'

    UsageLocation = 'US'

    Password = (ConvertTo-SecureString 'RandomPasswordsRule123!' -AsPlainText -Force)

}

New-OrgUser @splat

Microsoft Graph bietet eine besser integrierte Möglichkeit, mit der Cloud zu arbeiten

Microsoft Graph ist nur ein neuer Ansatz für die Verwaltung. Er ist leistungsfähig und wird von Microsoft ständig weiterentwickelt, um seine Funktionen zu erweitern. Microsoft Graph bietet einen rationalisierten Ansatz für die verschiedenen Verwaltungsaufgaben in Office 365 und Azure Active Directory. Jetzt, da die Uhr für bestimmte Funktionen tickt, lohnt es sich, die Arbeit mit Microsoft Graph zu erlernen, insbesondere mit der Beta-Version, die mehr Funktionen bietet.

Erfahren Sie mehr über Desktop-Management