Share via


Usare PowerShell per risolvere gli URL del sito nei report

Questo articolo illustra come usare PowerShell per visualizzare gli URL del sito nei report.

Come funziona

Il API Graph fornisce un'API che consente di elencare tutti i siti all'interno di un'organizzazione. Per usare questa API, è necessario disporre di un'applicazione con l'autorizzazione Sites.Read.All.

Lo script richiama questo endpoint API per ottenere il mapping tra ID sito e URL del sito e quindi aggiunge gli URL del sito nei report CSV esportati.

Perché non usare le autorizzazioni delegate?

  • L'API /sites/getAllSites accetta solo le autorizzazioni dell'applicazione.

  • L'API /sites?search=* accetta autorizzazioni delegate, ma non restituisce tutti i siti, nemmeno usando un account amministratore.

Procedura

Per visualizzare gli URL del sito tramite PowerShell, seguire questa procedura.

Creare un'applicazione Entra ID

  1. Passare a Interfaccia di amministrazione di Microsoft Entra>Applicazioni>Registrazioni app.

  2. Nella pagina Registrazioni app selezionare Nuove registrazioni.

  3. Selezionare un nome per l'applicazione e usare la configurazione predefinita per registrare l'app.

Tenere presente che l'ID client e l'ID tenant vengono visualizzati nella sezione Essentials dell'app.

Screenshot che mostra i campi per il client e l'ID campo evidenziati.

Aggiungere API Graph autorizzazione all'app

Nella pagina Richiedi autorizzazioni API della nuova applicazione aggiungere l'autorizzazione Sites.Read.All.

Screenshot che mostra l'autorizzazione Sites.Read.All selezionata.

Concedere quindi il consenso amministratore.

Screenshot che mostra l'impostazione concedi consenso amministratore selezionata.

Creare un segreto client

Nella sezione Certificati & segreti della nuova applicazione creare un nuovo segreto client. Archiviare quindi il valore del segreto in un luogo sicuro e sicuro.

Screenshot che mostra i passaggi per creare un nuovo segreto client.

Scaricare i report in interfaccia di amministrazione di Microsoft 365

Scaricare il report dei dettagli del sito nelle due pagine del report e inserire i file del report CSV in una cartella locale.

Prima di scaricare i report, assicurarsi di disattivare l'impostazione di privacy per i dettagli dell'utente. Per informazioni dettagliate, vedere interfaccia di amministrazione di Microsoft 365 report attività.

Per l'utilizzo del sito di SharePoint, passare alla pagina di utilizzo del sito di SharePoint nella interfaccia di amministrazione di Microsoft 365.

Per l'utilizzo del sito di OneDrive, passare alla pagina di utilizzo del sito di OneDrive nel interfaccia di amministrazione di Microsoft 365.

Aggiornare i report con GLI URL del sito

Per aggiornare i report con gli URL del sito, eseguire lo script di PowerShell.

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

Per visualizzare l'intero Update-Report script di PowerShell, vedere Update-Report PowerShell.

Lo script richiederà di immettere il valore del segreto creato in precedenza.

Screenshot che mostra il comando di PowerShell per il segreto client.

Dopo aver eseguito lo script, vengono create nuove versioni dei report con gli URL del sito aggiunti.

Screenshot che mostra l'elenco degli URL del sito inclusi nel report sull'utilizzo.

Pulire l'ambiente

Per pulire l'ambiente, tornare alla pagina Certificati & segreti dell'applicazione ed eliminare il segreto creato in precedenza.

Consiglio

Usare SSD (Solid State Drive) per migliorare le prestazioni di I/O. Eseguire lo script in un computer con memoria disponibile o inutilizzata sufficiente. La cache richiede circa 2 GB per i 15 milioni di siti.

Update-Report script di PowerShell

Di seguito è riportato lo script di PowerShell per 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
}

Preparare la cache e il segreto client

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

Recuperare informazioni sul sito da API Graph

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)"
}

Aggiornare il report usando le informazioni del sito memorizzate nella cache

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
}

Finalizzare

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

Opzione aggiuntiva per scenari su scala ridotta

Per scenari su scala ridotta, gli amministratori con accesso appropriato possono usare l'API REST di SharePoint o Microsoft API Graph per recuperare informazioni sugli ID sito a cui si fa riferimento nei report interessati. L'API REST di SharePoint può essere usata per recuperare informazioni su un ID sito specifico.

Ad esempio, la richiesta API REST di SharePoint seguente recupera informazioni sul sito Contoso con ID sito 15d43f38-ce4e-4f6b-bac6-766ece1fbcb4:

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

Microsoft API Graph può essere usato per elencare i siti di SharePoint o recuperare informazioni su un ID sito specifico. Per informazioni dettagliate, vedere Tipo di risorsa del sito.

Ad esempio:

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

È anche possibile usare microsoft API Graph per recuperare informazioni sul sito OneDrive for Business di un determinato utente. Per informazioni dettagliate, vedere Tipo di risorsa unità.

Ad esempio:

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