Public/Invoke-IDIDeviceRetire.ps1

function Invoke-IDIDeviceRetire {

    <#
    .SYNOPSIS
        Retire Intune devices (single or bulk)
 
    .DESCRIPTION
        Retire Intune devices (single or bulk)
     
    .PARAMETER IDIDevice
        Array of the device to trigger
 
    .PARAMETER Group
        Trigger Intune Devices within a specific group
 
    .PARAMETER User
        Trigger Intune Devices from a specific user (UPN)
 
    .PARAMETER deviceName
        Trigger Intune Devices by name
 
    .PARAMETER id
        Trigger Intune Devices by id (deviceID)
 
    .PARAMETER azureADDeviceId
        Trigger Intune Device by azureADDeviceId
 
    .PARAMETER All
        Trigger all Intune Devices
 
    .PARAMETER Grid
        Switch to select Intune Devices out of a GridView
 
    .PARAMETER Force
        Retire without asking for each device
 
    #>


    param (

        [parameter(Mandatory = $false, HelpMessage = "Array of the device to trigger")]
        [ValidateNotNullOrEmpty()]
        [array]$IDIDevice,

        [parameter(Mandatory = $false, HelpMessage = "Trigger Intune Devices within a specific group")]
        [ValidateNotNullOrEmpty()]
        [string]$Group,

        [parameter(Mandatory = $false, HelpMessage = "Trigger Intune Devices from a specific primary user (UPN)")]
        [ValidateNotNullOrEmpty()]
        [string]$User,

        [parameter(Mandatory = $false, HelpMessage = "Trigger Intune Devices by Device Name")]
        [ValidateNotNullOrEmpty()]
        [string]$deviceName,

        [parameter(Mandatory = $false, HelpMessage = "Trigger Intune Devices by id")]
        [ValidateNotNullOrEmpty()]
        [string]$id,

        [parameter(Mandatory = $false, HelpMessage = "Trigger Intune Devices by azureADDeviceId")]
        [ValidateNotNullOrEmpty()]
        [string]$azureADDeviceId,

        [parameter(Mandatory = $false, HelpMessage = "Trigger all Intune Devices")]
        [ValidateNotNullOrEmpty()]
        [switch]$All,

        [parameter(Mandatory = $false, HelpMessage = "Switch to select Intune Devices out of a GridView")]
        [ValidateNotNullOrEmpty()]
        [switch]$Grid,

        [parameter(Mandatory = $false, HelpMessage = "Retire without asking for each device")]
        [ValidateNotNullOrEmpty()]
        [switch]$Force

    )

    
    if($All){
        if($global:IDIDevices_all){$global:IDIDevices_all | ForEach-Object{ Invoke-IDIDeviceRetire -IDIDevice $_}}
        else{Get-noneIDIDevice -All | ForEach-Object{ Invoke-IDIDeviceRetire -IDIDevice $_}}
        
    }elseif($Group){
        Get-noneIDIDevice -Group "$Group" | ForEach-Object{ Invoke-IDIDeviceRetire -IDIDevice $_}
        
    }elseif($User){
        Get-noneIDIDevice -User "$User" | ForEach-Object{ Invoke-IDIDeviceRetire -IDIDevice $_}
        
    }elseif($deviceName){
        Get-noneIDIDevice -deviceName "$deviceName" | ForEach-Object{ Invoke-IDIDeviceRetire -IDIDevice $_}
        
    }elseif($id){
        Get-noneIDIDevice -id "$id" | ForEach-Object{ Invoke-IDIDeviceRetire -IDIDevice $_}
        
    }elseif($azureADDeviceId){
        Get-noneIDIDevice -azureADDeviceId "$azureADDeviceId" | ForEach-Object{ Invoke-IDIDeviceRetire -IDIDevice $_}
        
    }elseif($Grid){
        if($global:IDIDevices_all){
            $Devices2Sync = $global:IDIDevices_all | Out-GridView -Title "Please select your devices" -OutputMode Multiple
            $Devices2Sync | ForEach-Object{ Invoke-IDIDeviceRetire -IDIDevice $_}
        }
        else{Get-noneIDIDevice -Grid | ForEach-Object{ Invoke-IDIDeviceRetire -IDIDevice $_}}
        
    }elseif($IDIDevice){

        if(!$Force){
            $RunMajor = Read-Host "Are you sure you want to retire Device $($IDIDevice.id) (Y/N)"
            if($RunMajor -ne "Y"){break}
        }

        Write-Verbose "Retire device with id: $($IDIDevice.id) ..."
        $uri = "https://graph.microsoft.com/beta/deviceManagement/managedDevices('$($IDIDevice.id)')/microsoft.graph.retire"
        Invoke-MSGraphRequest -Url $uri -HttpMethod POST
    }else{
        Write-Warning "No device or scope for Invoke-IDIDeviceRetire specified."
    }
}