Das PowerShell Modul IntuneDeviceInventory ermöglicht es dir benutzerdefinierte Felder zu Intune Geräte-Objekten hinzuzufügen. Zusätzlich beinhaltete es einige handliche und unterstützenden Befehle, um Mehrfachaktionen wie beispielsweise einen Sync oder Reboot anzustossen.

Das Modul inklusive dazugehörigem UI habe ich in Zusammenarbeit mit Jannik Reinhard entwickelt. Falls du Feedback zum Modul / Tool hast, freuen wir uns über einen Kommentar oder auch Kontakt via Social Media.

Table of Contents

Modul installieren

Das Modul habe ich in der PowerShell Gallery (IntuneDeviceInventory) veröffentlicht. Du kannst es darum ganz einfach bei dir via PowerShell installieren. Dazu gibst du folgenden Befehl ein:

Install-Module -Name IntuneDeviceInventoryCode language: PowerShell (powershell)

Funktionen

Das Modul kann grob in drei Funktionsgruppen unterteilt werden, Funktionen zur Verwaltung der benutzerdefinierten Felder, Funktionen für Massenaktionen und unterstützende Funktionen.

Authentifizierung

Du hast bei der Authentifizierung zwei Möglichkeiten. Entweder du meldest dich mit einem Intune Administrator an, oder verwendest eine Azure App Authentifizierung.

Benutzer Authentifizierung

Bei der Benutzerauthentifizierung musst du lediglich den Connect befehlt aufrufen und anschliessend deine Credentials eingeben.

Connect-IDI

App Authentifizierung

Für die Authtifizierung via App musst du zunächst eine App Registireung im Azure AD durchführen. Diese benötigt folgende Berechtigungen:

  • DeviceManagementManagedDevices.PrivilegedOperations.All
  • DeviceManagementManagedDevices.ReadWrite.All
  • Group.Read.All
  • GroupMember.Read.All
  • Organization.Read.All
  • User.Read.All

Die Registrierung kannst du entweder manuell im Azure oder Entra Portal (Applications > App registration) durchfügen oder über die Funktion New-IDIApp. Mit dem Parameter -Save wird die Verbindung in deinem AppData mit deinem User verschlüsselt abgelegt.
Falls bereits ein App besteht und du einfach ein neues Secret Estellene möchtest, verwende zusätzlich den Parameter -Force.

# Creates a new App and shows connection details
New-IDIApp

# Creates a new App and saves the details encrypted in the users AppData:
## ("C:\Users\%username%\AppData\Local\IntuneDeviceInventory\AppConnection\TenantId.connection")
New-IDIApp -Save
Code language: PowerShell (powershell)

Auch wenn du die App Registration via PowerShell machst, musst du am Schluss noch den "Admin consent" geben. Dazu wird dir nach erfolgreicher Erstellung die URL ausgegeben. Nach erfolgreichem Erteilen werden die Status grün.

Admin consent

Zur Verbindung mit einer abgespeicherten App Verbindung rufst du am einfachsten den Befehl Import-IDIAppConnection -Select auf. Damit werdend dir alle gespeicherten Verbindungen angezeigt und du kannst dich mit einem Klick verbinden.
Alternativ kannst du auch folgenden Befehl mit den entsprechenden App Parametern verwenden:

Save-IDIAppConnection -ClientId $ClientId -TenantId $TenantId -ClientSecret $ClientSecretCode language: PowerShell (powershell)

Verwaltung der benutzerdefinierten Felder

Die Verwaltung der benutzerdefinierten Felder funktioniert am besten via UI, mehr dazu weiter unten.
Natürlich kannst du die Felder auch via PowerShell erstellen und abfüllen, dazu zeige ich dir ein Beispiel im Demovideo.

Das sind die Funktionen dazu:

  • Add-IDIProperty
  • Get-IDIDevice
  • Set-IDIDevice

Backup & Restore

Während der Präsentation unseres Tools, hat Michael die Idee gebracht, auch eine "Backup & Restore" Funktion einzubauen. Dies für den Fall, dass sich in Zukunft etwas in Intune verändern sollte.
... und das haben wir natürlich gemacht. 😉

Mit der Funktion kannst du ganz einfach alle benutzerdefinierten Felder in ein JSON speichern und entweder bei deinem Teant oder aber auch in einen anderen importieren.
Der Restore in einen anderen Tenant ist dazu gedacht, falls du einen "Tenant zu Tenant" Migration durchführen musst. Dann hast du die Möglichkeit, das Backup nicht anhand der Device-ID einzuspielen, sondern anhand der Seriennummer. (Parameter -serial)

IDI Backup & Restore

Massenaktionen

Da es im Intune Portal nicht sehr praktikabel ist eine Aktion schnell für mehrere Geräte durchzuführen, habe ich die Massenaktionen eingebaut umso Aktionen, Geräte oder Gruppenbasiert, sowie für alle Geräte durchzuführen.

Aktuell sind das diese Funktionen, welche wiederum in Minor und Major eingeteilt werden, könne.
Die Minor Funktionen machen nur ein Update oder Restart des Geräts, bei den Major Funktionen ist das Gerät nach dem Absenden des Befehls nicht mehr nutzbar.

  • Invoke-IDIDeviceBitLockerRotation
  • Invoke-IDIDeviceDefenderScan
  • Invoke-IDIDeviceDefenderSignatures
  • Invoke-IDIDeviceRestart
  • Invoke-IDIDeviceSync
  • Invoke-IDIDeviceDelete
  • Invoke-IDIDeviceRetire
  • Invoke-IDIDeviceWipe

