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 SilentlyContinueIf (([String]::IsNullOrEmpty($ParsedDate))) {Write-Host "Invalid date format. Please enter a date in the format YYYY-MM-DD." -ForegroundColor Redbreak} ElseIf ($ParsedDate -gt (Get-Date)) {Write-Host "The date cannot be in the future. Please enter a valid date." -ForegroundColor Redbreak} 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 PsObjectIf ($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 Yellowbreak}Write-Host ""Write-Host ("Copilot retrieval results for the query: {0}" -f $Query) -ForegroundColor GreenWrite-Host "----------------------------------------------------------------------------"ForEach ($Hit in $Data.RetrievalHits) {Write-Host ("Title: {0}" -f $Hit.ResourceMetadata.title) -ForegroundColor CyanWrite-Host ("Author: {0}" -f $Hit.ResourceMetadata.author) -ForegroundColor CyanWrite-Host ("Size: {0} bytes" -f $Hit.ResourceMetadata.size) -ForegroundColor CyanWrite-Host ("Created: {0}" -f $Hit.ResourceMetadata.Created) -ForegroundColor CyanWrite-Host ("Last Modified: {0}" -f $Hit.ResourceMetadata.LastModifiedTime) -ForegroundColor CyanIf ($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
Author
Office365itpros