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.
IntuneDeviceInventory @PSGallery
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
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
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.
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
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:
Parameter |
Beschreibung |
-IDIDevice | Gib ein Gerät an, dass du mit Get-IDIDevice ausgelesen hast. |
-Group |
Mitglieder einer Gruppe |
-User | UPN eines spezifischen Users. Aktion wird für alle seine Geräte ausgeführt. |
-deviceName | Spezifischen Gerätenamen. |
-id | Intune Device ID |
-azureADDeviceId | Azure AD Device ID (Wird für die Verarbeitung der Gruppenmitglieder verwendet) |
-All | Triggert die Aktion für alle Intune Geräte. |
-Grid | Zeigt dir eine «Grid View» an, in welcher du ein oder mehrere Geräte anklicken/auswählen kannst. |
-Verbose | Diesen 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:
Und hier eine Major Funktion. Diese werden erst nach einer Bestätigung oder mit dem Parameter -Force
ausgeführt.
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, haben Jannik Reinhard und ich zusätzlich ein UI zum Modul entwickelt. Dieses findest du ebenfalls im GitHub Repository.
Hier ein kleiner Ausschnitt des 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'
Post erstmals veröffentlich von unserem Business Solutions Consultant Florian Salzmann auf seinem privaten Blog auf scloud.work