Back to script library
Entra / Microsoft 365 · Compliance & audit

Query Copilot (Graph)

Demonstrate querying the Copilot retrieval Microsoft Graph API.

Connect & set up

Run these once per session. All scopes are read-only unless the script makes changes.

Connect-MgGraph -NoWelcome -Scopes Files.Read.All, Sites.Read.All

Run it

The main script. Copy it, or download the .ps1 and run it from your console.

param(
[int] $LookbackDays = 30
)
Connect-MgGraph -NoWelcome -Scopes Files.Read.All, Sites.Read.All
$Uri = 'https://graph.microsoft.com/v1.0/copilot/retrieval'
$Query = Read-Host "Enter your query for Copilot retrieval"
Write-Host ("OK. I'll ask Copilot to retrieve information about {0}:" -f $Query) -ForegroundColor Green
$CurrentDate = Get-Date -format 'yyyy-MM-dd'
$LookBackDate = Read-Host "How far back should I look for information? (Enter a date in the format YYYY-MM-DD, or leave blank for 30 days)"
If ( ([String]::IsNullOrEmpty($LookBackDate))) {
$LookBackDate = (Get-Date).AddDays(-$LookbackDays).ToString('yyyy-MM-dd')
} Else {
$ParsedDate = Get-Date $LookBackDate -ErrorAction SilentlyContinue
If (([String]::IsNullOrEmpty($ParsedDate))) {
Write-Host "Invalid date format. Please enter a date in the format YYYY-MM-DD." -ForegroundColor Red
break
} ElseIf ($ParsedDate -gt (Get-Date)) {
Write-Host "The date cannot be in the future. Please enter a valid date." -ForegroundColor Red
break
} Else {
$LookBackDate = $ParsedDate.ToString('yyyy-MM-dd')
}
}
$BodyRequest = @{}
$BodyRequest.Add("datasource", "sharepoint")
$BodyRequest.Add("queryString", $Query)
$BodyRequest.Add("maximumNumberOfResults", "5")
# Add the date limiter
$BodyRequest.add("filterexpression",'LastModifiedTime>=' + $LookBackDate + ' AND LastModifiedTime<=' + $CurrentDate)
# Add the SharePoint metadata to return for each hit
$Metadata = "title", "author", "size", "Created", "LastModifiedTime"
$BodyRequest.add("resourceMetadata", $metadata)
Write-Host "Sending request to Copilot retrieval API..." -ForegroundColor Green
[array]$Data = Invoke-MgGraphRequest -Uri $Uri -Method Post -Body $BodyRequest -OutputType PsObject
If ($Data.RetrievalHits.Count -gt 0) {
Write-Host ("Copilot retrieval found {0} hits for your query." -f $Data.RetrievalHits.Count) -ForegroundColor Green
} Else {
Write-Host "No results found for your query." -ForegroundColor Yellow
break
}
Write-Host ""
Write-Host ("Copilot retrieval results for the query: {0}" -f $Query) -ForegroundColor Green
Write-Host "----------------------------------------------------------------------------"
ForEach ($Hit in $Data.RetrievalHits) {
Write-Host ("Title: {0}" -f $Hit.ResourceMetadata.title) -ForegroundColor Cyan
Write-Host ("Author: {0}" -f $Hit.ResourceMetadata.author) -ForegroundColor Cyan
Write-Host ("Size: {0} bytes" -f $Hit.ResourceMetadata.size) -ForegroundColor Cyan
Write-Host ("Created: {0}" -f $Hit.ResourceMetadata.Created) -ForegroundColor Cyan
Write-Host ("Last Modified: {0}" -f $Hit.ResourceMetadata.LastModifiedTime) -ForegroundColor Cyan
If ($Hit.webUrl) {
Write-Host ("Web URL: {0}" -f $Hit.webUrl) -ForegroundColor Blue
} Else {
Write-Host ("Resource extract: {0}" -f $Hit.extracts.text.substring(0,120)) -ForegroundColor Blue
}
If ($Hit.SensitivityLabel.DisplayName) {
Write-Host ("Sensitivity Label: {0}" -f $Hit.SensitivityLabel.DisplayName) -ForegroundColor Magenta
}
Write-Host ("Relevance: {0}" -f $Hit.extracts.relevanceScore)
Write-Host ""
}

Parameters

ParameterDefaultNotes
-LookbackDays30Optional lookback window when querying Copilot retrieval data.
Attribution