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
Microsoft Entra yönetim merkezi>Uygulamalar>Uygulama kayıtları gidin.
Uygulama kayıtları sayfasında Yeni kayıtlar'ı seçin.
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.
Uygulamaya Graph API izni ekleme
Yeni uygulamanın API izinleri isteme sayfasında Sites.Read.All iznini ekleyin.
Ardından yönetici onayı verin.
İ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.
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.
Betik yürütüldükten sonra, eklenen site URL'leriyle raporların yeni sürümleri oluşturulur.
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