Zum Inhalt
IntuneDeviceInventory
Home » Introducing IntuneDeviceInventory

Introducing IntuneDeviceInventory

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 IntuneDeviceInventory
Codesprache: Power Shell (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:

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
Codesprache: Power Shell (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 $ClientSecret
Codesprache: Power Shell (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

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'
Codesprache: Power Shell (powershell)

11 Gedanken zu „Introducing IntuneDeviceInventory“

  1. Love this. I love the idea of bulk actions.
    Is bulk delete possible?

    I'm working on a tenant to tenant migration, and need to delete devices from old tenant after an OS re-install so that it gets picked up in the new tenant.

    Thank you!

  2. Looks Great however won't show any devices. Wondering if it isn't handling the number of devices, we have in our tenant we have close to 35,000 devices in total.

    1. Hi Ben, wow 35k is a lot. I tested it up to 5k. Those 5k took around 5 minutes to initialize.
      Did you try to use the -verbose parameter?
      In addition, I try to implement a progress parameter to show what's happening.

  3. Does the group have to be a specific type of group? When i run (Invoke-IDIDeviceRestart -Group "Test-IPADRebootgroup" -verbose) it shows 2 members found then the next line is "WARNING: No device was found with the specified search criteria." I am not sure what i am missing.

    Thank you for this information!

    1. Hi Chris, this can happen if one of the devices is not in Intune anymore. The case the group memberships are checked via the azure AD Devices id which are present for some time after deletion.

      1. Thanks for the quick response, I am able to run the command directly to the device based on the ID and confirmed it worked. The command i am using is (Invoke-IDIDeviceRestart -AzureADDeviceID "*Azure ID of Ipad*".

        I am currently working on a powershell script to import a csv of all the IDs but doing it based on group would be much easier.

        Thank you,

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.