Public/Restore-IDI.ps1
function Restore-IDI{ <# .SYNOPSIS Restore custom fields (Notes) .DESCRIPTION Restore custom fields (Notes) Assigment possible by id (Intune) or serialnumber .PARAMETER Path Path where the backup is stored .PARAMETER serial Switch to restore by serialnumber (default is id) #> param ( [parameter(Mandatory = $true, HelpMessage = "Path where the backup is stored")] [ValidateNotNullOrEmpty()] [string]$Path, [parameter(Mandatory = $false, HelpMessage = "Switch to restore by serialnumber (default is id)")] [ValidateNotNullOrEmpty()] [switch]$serial ) try{ if(Test-Path -Path $Path){ Write-Verbose "Reading Backup from: $Path" $BackupJson = Get-Content $Path $Backup = $BackupJson | ConvertFrom-Json foreach($Device in $Backup){ if($serial){ Write-Verbose "Get managed Device from Intune by SerialNumber: $($Device.serialNumber) ..." $uri = "https://graph.microsoft.com/beta/deviceManagement/managedDevices?`$filter=serialNumber%20eq%20'$($Device.serialNumber)'" $Device.id = (Invoke-MSGraphRequest -HttpMethod GET -Url $uri -ErrorAction Stop).value.id } if($Device.id){ Write-Verbose "Restore IDI / Notes for: $($Device.id)" $Notesonly = $($Device[0] | Convertto-Json) | Convertfrom-Json $Notesonly[0].PSObject.Properties.Remove("id") $Notesonly[0].PSObject.Properties.Remove("serialNumber") Write-Verbose " Properties: $($Notesonly.PSObject.Properties.Name)" # Update the notes of the device $Note_json = $Notesonly | Convertto-Json $Json = @{ "notes" = "$Note_json" } $uri = "https://graph.microsoft.com/beta/deviceManagement/managedDevices('$($Device.id)')" Invoke-MSGraphRequest -Url $uri -HttpMethod PATCH -Content $Json }else{ Write-Warning "Device ID for SerialNumber not found: $($Device.serialNumber)" } } }else{ Write-Error "File does not exist: $Path" } }catch{ Write-Error $_ } } |