Private/Confirm-CheckIDPasswordAgentRequest.ps1

function Confirm-CheckIDPasswordAgentRequest {
    [CmdletBinding()]

    Param(
        [Parameter(Mandatory = $true)]
        [ValidateSet("Success", "Error")]
        $Status,

        [Parameter(Mandatory = $false)]
        $Message,

        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $Request
    )

    Process {
        if(!$Script:Hostname) {
            Write-Error -Message "Hostname is not set. Please run Connect-CheckIDPasswordAgent first."
            return
        }

        Write-EventLog -LogName "Application" -Source "CheckIDPasswordAgent" -EventId 1105 -EntryType Information -Message "Confirming request for user $($Request.userPrincipalName) with ID $($Request.id) - status: $Status" -ErrorAction Continue
        Write-Verbose "Confirming request for user $($Request.userPrincipalName) with ID $($Request.id) - status: $Status"

        $Body = @{
            "clientConnectionId" = $Request.clientConnectionId
            "userPrincipalName"  = $Request.userPrincipalName
            "status"             = $Status
            "message"            = $Message ?? ($Status -eq "Success" ? "Password updated successfully" : "Error resetting password")
        }

        try {
            Invoke-RestMethod -Uri "https://$($Script:Hostname)/checkid/beta/password-request/id/$($Request.id)" -Method Patch -Headers (Get-EntraIDAccessTokenHeader) -Body ($Body | ConvertTo-Json) -ContentType "application/json"
        } catch {
            Write-EventLog -LogName "Application" -Source "CheckIDPasswordAgent" -EventId 1205 -EntryType Error -Message "Failed to confirm request for ID $($Request.id): $_" -ErrorAction Continue
            Write-Error -Message "Failed to confirm request: $_"
        }
    }
}