Privat/Invoke-IBMcollectDiagnostics.ps1
function Invoke-IBMcollectDiagnostics { <# .SYNOPSIS Initiates a request to collect diagnostic logs from Intune managed devices based on specified criteria. .DESCRIPTION The `Invoke-IBMcollectDiagnostics` function sends a request to collect diagnostic logs for Intune managed devices. You can specify individual devices by `DeviceId`, `GroupName`, `DeviceName`, or `OS`. Additionally, you can choose to collect logs from all devices or select specific devices/groups interactively. .NOTES Author: Florian Salzmann | @FlorianSLZ | https://scloud.work Version: 1.1 Date: 2024-08-03 Changelog: - 2024-08-01: 1.0 Initial version - 2024-08-03: 1.1 Added filtering for only supported OS types #> param ( [parameter(Mandatory = $false, HelpMessage = "Specify the ID of the individual device to collect diagnostic logs.")] [string]$DeviceId, [parameter(Mandatory = $false, HelpMessage = "Specify the name of the group containing devices to collect diagnostic logs.")] [string]$GroupName, [parameter(Mandatory = $false, HelpMessage = "Specify the name of the individual device to collect diagnostic logs.")] [string]$DeviceName, [parameter(Mandatory = $false, HelpMessage = "Specify the operating system of the devices to collect diagnostic logs. For example, 'Windows' or 'iOS'.")] [string]$OS, [parameter(Mandatory = $false, HelpMessage = "Collect diagnostic logs from all devices managed by Intune.")] [switch]$AllDevices, [parameter(Mandatory = $false, HelpMessage = "Interactively select specific devices to collect diagnostic logs.")] [switch]$SelectDevices, [parameter(Mandatory = $false, HelpMessage = "Interactively select a specific group of devices to collect diagnostic logs.")] [switch]$SelectGroup ) # Definition of supported OS for this remote action $SupportetOS = @("Windows") # Get device IDs based on provided criteria if($AllDevices){ $CollectionDevicesInfo = Get-IBMIntuneDeviceInfos -AllDeviceInfo }elseif($SelectDevices){ $CollectionDevicesInfo = Get-IBMIntuneDeviceInfos -SelectDevices -AllDeviceInfo }elseif($SelectGroup){ $CollectionDevicesInfo = Get-IBMIntuneDeviceInfos -SelectGroup -AllDeviceInfo }else{ $CollectionDevicesInfo = Get-IBMIntuneDeviceInfos -DeviceId $DeviceId -GroupName $GroupName -DeviceName $DeviceName -OS $OS -AllDeviceInfo } if (-not $CollectionDevicesInfo) { Write-Warning "No devices found based on the provided criteria." return } # create Device Log Collection Request for each device $counter = 0 foreach ($DeviceInfo in $CollectionDevicesInfo) { $counter++ Write-Progress -Id 0 -Activity "create Device Log Collection Request" -Status "Processing $($counter) of $($CollectionDevicesInfo.count)" -CurrentOperation $computer -PercentComplete (($counter/$CollectionDevicesInfo.Count) * 100) if($DeviceInfo.operatingSystem -notin $SupportetOS){ Write-Warning "create Device Log Collection Request is only supported for ""$SupportetOS"" devices. Skipping device ID: $($DeviceInfo.id)" continue } $uri = "https://graph.microsoft.com/beta/deviceManagement/managedDevices/$($DeviceInfo.id)/createDeviceLogCollectionRequest" try { $response = Invoke-MgGraphRequest -Method POST -Uri $uri Write-Verbose "create Device Log Collection Request triggered for device ID: $($DeviceInfo.id). $Response" } catch { Write-Error "An error occurred while create Device Log Collection Request for device ID: $($DeviceInfo.id). Error: $_" } } } |