private/Resolve-odscexShortcutTarget.ps1

function Resolve-odscexShortcutTarget {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string] $Uri,

        [Parameter(Mandatory = $false)]
        [string] $DocumentLibrary,

        [Parameter(Mandatory = $false)]
        [string] $DocumentLibraryId,

        [Parameter(Mandatory = $false)]
        [string] $FolderPath,

        [Parameter(Mandatory = $false)]
        [switch] $AllowAmbiguousLibraryMatch
    )

    $SiteUri = [uri]$Uri
    $SiteDomain = $SiteUri.Authority
    $SiteResource = $SiteUri.AbsolutePath.TrimEnd('/')

    $SiteResponse = Invoke-odscexApiRequest -Resource "sites/${SiteDomain}:${SiteResource}" -Method ([Microsoft.PowerShell.Commands.WebRequestMethod]::Get)
    if (!($SiteResponse)) {
        Write-Error "Error retrieving SharePoint site '$Uri'." -ErrorAction Stop
    }

    $SiteIdRaw = $SiteResponse.id
    $SiteIdSplit = $SiteIdRaw.Split(',')
    $SiteId = $SiteIdSplit[1]
    $WebId = $SiteIdSplit[2]

    if ($DocumentLibraryId) {
        $DocumentLibraryResponse = Invoke-odscexApiRequest -Resource "sites/${SiteIdRaw}/lists/${DocumentLibraryId}" -Method ([Microsoft.PowerShell.Commands.WebRequestMethod]::Get)
    } else {
        $EscapedLibrary = $DocumentLibrary.Replace("'", "''")
        $LibraryMatches = Invoke-odscexApiRequest -Resource "sites/${SiteIdRaw}/lists?`$filter=displayName eq '${EscapedLibrary}'" -Method ([Microsoft.PowerShell.Commands.WebRequestMethod]::Get) -AllPages

        if ((!$LibraryMatches) -or ($LibraryMatches.Count -eq 0)) {
            $LibraryMatches = Invoke-odscexApiRequest -Resource "sites/${SiteIdRaw}/lists?`$filter=startsWith(displayName,'${EscapedLibrary}')" -Method ([Microsoft.PowerShell.Commands.WebRequestMethod]::Get) -AllPages
        }

        if ((!$LibraryMatches) -or ($LibraryMatches.Count -eq 0)) {
            Write-Error "Error retrieving SharePoint document library '$DocumentLibrary'." -ErrorAction Stop
        }

        if (($LibraryMatches.Count -gt 1) -and (-not $AllowAmbiguousLibraryMatch)) {
            $Names = ($LibraryMatches | ForEach-Object { $_.displayName }) -join ', '
            Write-Error "Document library name '$DocumentLibrary' matched multiple libraries: $Names. Specify -DocumentLibraryId or -AllowAmbiguousLibraryMatch." -ErrorAction Stop
        }

        $DocumentLibraryResponse = $LibraryMatches[0]
    }

    $ResolvedLibraryId = $DocumentLibraryResponse.id
    $ResolvedLibraryName = if ($DocumentLibraryResponse.name) { $DocumentLibraryResponse.name } else { $DocumentLibraryResponse.displayName }
    $ResolvedShortcutName = if ($DocumentLibrary) { $DocumentLibrary } else { $DocumentLibraryResponse.displayName }
    $ItemUniqueId = 'root'
    $ItemUniqueName = $null

    if ($FolderPath) {
        $ListDrive = Invoke-odscexApiRequest -Resource "sites/${SiteIdRaw}/lists/${ResolvedLibraryId}/drive" -Method ([Microsoft.PowerShell.Commands.WebRequestMethod]::Get)
        $EncodedFolderPath = ConvertTo-odscexGraphDrivePath -Path $FolderPath
        $DriveItem = Invoke-odscexApiRequest -Resource "drives/$($ListDrive.id)/root:/${EncodedFolderPath}" -Method ([Microsoft.PowerShell.Commands.WebRequestMethod]::Get) -DoNotUsePrefer

        if (!($DriveItem)) {
            Write-Error "Error retrieving document library folder '$FolderPath'." -ErrorAction Stop
        }

        $ItemUniqueId = $DriveItem.sharepointIds.listItemUniqueId
        $ItemUniqueName = $DriveItem.name
        $ResolvedShortcutName = $ItemUniqueName
    }

    [pscustomobject]@{
        SiteIdRaw = $SiteIdRaw
        SiteId = $SiteId
        WebId = $WebId
        SiteUrl = $Uri
        DocumentLibraryId = $ResolvedLibraryId
        DocumentLibraryName = $ResolvedLibraryName
        DefaultShortcutName = $ResolvedShortcutName
        ItemUniqueId = $ItemUniqueId
        ItemUniqueName = $ItemUniqueName
    }
}