Del via


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

  1. Gå til Microsoft Entra-administrationscenter>Applications>Appregistreringer.

  2. På siden Appregistreringer skal du vælge Nye registreringer.

  3. 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.

Skærmbillede, der viser felterne for klient- og felt-id'et fremhævet.

Føj Graph API-tilladelse til appen

Tilføj tilladelsen Sites.Read.All på siden med anmodnings-API-tilladelser for det nye program.

Skærmbillede, der viser tilladelsen Sites.Read.All valgt.

Giv derefter administratorsamtykke.

Skærmbillede, der viser indstillingen giv administratorsamtykke valgt.

Opret en klienthemmelighed

Opret en ny klienthemmelighed i afsnittet Certifikater & hemmeligheder i det nye program. Gem derefter hemmelighedens værdi et sikkert sted.

Skærmbillede, der viser trinnene til oprettelse af en ny klienthemmelighed.

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.

Skærmbillede, der viser PowerShell-kommandoen for klienthemmelighed.

Når scriptet er udført, oprettes der nye versioner af rapporterne med URL-adresser til webstedet tilføjet.

Skærmbillede, der viser listen over URL-adresser til websteder, der er inkluderet i forbrugsrapporten.

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