Dela via


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

  1. Gå till Microsoft Entra administrationscenter>Program>Appregistreringar.

  2. På sidan Appregistreringar väljer du Nya registreringar.

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

Skärmbild som visar fälten för klient- och fält-ID markerade.

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.

Skärmbild som visar behörigheten Sites.Read.All markerad.

Bevilja sedan administratörsmedgivande.

Skärmbild som visar inställningen bevilja administratörsmedgivande valt.

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.

Skärmbild som visar stegen för att skapa en ny klienthemlighet.

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.

Skärmbild som visar PowerShell-kommandot för klienthemlighet.

När skriptet har körts skapas nya versioner av rapporterna med webbplats-URL:er tillagda.

Skärmbild som visar listan över webbplats-URL:er som ingår i användningsrapporten.

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