Del via


Bruke PowerShell til å løse nettadresser for området i rapporter

Denne artikkelen handler om hvordan du bruker PowerShell til å vise nettadresser for området i rapporter.

Slik fungerer det

Graph-API-en inneholder en API som lar deg føre opp alle nettstedene i en organisasjon. Hvis du vil bruke denne API-en, må du ha et program med Sites.Read.All-tillatelsen.

Skriptet aktiverer dette API-endepunktet for å hente tilordningen mellom område-ID-er og nettadresser for området, og legger deretter til url-adressene for området i de eksporterte CSV-rapportene.

Hvorfor ikke bruke delegerte tillatelser?

  • API-en /sites/getAllSites godtar bare programtillatelser.

  • API-en /sites?search=* godtar delegerte tillatelser, men returnerer ikke alle nettstedene, selv ikke ved hjelp av en administratorkonto.

Trinn

Følg disse trinnene for å vise nettadresser for område ved hjelp av PowerShell.

Opprette et Entra ID-program

  1. Gå til Microsoft Entra administrasjonssenter>Programappregistreringer>.

  2. Velg Nye registreringer på appregistreringssiden.

  3. Velg et navn for dette programmet, og bruk standardkonfigurasjonen til å registrere appen.

Husk at klient-ID-en og leier-IDen vises i essentials-delen for appen.

Skjermbilde som viser feltene for klient- og felt-ID uthevet.

Legg til Graph API-tillatelse i appen

Legg til Sites.Read.All-tillatelsen på siden for API-tillatelser for det nye programmet.

Skjermbilde som viser Sites.Read.All-tillatelsen som er valgt.

Deretter gir du administratorsamtykke.

Skjermbilde som viser innstillingen gi administratorsamtykke valgt.

Opprette en klienthemmelighet

Opprett en ny klienthemmelighet i det nye programmets sertifikater & hemmeligheter . Deretter lagrer du hemmelighetens verdi på et trygt og sikkert sted.

Skjermbilde som viser trinnene for å opprette en ny klienthemmelighet.

Last ned rapportene i Administrasjonssenter for Microsoft 365

Last ned rapporten om områdedetaljer på de to rapportsidene, og legg CSV-rapportfilene under en lokal mappe.

Før du laster ned rapportene, må du slå av personverninnstillingen for brukerdetaljer. Hvis du vil ha mer informasjon, kan du se Administrasjonssenter for Microsoft 365 aktivitetsrapporter.

Hvis du vil ha informasjon om bruk av SharePoint-område, går du til brukssiden for SharePoint-området i Administrasjonssenter for Microsoft 365.

Hvis du vil ha informasjon om bruk av OneDrive-nettstedet, kan du gå til brukssiden for OneDrive-nettstedet i Administrasjonssenter for Microsoft 365.

Oppdatere rapportene med nettadresser for område

Kjør PowerShell-skriptet for å oppdatere rapportene med nettadresser for nettstedet.

.\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-skriptet, kan du se Oppdater rapport PowerShell.

Skriptet vil be deg om å angi hemmelighetens verdi som er opprettet ovenfor.

Skjermbilde som viser PowerShell-kommandoen for klienthemmelighet.

Når skriptet er utført, opprettes nye versjoner av rapportene med url-adresser for område lagt til.

Skjermbilde som viser listen over nettadresser for området som er inkludert i bruksrapporten.

Rydd opp i miljøet

Hvis du vil rydde opp i miljøet, går du tilbake til programmets Sertifikater & hemmeligheter-siden og sletter hemmeligheten som ble opprettet tidligere.

Tips

Bruk SSD (Solid State Drive) for å forbedre IO-ytelsen. Kjør skriptet på en maskin med nok ledig/ubrukt minne. Hurtigbufferen tar omtrent 2 GB for de 15 millioner nettstedene.

Update-Report PowerShell-skript

Følgende er PowerShell-skriptet for 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
}

Klargjøre hurtigbufferen og klienthemmeligheten

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 områdeinformasjon 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)"
}

Oppdatere rapporten ved hjelp av bufret områdeinformasjon

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
}

Fullføre

Write-Host
Read-Host "Press any key to exit..."

Tilleggsalternativ for scenarioer i liten skala

For scenarioer i mindre skala kan administratorer med riktig tilgang bruke SHAREPoint REST-API-en eller Microsoft Graph-API-en til å hente informasjon om område-ID-er som det refereres til i berørte rapporter. SharePoint REST-API-en kan brukes til å hente informasjon om en bestemt område-ID.

Følgende SharePoint REST-API-forespørsel henter for eksempel informasjon om Contoso-nettstedet med område-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-en kan brukes til å vise SharePoint-nettsteder eller hente informasjon om en bestemt område-ID. Hvis du vil ha mer informasjon, kan du se områderessurstype.

Eksempel:

  • https://graph.microsoft.com/v1.0/sites?search=*&$select=sharepointIds
  • https://graph.microsoft.com/v1.0/sites/{siteId}

Microsoft Graph-API-en kan også brukes til å hente informasjon om en gitt brukers OneDrive for Business nettsted. Hvis du vil ha mer informasjon, kan du se stasjonsressurstype.

Eksempel:

  • https://graph.microsoft.com/v1.0/users/{userId}/drives?$select=sharepointIds