Brug PowerShell til at løse url-adresser til websteder i rapporter
I denne artikel beskrives det, hvordan du bruger PowerShell til at få vist URL-adresser til websteder i rapporter.
Sådan fungerer det
Graph-API'en indeholder en API, der giver dig mulighed for at få vist alle webstederne i en organisation. Hvis du vil bruge denne API, skal du have et program med tilladelsen Sites.Read.All.
Scriptet aktiverer dette API-slutpunkt for at hente tilknytningen mellem websteds-id'er og URL-adresser for webstedet og tilføjer derefter URL-adresserne for webstedet i de eksporterede CSV-rapporter.
Hvorfor ikke bruge delegerede tilladelser?
API'en /sites/getAllSites accepterer kun programtilladelser.
API'en /sites?search=* accepterer delegerede tilladelser, men den returnerer ikke alle webstederne, heller ikke ved hjælp af en administratorkonto.
Trin
Hvis du vil have vist URL-adresser til websteder ved hjælp af PowerShell, skal du følge disse trin.
Opret et entra-id-program
Gå til Microsoft Entra-administrationscenter>Applications>Appregistreringer.
På siden Appregistreringer skal du vælge Nye registreringer.
Vælg et navn til dette program, og brug standardkonfigurationen til at registrere appen.
Husk, at klient-id'et og lejer-id'et vises i sektionen Essentials for appen.
Føj Graph API-tilladelse til appen
Tilføj tilladelsen Sites.Read.All på siden med anmodnings-API-tilladelser for det nye program.
Giv derefter administratorsamtykke.
Opret en klienthemmelighed
Opret en ny klienthemmelighed i afsnittet Certifikater & hemmeligheder i det nye program. Gem derefter hemmelighedens værdi et sikkert sted.
Download rapporterne i Microsoft 365 Administration
Download rapporten med webstedsoplysninger på de to rapportsider, og placer CSV-rapportfilerne i en lokal mappe.
Før du downloader rapporterne, skal du sørge for at deaktivere indstillingen for beskyttelse af personlige oplysninger for brugeroplysninger. Du kan finde flere oplysninger i Microsoft 365 Administration aktivitetsrapporter.
Hvis du vil bruge SharePoint-webstedet, skal du gå til siden sharePoint-webstedsanvendelse i Microsoft 365 Administration.
Hvis du vil bruge OneDrive-webstedet, skal du gå til siden med brug af OneDrive-webstedet i Microsoft 365 Administration.
Opdater rapporterne med URL-adresser til websteder
Hvis du vil opdatere rapporterne med URL-adresser til websteder, skal du køre PowerShell-scriptet.
.\Update-Report.ps1 -**tenantId** {tenant id above} -**clientId** {client id above} -**reportPaths** @("file path for report \#1", "file path for report \#2")
Hvis du vil se hele Update-Report PowerShell-script, skal du se Opdater-Rapport PowerShell.
Scriptet beder dig om at angive hemmelighedens værdi , der er oprettet ovenfor.
Når scriptet er udført, oprettes der nye versioner af rapporterne med URL-adresser til webstedet tilføjet.
Ryd op i miljøet
Hvis du vil rydde op i miljøet, skal du gå tilbage til programmets side Certifikater & hemmeligheder og slette den hemmelighed, der blev oprettet tidligere.
Tip
Brug SSD (Solid State Drive) til at forbedre IO-ydeevnen. Udfør scriptet på en computer med tilstrækkelig ledig/ubrugt hukommelse. Cachen tager omkring 2 GB for de 15 millioner websteder.
Update-Report PowerShell-script
Følgende er PowerShell-scriptet til 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
}
Forbered cachen og klienthemmeligheden
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
Hent webstedsoplysninger fra 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)"
}
Opdater rapporten ved hjælp af cachelagrede webstedsoplysninger
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
}
Færdiggøre
Write-Host
Read-Host "Press any key to exit..."
Yderligere mulighed for scenarier i lille målestok
I mindre scenarier kan administratorer med passende adgang bruge SharePoint REST API eller Microsoft Graph API til at hente oplysninger om websteds-id'er, der refereres til i berørte rapporter. SharePoint REST API'en kan bruges til at hente oplysninger om et bestemt websteds-id.
Følgende SharePoint REST API-anmodning henter f.eks. oplysninger om Contoso-webstedet med websteds-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 bruges til at vise SharePoint-websteder eller hente oplysninger om et bestemt websteds-id. Du kan finde flere oplysninger under Ressourcetype for websted.
Det kan f.eks. være:
https://graph.microsoft.com/v1.0/sites?search=*&$select=sharepointIds
https://graph.microsoft.com/v1.0/sites/{siteId}
Microsoft Graph API kan også bruges til at hente oplysninger om en given brugers OneDrive for Business websted. Du kan finde flere oplysninger under Drevressourcetype.
Eksempel:
https://graph.microsoft.com/v1.0/users/{userId}/drives?$select=sharepointIds
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: I hele 2024 udfaser vi GitHub-problemer som feedbackmekanisme for indhold og erstatter det med et nyt feedbacksystem. Du kan få flere oplysninger under:Indsend og få vist feedback om