Använda PowerShell för att lösa webbplats-URL:er i rapporter
Den här artikeln beskriver hur du använder PowerShell för att visa webbplats-URL:er i rapporter.
Så här fungerar det
Graph API tillhandahåller ett API som gör att du kan visa en lista över alla webbplatser i en organisation. Om du vill använda det här API:et måste du ha ett program med behörigheten Sites.Read.All.
Skriptet anropar den här API-slutpunkten för att hämta mappningen mellan plats-ID:n och webbplats-URL:er och lägger sedan till webbplats-URL:erna i de exporterade CSV-rapporterna.
Varför inte använda delegerade behörigheter?
API:et /sites/getAllSites accepterar endast programbehörigheter.
API:et /sites?search=* accepterar delegerade behörigheter, men returnerar inte alla webbplatser, inte ens med ett administratörskonto.
Steg
Följ dessa steg om du vill visa webbplats-URL:er med Hjälp av PowerShell.
Skapa ett Entra-ID-program
Gå till Microsoft Entra administrationscenter>Program>Appregistreringar.
På sidan Appregistreringar väljer du Nya registreringar.
Välj ett namn för det här programmet och använd standardkonfigurationen för att registrera appen.
Kom ihåg att klient-ID :t och klientorganisations-ID :t visas i appens Essentials-avsnitt .
Lägga till Graph API behörighet i appen
Lägg till behörigheten Sites.Read.All på sidan Förfrågnings-API-behörigheter för det nya programmet.
Bevilja sedan administratörsmedgivande.
Skapa en klienthemlighet
I det nya programmets avsnitt Certifikat & hemligheter skapar du en ny klienthemlighet. Lagra sedan hemlighetens värde på en säker plats.
Ladda ned rapporterna i Administrationscenter för Microsoft 365
Ladda ned rapporten med webbplatsinformation på de två rapportsidorna och placera CSV-rapportfilerna under en lokal mapp.
Innan du laddar ned rapporterna måste du inaktivera sekretessinställningen för användarinformation. Mer information finns i Administrationscenter för Microsoft 365 aktivitetsrapporter.
För Användning av SharePoint-webbplatser går du till sidan för SharePoint-webbplatsanvändning i Administrationscenter för Microsoft 365.
För Användning av OneDrive-webbplatser går du till sidan för OneDrive-webbplatsanvändning i Administrationscenter för Microsoft 365.
Uppdatera rapporterna med webbplats-URL:er
Om du vill uppdatera rapporterna med webbplats-URL:er kör du PowerShell-skriptet.
.\Update-Report.ps1 -**tenantId** {tenant id above} -**clientId** {client id above} -**reportPaths** @("file path for report \#1", "file path for report \#2")
Information om hur du visar det fullständiga Update-Report PowerShell-skriptet finns i Uppdatera Rapport PowerShell.
Skriptet ber dig att ange hemlighetens värde som skapades ovan.
När skriptet har körts skapas nya versioner av rapporterna med webbplats-URL:er tillagda.
Rensa miljön
Om du vill rensa miljön går du tillbaka till programmets sida Certifikat & hemligheter och tar bort hemligheten som skapades tidigare.
Tips
Använd SSD (Solid State Drive) för att förbättra I/O-prestanda. Kör skriptet på en dator med tillräckligt med ledigt/oanvänt minne. Cachen tar ungefär 2 GB för de 15 miljoner webbplatserna.
Update-Report PowerShell-skript
Följande är PowerShell-skriptet för Update-Report.
param(
[Parameter(Mandatory=$true)]
[string]$tenantId,
[Parameter(Mandatory=$true)]
[string]$clientId,
[Parameter(Mandatory=$false)]
[string[]]$reportPaths
)
function Get-AccessToken {
param(
[Parameter(Mandatory=$true)]
[string]$tenantId,
[Parameter(Mandatory=$true)]
[string]$clientId,
[Parameter(Mandatory=$true)]
[System.Security.SecureString]$clientSecret,
[Parameter(Mandatory=$false)]
[string]$scope = "https://graph.microsoft.com/.default"
)
$tokenEndpoint = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"
$tokenRequest = @{
client_id = $clientId
scope = $scope
client_secret = ConvertFrom-SecureString $clientSecret -AsPlainText
grant_type = "client_credentials"
}
$tokenResponse = Invoke-RestMethod -Uri $tokenEndpoint -Method Post -Body $tokenRequest
return $tokenResponse.access_token
}
Förbereda cachen och klienthemligheten
if ($reportPaths.Count -eq 0) {
Write-Host "Please provide at least one report path" -ForegroundColor Red
exit
}
$cache = New-Object 'System.Collections.Generic.Dictionary[[String],[String]]'
$clientSecret = Read-Host "Please enter client secret" -AsSecureString
Hämta webbplatsinformation från Graph API
Write-Host
Write-Host "Getting information for all the sites..." -ForegroundColor Cyan
$uri = "https://graph.microsoft.com/v1.0/sites/getAllSites?`$select=sharepointIds&`$top=10000"
while ($uri -ne $null) {
Write-Host $uri
$isSuccess = $false
while (-not $isSuccess) {
try {
$accessToken = Get-AccessToken -tenantId $tenantId -clientId $clientId -clientSecret $clientSecret
$restParams = @{Headers=@{Authorization="Bearer $accessToken"}}
}
catch {
Write-Host "Retrying... $($_.Exception.Message)" -ForegroundColor Yellow
continue
}
try {
$sites = Invoke-RestMethod $uri @restParams
$isSuccess = $true
}
catch {
if ($_.Exception.Response -and $_.Exception.Response.Headers['Retry-After']) {
$retryAfter = [int]$_.Exception.Response.Headers['Retry-After']
Write-Output "Waiting for $retryAfter seconds before retrying..." -ForegroundColor Yellow
Start-Sleep -Seconds $retryAfter
}
Write-Host "Retrying... $($_.Exception.Message)" -ForegroundColor Yellow
continue
}
}
$sites.value | ForEach-Object {
$cache[$_.sharepointIds.siteId] = $_.sharepointIds.siteUrl
}
$uri = $sites."@odata.nextLink"
Write-Host "Total sites received: $($cache.Count)"
}
Uppdatera rapporten med hjälp av cachelagrad webbplatsinformation
foreach ($reportPath in $reportPaths) {
Write-Host
Write-Host "Updating report $($reportPath) ..." -ForegroundColor Cyan
$outputPath = "$($reportPath)_$([Math]::Floor((Get-Date -UFormat %s))).csv"
$writer = [System.IO.StreamWriter]::new($outputPath)
$reader = [System.IO.StreamReader]::new($reportPath)
$rowCount = 0
while ($null -ne ($line = $reader.ReadLine())) {
$rowCount++
$columns = $line.Split(",")
$siteId = $columns[1]
$_guid = New-Object System.Guid
if ([System.Guid]::TryParse($siteId, [ref]$_guid)) {
$siteUrl = $cache[$siteId]
$columns[2] = $siteUrl
$line = $columns -join ","
}
$writer.WriteLine($line)
if ($rowCount%1000 -eq 0) {
Write-Host "Processed $($rowCount) rows"
}
}
$writer.Close()
$reader.Close()
Write-Host "Processed $($rowCount) rows"
Write-Host "Report updated: $($outputPath)" -ForegroundColor Cyan
}
Slutföra
Write-Host
Read-Host "Press any key to exit..."
Ytterligare alternativ för småskaliga scenarier
För scenarier i mindre skala kan administratörer med lämplig åtkomst använda SharePoint REST API eller Microsoft Graph API för att hämta information om webbplats-ID:n som refereras i berörda rapporter. SharePoint REST API kan användas för att hämta information om ett specifikt webbplats-ID.
Följande SharePoint REST API-begäran hämtar till exempel information om Contoso-webbplatsen med webbplats-ID 15d43f38-ce4e-4f6b-bac6-766ece1fbcb4:
https://contoso.sharepoint.com/_api/v2.1/sites/contoso.sharepoint.com,15d43f38-ce4e-4f6b-bac6-766ece1fbcb4
Microsoft-Graph API kan användas för att lista SharePoint-webbplatser eller hämta information om ett specifikt webbplats-ID. Mer information finns i webbplatsresurstypen.
Till exempel:
https://graph.microsoft.com/v1.0/sites?search=*&$select=sharepointIds
https://graph.microsoft.com/v1.0/sites/{siteId}
Microsoft-Graph API kan också användas för att hämta information om en viss användares OneDrive för företag webbplats. Mer information finns i enhetsresurstypen.
Till exempel:
https://graph.microsoft.com/v1.0/users/{userId}/drives?$select=sharepointIds
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för