public/Remove-odsc.ps1

function Remove-odsc {
    [CmdletBinding(DefaultParameterSetName = 'UserPrincipalName', SupportsShouldProcess)]
    param(
        [Parameter(Mandatory = $true, ParameterSetName = 'UserPrincipalName')]
        [Parameter(Mandatory = $true, ParameterSetName = 'UserObjectId')]
        [string] $ShortcutName,

        [Parameter(Mandatory = $true, ParameterSetName = 'UserPrincipalName')]
        [string] $UserPrincipalName,

        [Parameter(Mandatory = $true, ParameterSetName = 'UserObjectId')]
        [string] $UserObjectId
    )

    begin {

    }

    process {
        $User = $null

        switch ($PsCmdlet.ParameterSetName) {
            "UserPrincipalName" {
                $User = $UserPrincipalName
            }
            "UserObjectId" {
                $User = $UserObjectId
            }
        }

        $ShortcutRequest = @{
            Resource = "users/${User}/drive/root:/$([uri]::EscapeDataString($ShortcutName))"
            Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Get
        }

        $ShortcutResponse = Invoke-odscApiRequest @ShortcutRequest

        if ($ShortcutResponse.remoteItem) {
            $ShortcutRequest = @{
                Resource = "users/${User}/drive/root:/$([uri]::EscapeDataString($ShortcutName))"
                Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Delete
            }

            if ($PSCmdlet.ShouldProcess("${User}'s OneDrive", "Removing shortcut '$($ShortcutName)'")) {
                $ShortcutResponse = Invoke-odscApiRequest @ShortcutRequest

                return $ShortcutResponse

            } else {
                return
            }

        } else {
            Write-Verbose "Request: ${ShortcutRequest}"
            Write-Verbose "Response: ${ShortcutResponse}"
            Write-Error "Error removing OneDrive Shortcut '$($ShortcutName)' for ${User}. Resource type is not remoteItem."
        return
        }
    }

    end {

    }
}