Alle "Invoke"-Funktionen kannst du mit den folgenden Parametern aufrufen:

ParameterBeschreibung
-IDIDeviceGib ein Gerät an, dass du mit Get-IDIDevice ausgelesen hast.
-GroupMitglieder einer Gruppe
-UserUPN eines spezifischen Users. Aktion wird für alle seine Geräte ausgeführt.
-deviceNameSpezifischen Gerätenamen.
-idIntune Device ID
-azureADDeviceIdAzure AD Device ID
(Wird für die Verarbeitung der Gruppenmitglieder verwendet)
-AllTriggert die Aktion für alle Intune Geräte.
-GridZeigt dir eine "Grid View" an, in welcher du ein oder mehrere Geräte anklicken/auswählen kannst.
-VerboseDiesen Parameter kannst du zusätzlich zu einem anderen angeben, um die Verarbeitung jedes Gerätes angezeigt zu bekommen. Das ist besonders bei vielen Geräten hilfreich.

Hier ein Beispiel in der Anwendung des Verbos Parameters:

Invoke-IDIDeviceSync

Und hier eine Major Funktion. Diese werden erst nach einer Bestätigung oder mit dem Parameter -Force ausgeführt.

Invoke-IDIDeviceDelete
Invoke-IDIDeviceDelete with Force parameter

Unterstützende Funktionen

Alle weiteren Funktionen findest du im Repository und beinhalten einen Beschrieb im Header. Mit diesen solltest du aber nichts machen müssen. Sie werden von den anderen Funktionen oder dem UI aufgerufen.

Dieser Post geht bei den Funktionen nicht in die Details. Genauere Beschreibungen und mehr Beispiele findest du im Projekt Repository auf GitHub oder im Demovideo weiter unten.

Ich habe das "Notes" Feld bereits abgefüllt! Was nun?

Keine Angst, auch wenn du das Notes Feld bereits mit einer Information abgefüllt hast, kannst du das Modul verwenden. Dazu gibt es die Funktion ConvertTo-IDINotes.
Mit dieser kannst du die Notizen für ein bestimmtes Gerät oder auch gleich alle in ein JSON und somit kompatibel mit dem IntuneDeviceInventory konvertieren.

Wenn du nicht sicher bist, ob deine Notizfelder kompatibel sind, führe einfach die Funktion Get-IDIDevice -All aus. Damit werden alle Geräte inklusive Notizen ausgelesen und geprüft. Ist ein Feld nicht kompatibel, wird gleich ein Fehler ausgegeben.
Alle Geräte konvertierst du mit dem Befehl ConvertTo-IDINotes -All.
Alle Geräte, die bereits kompatibel sind, werden dabei mit einer Warnung übersprungen.

UI zum Modul

Das Verwalten der benutzerdefinierten Felder ist via Terminal nicht immer ganz einfach und praktikabel. Um die Features noch einfacher nutzen zu können, hat Jannik Reinhard und ich zusätzlich ein UI zum Modul entwickelt. Dieses findest du ebenfalls im GitHub Repository.

Hier ein kleiner Ausschnitt des UI, mehr Infos findest du über den Button oben "UI Introduction".

IntuneDeviceInventory UI

Demo IntuneDeviceInventory (Terminal)

Im nachstehenden Video zeige ich dir, wie du mit dem Modul starten kannst und was die Basis Befehle sind. Weitere Beispiele findest du in meinem GitHub Repository.

Code Beispiele

Hier sind die Beispiele aus dem Demovideo:

#Installing IDI
Install-Module -Name IntuneDeviceInventory

# Creates a new App and shows connection details
## login with the Admin required (Application administrator, Application developer or Cloud application administrator)
New-IDIApp

# Creates a new App and saves the details encrypted in the users AppData:
## ("C:\Users\%username%\AppData\Local\IntuneDeviceInventory\AppConnection\TenantId.connection")
New-IDIApp -Save

# Creates a new App and saves the details encrypted in the users AppData
# -Force creates a new secret if the app already exists
New-IDIApp -Save -Force

# Lists all aviable/saved connections
Import-IDIAppConnection -All

# Authentication with a saved Azure App
Import-IDIAppConnection -TenantId your.domain.com

# Authentication with a saved Azure App (if you have multiple and want to select)
Import-IDIAppConnection -Select

# Convert existing device notes
ConvertTo-IDINotes -All -PropertyName "purchase date"

# Ge all devices
Get-IDIDevices -All

# Add property
Add-IDIProperty -PropertyName "Monitor"

# Select a device to edit a property
$Device2edit = $IDIDevices_all | Out-GridView -OutputMode Single

# Set device Property
$Device2edit.Monitor = 'Samsung Odyssey G9'

# Update device in Intune with changes
Set-IDIDevice -IDIDevice $Device2edit

# Bulk commands
## Trigger sync for all devices
Invoke-IDIDeviceSync -All

## Trigger reboot for devices in Group "DEV-WIN-Pilot"
Invoke-IDIDeviceRestart -Group "DEV-WIN-Pilot"

## Trigger reboot for devices, selected in GridView
Invoke-IDIDeviceRestart -Grid

## Trigger Defender Signatures update for specific device
Invoke-IDIDeviceDefenderSignatures -deviceName 'dev-w11-1'
Code language: PowerShell (powershell)