Použití PowerShellu k překladu adres URL webů v sestavách

Tento článek popisuje, jak pomocí PowerShellu zobrazit adresy URL webu v sestavách.

Jak to funguje…

Graph API poskytuje rozhraní API, které umožňuje vypsat všechny weby v organizaci. Abyste mohli toto rozhraní API používat, musíte mít aplikaci s oprávněním Sites.Read.All.

Skript vyvolá tento koncový bod rozhraní API, aby získal mapování mezi ID webů a adresami URL webu, a pak přidá adresy URL webu do exportovaných sestav CSV.

Proč nepoužívat delegovaná oprávnění?

  • Rozhraní API /sites/getAllSites přijímá pouze oprávnění aplikace.

  • Rozhraní API /sites?search=* přijímá delegovaná oprávnění, ale nevrací všechny weby, a to ani pomocí účtu správce.

Kroky

Pokud chcete zobrazit adresy URL webu pomocí PowerShellu, postupujte takto.

Vytvoření aplikace Entra ID

  1. Přejděte na Centrum pro správu Microsoft Entra>Aplikace>Registrace aplikací.

  2. Na stránce Registrace aplikací vyberte Nové registrace.

  3. Vyberte název této aplikace a pomocí výchozí konfigurace aplikaci zaregistrujte.

Nezapomeňte, že ID klienta a ID tenanta se zobrazí v části Základy aplikace.

Snímek obrazovky zobrazující pole pro klienta a zvýrazněné ID pole

Přidání oprávnění Graph API do aplikace

Na stránce Oprávnění rozhraní API pro žádosti nové aplikace přidejte oprávnění Sites.Read.All.

Snímek obrazovky s vybraným oprávněním Sites.Read.All

Pak udělte souhlas správce.

Snímek obrazovky s vybraným nastavením udělení souhlasu správce

Vytvoření tajného klíče klienta

V části Certifikáty & tajných kódů nové aplikace vytvořte nový tajný klíč klienta. Pak uložte hodnotu tajného kódu na bezpečném a bezpečném místě.

Snímek obrazovky znázorňující postup vytvoření nového tajného klíče klienta

Stažení sestav v Centrum pro správu Microsoftu 365

Stáhněte si sestavu podrobností webu na těchto dvou stránkách sestavy a vložte soubory sestav CSV do místní složky.

Před stažením sestav nezapomeňte vypnout nastavení ochrany osobních údajů pro podrobnosti o uživateli. Podrobnosti najdete v Centrum pro správu Microsoftu 365 sestavách aktivit.

Pokud chcete použít sharepointový web, přejděte na stránku využití sharepointového webu v Centrum pro správu Microsoftu 365.

Pokud chcete použít web OneDrive, přejděte na stránku využití webu OneDrive v Centrum pro správu Microsoftu 365.

Aktualizace sestav pomocí adres URL webu

Pokud chcete sestavy aktualizovat pomocí adres URL webu, spusťte skript PowerShellu.

.\Update-Report.ps1 -**tenantId** {tenant id above} -**clientId** {client id above} -**reportPaths** @("file path for report \#1", "file path for report \#2")

Pokud chcete zobrazit úplný Update-Report powershellový skript, přečtěte si téma Update-Report PowerShellu.

Skript vás vyzve k zadání hodnoty tajného kódu vytvořeného výše.

Snímek obrazovky znázorňující příkaz PowerShellu pro tajný kód klienta

Po spuštění skriptu se vytvoří nové verze sestav s přidanými adresami URL webu.

Snímek obrazovky se seznamem adres URL webu zahrnutých v sestavě využití

Vyčištění prostředí

Pokud chcete prostředí vyčistit, vraťte se na stránku Certifikáty & tajných kódů aplikace a odstraňte dříve vytvořený tajný kód.

Tip

Ke zlepšení výkonu vstupně-výstupních operací použijte disk SSD (Solid State Drive). Spusťte skript na počítači s dostatkem volné/nevyužité paměti. Mezipaměť zabírá přibližně 2 GB pro 15 milionů webů.

Update-Report skript PowerShellu

Následuje skript PowerShellu pro 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
}

Příprava mezipaměti a tajného klíče klienta

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

Načtení informací o webu z 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)"
}

Aktualizace sestavy pomocí informací o webu v mezipaměti

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
}

Dokončit

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

Další možnost pro scénáře v malém měřítku

V menších scénářích můžou správci s odpovídajícím přístupem načíst informace o ID webů odkazovaných v ovlivněných sestavách pomocí rozhraní REST API služby SharePoint nebo Microsoft Graph API. Pomocí rozhraní REST API služby SharePoint je možné načíst informace o konkrétním ID webu.

Například následující požadavek rozhraní REST API služby SharePoint načte informace o webu Contoso s ID webu 15d43f38-ce4e-4f6b-bac6-766ece1fbcb4:

https://contoso.sharepoint.com/_api/v2.1/sites/contoso.sharepoint.com,15d43f38-ce4e-4f6b-bac6-766ece1fbcb4

Microsoft Graph API lze použít k výpisu sharepointových webů nebo k načtení informací o konkrétním ID webu. Podrobnosti najdete v tématu Typ prostředku webu.

Příklady:

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

Microsoft Graph API lze také použít k načtení informací o webu OneDrive pro firmy daného uživatele. Podrobnosti najdete v tématu Typ prostředku jednotky.

Například:

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