Public/Invoke-IDIDeviceWipe.ps1

function Invoke-IDIDeviceWipe {

    <#
    .SYNOPSIS
        Wipe Intune devices (single or bulk)
 
    .DESCRIPTION
        Wipe 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
        Run wipe 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 = "Run wipe without asking for each device")]
        [ValidateNotNullOrEmpty()]
        [switch]$Force

    )

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

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

        Write-Verbose "Wipe device with id: $($IDIDevice.id) ..."
        $uri = "https://graph.microsoft.com/beta/deviceManagement/managedDevices('$($IDIDevice.id)')/microsoft.graph.wipe"
        Invoke-MgGraphRequest -Uri $uri -Method POST
    }else{
        Write-Warning "No device or scope for Invoke-IDIDeviceWipe specified."
    }
}