Aracılığıyla paylaş


Raporlarda site URL'lerini çözümlemek için PowerShell kullanma

Bu makalede, raporlarda site URL'lerini görüntülemek için PowerShell'in nasıl kullanılacağı anlatılmaktadır.

Nasıl çalışır?

Graph API, bir kuruluştaki tüm siteleri listelemenizi sağlayan bir API sağlar. Bu API'yi kullanmak için Sites.Read.All iznine sahip bir uygulamanız olmalıdır.

Betik, site kimlikleri ve site URL'leri arasındaki eşlemeyi almak için bu API uç noktasını çağırır ve ardından site URL'lerini dışarı aktarılan CSV raporlarına ekler.

Temsilci izinleri neden kullanılmıyor?

  • /sites/getAllSites API'si yalnızca uygulama izinlerini kabul eder.

  • /sites?search=* API'si temsilci izinlerini kabul eder, ancak yönetici hesabı kullanarak bile tüm siteleri döndürmez.

Adımlar

PowerShell kullanarak site URL'lerini görüntülemek için aşağıdaki adımları izleyin.

Entra Id Uygulaması Oluşturma

  1. Microsoft Entra yönetim merkezi>Uygulamalar>Uygulama kayıtları gidin.

  2. Uygulama kayıtları sayfasında Yeni kayıtlar'ı seçin.

  3. Bu uygulama için bir ad seçin ve uygulamayı kaydetmek için varsayılan yapılandırmayı kullanın.

İstemci kimliğinin ve kiracı kimliğinin uygulamanın Temel Parçalar bölümünde görüntülendiğini unutmayın.

İstemci ve alan kimliği alanlarının vurgulandığı ekran görüntüsü.

Uygulamaya Graph API izni ekleme

Yeni uygulamanın API izinleri isteme sayfasında Sites.Read.All iznini ekleyin.

Sites.Read.All izninin seçili olduğunu gösteren ekran görüntüsü.

Ardından yönetici onayı verin.

Yönetici onayı ver ayarının seçili olduğunu gösteren ekran görüntüsü.

İstemci gizli dizisi oluşturma

Yeni uygulamanın Sertifikalar & gizli diziler bölümünde yeni bir istemci gizli dizisi oluşturun. Ardından gizli dizinin değerini güvenli ve güvenli bir yerde depolayın.

Yeni bir istemci gizli dizisi oluşturma adımlarını gösteren ekran görüntüsü.

raporları Microsoft 365 yönetim merkezi'de indirme

İki rapor sayfasındaki site ayrıntıları raporunu indirin ve CSV rapor dosyalarını yerel bir klasörün altına yerleştirin.

Raporları indirmeden önce, kullanıcı ayrıntıları için gizlilik ayarını kapattığından emin olun. Ayrıntılar için bkz. Microsoft 365 yönetim merkezi etkinlik raporları.

SharePoint site kullanımı için Microsoft 365 yönetim merkezi SharePoint site kullanımı sayfasına gidin.

OneDrive site kullanımı için Microsoft 365 yönetim merkezi OneDrive site kullanımı sayfasına gidin.

Raporları site URL'leriyle güncelleştirme

Raporları site URL'leriyle güncelleştirmek için PowerShell betiğini yürütür.

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

Update-Report PowerShell betiğinin tamamını görüntülemek için bkz. Update-Report PowerShell.

Betik, yukarıda oluşturulan gizli dizi değerini girmenizi ister.

İstemci gizli dizisi için PowerShell komutunu gösteren ekran görüntüsü.

Betik yürütüldükten sonra, eklenen site URL'leriyle raporların yeni sürümleri oluşturulur.

Kullanım raporuna dahil edilen site URL'lerinin listesini gösteren ekran görüntüsü.

Ortamı temizleme

Ortamı temizlemek için uygulamanın Sertifikalar & gizli diziler sayfasına dönün ve daha önce oluşturulan gizli diziyi silin.

İpucu

GÇ performansını geliştirmek için SSD (Katı Hal Sürücüsü) kullanın. Betiği yeterli boş/kullanılmayan belleğe sahip bir makinede yürütebilirsiniz. Önbellek, 15 milyon site için yaklaşık 2 GB alır.

PowerShell betiğini Update-Report

Update-Report için PowerShell betiği aşağıdadır.

 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
}

Önbelleği ve istemci gizli dizisini hazırlama

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

Graph API site bilgilerini getirme

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

Önbelleğe alınmış site bilgilerini kullanarak raporu güncelleştirme

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
}

Sonlandır

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

Küçük ölçekli senaryolar için ek seçenek

Daha küçük ölçekli senaryolarda, uygun erişime sahip yöneticiler SharePoint REST API'sini veya Microsoft Graph API kullanarak etkilenen raporlarda başvuruda bulunan site kimlikleri hakkında bilgi alabilir. SharePoint REST API'si, belirli bir site kimliği hakkındaki bilgileri almak için kullanılabilir.

Örneğin, aşağıdaki SharePoint REST API isteği 15d43f38-ce4e-4f6b-bac6-766ece1fbcb4 site kimliğine sahip Contoso sitesi hakkında bilgi alır:

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

Microsoft Graph API, SharePoint sitelerini listelemek veya belirli bir site kimliğiyle ilgili bilgileri almak için kullanılabilir. Ayrıntılar için bkz . site kaynak türü.

Örneğin:

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

Microsoft Graph API, belirli bir kullanıcının OneDrive İş sitesi hakkındaki bilgileri almak için de kullanılabilir. Ayrıntılar için bkz. sürücü kaynak türü.

Örneğin:

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