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
Přejděte na Centrum pro správu Microsoft Entra>Aplikace>Registrace aplikací.
Na stránce Registrace aplikací vyberte Nové registrace.
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.
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.
Pak udělte souhlas 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ě.
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.
Po spuštění skriptu se vytvoří nové verze sestav s přidanými adresami URL webu.
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
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro