Condividi tramite


Esercitazione: Generare e analizzare il report sull'utilizzo della versione per il sito di SharePoint

Grazie alla comprensione dell'archiviazione delle versioni in un sito, è possibile ottimizzare meglio le impostazioni della cronologia delle versioni per soddisfare gli obiettivi di ripristino dell'organizzazione e gestire i costi di archiviazione.

Questa esercitazione illustra come generare un report sull'utilizzo dell'archiviazione delle versioni e analizzarlo per comprendere meglio il footprint di archiviazione delle versioni del sito. Il report può essere usato anche per eseguire l'analisi "simulazione" dell'applicazione di limiti di versione diversi o la limitazione delle versioni esistenti.

In questa esercitazione viene illustrato come:

  • Generare il file di report sull'utilizzo dell'archiviazione delle versioni per il sito o la raccolta.
  • Controllare lo stato di avanzamento della generazione del report.
  • Informazioni sul file di report.
  • Analizzare l'uso dell'archiviazione delle versioni usando Excel o PowerShell.

Nelle esercitazioni successive esaminare come eseguire l'analisi dell'impatto sul report CSV generato.

Prima di iniziare

  1. Identificare il sito di SharePoint, l'account di OneDrive o la raccolta documenti di cui si vuole comprendere l'utilizzo dell'archiviazione delle versioni.
  2. Scegliere una posizione all'interno della raccolta documenti di SharePoint in cui salvare il report.
  3. Scaricare l'ultima versione di SharePoint Online Management Shell.

Nota

  1. Il file di report viene generato all'interno del percorso del report specificato.
  2. Il percorso del report deve trovarsi all'interno di una raccolta documenti di SharePoint.
  3. Nella raccolta documenti non può essere presente un file con lo stesso nome del report.

Generare un report sull'utilizzo della versione per siti o raccolte

È possibile generare un report sull'uso dell'archiviazione della versione corrente in un sito eseguendo il New-SPOSiteFileVersionExpirationReportJob comando o in una libreria eseguendo il New-SPOListFileVersionBatchDeleteJob comando .

Nell'esempio seguente viene accodato un processo per generare un report con ambito sito nel percorso del report, https://contoso.sharepoint.com/sites/sites1/reports/MyReports/VersionReport.csv.

New-SPOSiteFileVersionExpirationReportJob -Identity https://contoso.sharepoint.com/sites/site1 -ReportUrl "https://contoso.sharepoint.com/sites/sites1/reports/MyReports/VersionReport.csv"  

Nell'esempio seguente viene accodato un processo per generare un report con ambito libreria nel percorso del report, https://contoso.sharepoint.com/sites/sites1/reports/MyReports/VersionReport.csv.

New-SPOListFileVersionExpirationReportJob -Site https://contoso.sharepoint.com/sites/site1 -List "Documents" -ReportUrl "https://contoso.sharepoint.com/sites/sites1/reports/MyReports/VersionReport.csv"

Controllare lo stato di avanzamento della generazione del report

Usare il Get-SPOListFileVersionExpirationReportJobProgress comando per tenere traccia dello stato di avanzamento della richiesta di generazione del report.

L'esempio seguente illustra come verificare se il report con ambito del sito è completamente popolato e pronto per essere analizzato. 

Get-SPOSiteFileVersionExpirationReportJobProgress -Identity https://contoso.sharepoint.com/sites/site1 -ReportUrl "https://contoso.sharepoint.com/sites/sites1/reports/MyReports/VersionReport.csv"

L'esempio seguente illustra come verificare se il report con ambito libreria è completamente popolato e pronto per l'analisi.  

Get-SPOListFileVersionExpirationReportJobProgress -Site https://contoso.sharepoint.com/sites/site1 -List "Documents" -ReportUrl "https://contoso.sharepoint.com/sites/sites1/reports/MyReports/VersionReport.csv"    

Il cmdlet restituirà una risposta in formato JSON. La risposta json restituita ha una chiave denominata status. Fare riferimento alla tabella seguente per uno dei valori previsti seguenti:

Risposta di stato JSON Spiegazione
"completato" Il processo è stato completato correttamente e il report è completamente popolato.
"in_progress" È presente un processo attivo. Il report è parzialmente popolato.
"no_report_found" Non sono presenti processi attivi che popolano il file specificato.
"non riuscito" Il processo per generare il report non è riuscito a causa del messaggio di errore. Controllare "error_message" per il messaggio di errore generato dall'errore.

Informazioni sul file di report sulla versione

Il report generato è in formato CSV e ogni riga corrisponde a una versione di file. Di seguito è riportato un esempio di report di scadenza della versione del file e della relativa suddivisione delle colonne.

Screenshot del report di scadenza.

La prima riga è l'intestazione con gli identificatori di colonna contenenti identificatori di versione file, informazioni sui metadati della versione e timestamp di scadenza. Le colonne compatte sono indicate con .Compact post-correzione che non ripete i valori se due righe consecutive hanno lo stesso valore. Le altre righe rappresentano le versioni dei file, in cui ogni riga rappresenta una singola versione.
Verrà ora illustrata la prima versione del file visualizzata in questo report.

  • Identificatori di versione del file: WebId, DocId, MajorVersione MinorVersion identificano in modo univoco ogni versione nel sito di SharePoint.

  • Identificatori di metadati della versione:WebUrl indica la versione in e FileUrl indica che il file per questa versione si trova in https://contoso.sharepoint.comDocLib/MyDocument.docx. In altre parole, si trova in una raccolta documenti denominata DocLib, mentre il file si trova nella cartella radice di DocLib e è denominato MyDocument.docx.

  • Size indica che la versione accetta 92.246 byte di spazio di archiviazione.

  • Le due colonne ModifiedBy_UserId successive e ModifiedBy_DisplayName indicano che l'utente Michelle Harris (con ID utente 6) ha creato questa versione.

  • LastModifiedDate indica che il contenuto della versione è stato modificato per l'ultima volta il 13 marzo 2023 alle 22:36:09 UTC. SnapshotDate mostra che la versione è diventata una versione cronologica il 20 marzo 2023, alle 16:56:51 UTC. IsSnapshotDateEstimated indica che SnapshotDate è la data effettiva dello snapshot.

  • Identificatori della pianificazione della scadenza:CurrentExpirationDate indica che questa versione è attualmente impostata per non scadere mai. AutomaticPolicyExpirationDate indica che, in base ai criteri di scadenza automatica, anche questa versione è impostata per non scadere mai. TargetExpirationDate indica che se si segue questa pianificazione per il taglio, questa versione verrà impostata in modo che non scada mai.

Nota

Anche le versioni dei file archiviate nella raccolta di archiviazione verranno incluse in questo report.

Esaminiamo la terza versione.

I WebId valori e DocId sono vuoti perché queste colonne sono colonne compatte, indicate da . Compatta post-correzione, significa che devono avere valori. Se si cerca l'ultimo non campionamento sopra tale riga, si trovano WebId come 4c7a58c1-01f2-4fa3-a730-44081a44f689, e DocId come 18c3e09c-b5be-48e7-a754-7a2ce53e0999.

È anche possibile notare che è impostato per il TargetExpirationDate 19 aprile 2023 alle 18:08:53 UTC. Significa che se si taglia in base a questa pianificazione, la data di scadenza per questa versione verrà impostata su tale ora.

Nota

Tutte le ore di data sono rappresentate nel formato round trip. Per altre informazioni, vedere Standard stringhe di formato di data e ora - .NET | Microsoft Learn

Analizzare l'archiviazione delle versioni per i siti

Prima di avviare l'analisi, è necessario aggiornare la TargetExpirationDate colonna nel file di report alle date desiderate, ad esempio la scadenza delle versioni. Anche in questo caso, se si sceglie una data precedente per una versione, tale versione verrà considerata come "versione già scaduta" e verrà eliminata subito dopo l'avvio del trim.

È possibile aggiornare manualmente le date in TargetExpirationDate modificando il file CSV. Tuttavia, è possibile che siano presenti troppe righe da aggiornare manualmente. Per aggiornare in blocco la colonna, è possibile usare formule di Excel oppure uno degli script di PowerShell forniti in Esercitazione: Eseguire l'analisi di simulazione. In particolare, è possibile scegliere una modalità di taglio, eseguire lo script corrispondente per ottenere un file CSV aggiornato con TargetExpirationDate compilato in base a tale modalità di taglio e continuare da qui.

Opzione 1: Analizzare il report usando Excel

Aprire la cartella di lavoro di Excel condivisa AnalyzeReportFile_Template.xlsx. È possibile trovare i fogli di lavoro seguenti.

  • Configurazione: utilizzare questo foglio di lavoro per impostare l'intervallo di date per la generazione delle diverse visualizzazioni del report.
  • Set di dati: questo foglio di lavoro è il set di dati non elaborato importato dal file di report. Da questo set di dati vengono costruite diverse visualizzazioni di riepilogo dei report.
  • Report predefiniti: ecco un elenco di visualizzazioni predefinite che possono essere usate per comprendere l'impatto dell'applicazione dell'impostazione selezionata nelle versioni archiviate nel sito:
    • Riepilogo: analizzare lo stato corrente dell'archiviazione delle versioni per questo sito e la distribuzione della versione eliminata nelle nuove impostazioni.
    • Utenti interessati: esaminare gli utenti le cui versioni sarebbero interessate dalle nuove impostazioni.
    • Conteggio versioni: tabella e grafico che mostra i numeri di versioni che saranno disponibili nel tempo nella pianificazione corrente e il numero di versioni che saranno disponibili nella nuova pianificazione.
    • Analisi delle dimensioni della versione: confrontare le dimensioni delle versioni che verranno eliminate nel tempo in base alla pianificazione corrente e il numero di versioni che saranno disponibili nella nuova pianificazione.
    • Analisi a livello di file: esaminare le eliminazioni della versione a livello di file nelle nuove impostazioni.

Popolare la cartella di lavoro seguendo questa procedura:

  1. Nel foglio di lavoro Configurazione immettere il percorso completo del file di report What-If nella cella B3.

    Screenshot del foglio di lavoro di configurazione.

  2. Se si desidera modificare l'intervallo di date dei grafici nel foglio di lavoro Numero di versioni disponibili o nel foglio di lavoro Dimensioni versioni scadute , modificare i valori corrispondenti in Celle B6, B7, B10 e/o B11. È facoltativo.

    Screenshot della configurazione della versione di analisi.

  3. Nella parte superiore di Excel selezionare la scheda Dati e nella barra multifunzione selezionare il pulsante Aggiorna tutto .

    Screenshot della scheda Analizza dati versione.

  4. Nel foglio di lavoro Analisi a livello di file compilare automaticamente le colonne Numero di versioni e Numero di versioni rimanenti dopo l'eliminazione .

    Screenshot del foglio di lavoro 1 dei calcoli.

    Screenshot del foglio di lavoro 2 dei calcoli.

    Consiglio

    È possibile selezionare la cella con i dati e fare doppio clic sul quadratino di riempimento per completare il riempimento automatico. Icona per il quadratino di riempimento di Excel.

  5. Nel foglio di lavoro Utenti interessati compilare automaticamente la colonna Numero di versioni da eliminare .

    Screenshot del foglio di lavoro degli utenti interessati.

Tutti i fogli di lavoro devono ora essere aggiornati. È possibile controllare le informazioni a cui si è interessati.

Opzione 2: Analizzare il report con PowerShell

  1. Salvare lo script come file denominato AnalyzeReportFile.ps1.
# save this file as AnalyzeReportFile.ps1

Param(
  [Parameter(Mandatory=$true)][string] $ReportLocalFilePath,
  [Parameter(Mandatory=$false)][int]$ShowFilesWithFewerThanNVersions=10,
  [Parameter(Mandatory=$false)][DateTime]$TimelineStartDate=[DateTime]::Now,
  [Parameter(Mandatory=$false)][int]$TimelineStepDays=10,
  [Parameter(Mandatory=$false)][int]$TimelineNumSteps=10
)
function Import-Dataset($DatasetFilePath)
{
  $Dataset = Import-CSV $DatasetFilePath
  $Columns = $Dataset `
    | Get-Member -MemberType 'NoteProperty' `
    | Select-Object -ExpandProperty Name
  $CompactColumns = $Columns | Where-Object { $_ -Match ".Compact" }
   
  $Timer = [Diagnostics.Stopwatch]::StartNew()
  for ($RowIndex = 0; $RowIndex -lt $Dataset.Count; $RowIndex++)
  {
    if ($RowIndex -gt 0)
    {
      $PrevRow = $Dataset[$RowIndex-1]
    }
    $Row = $Dataset[$RowIndex]
   
    foreach ($ColName in $Columns)
    {
      if ([string]::IsNullOrEmpty($Row.$ColName))
      {
        if (($ColName -in $CompactColumns) -and ($RowIndex -gt 0))
        {
          $Row.$ColName = $PrevRow.$ColName
        }
        else
        {
          $Row.$ColName = $null
        }
      }
    }
   
    $Row."WebId.Compact" = [Guid]$Row."WebId.Compact"
    $Row."DocId.Compact" = [Guid]$Row."DocId.Compact"
    $Row."MajorVersion" = [Int32]$Row."MajorVersion"
    $Row."MinorVersion" = [Int32]$Row."MinorVersion"
    $Row."WebUrl.Compact" = [String]$Row."WebUrl.Compact"
    $Row."FileUrl.Compact" = [String]$Row."FileUrl.Compact"
    $Row."Size" = [Int64]$Row."Size"
    $Row."ModifiedBy_UserId.Compact" = [String]$Row."ModifiedBy_UserId.Compact"
    $Row."ModifiedBy_DisplayName.Compact" = [String]$Row."ModifiedBy_DisplayName.Compact"
    $Row."LastModifiedDate" = [DateTime]$Row."LastModifiedDate"
    $Row."SnapshotDate" = [DateTime]$Row."SnapshotDate"
    $Row."IsSnapshotDateEstimated" = [bool]$Row."IsSnapshotDateEstimated"
    $Row."CurrentExpirationDate" = [System.Nullable[DateTime]]$Row."CurrentExpirationDate"
    $Row."AutomaticPolicyExpirationDate" = [System.Nullable[DateTime]]$Row."AutomaticPolicyExpirationDate"
    $Row."TargetExpirationDate" = [System.Nullable[DateTime]]$Row."TargetExpirationDate"
    $Percent = [Math]::Ceiling(100 * $RowIndex / $Dataset.Count)
    Write-Progress `
      -Activity "Reading dataset" `
      -Status "$Percent% Complete ($($RowIndex + 1) / $($Dataset.Count) rows):" `
      -PercentComplete $Percent `
      -SecondsRemaining $(($Dataset.Count - ($RowIndex + 1)) / (($RowIndex + 1) / $Timer.Elapsed.Totalseconds))
  }
  $Timer.Stop()
  return $Dataset
}
function Get-NumVersionExpiresByDate($Dataset, $ColName, $DateCutoff)
{
  $VersionsExpired = $Dataset | Where-Object { ($null -ne $_.$ColName) -and ($_.$ColName -le $DateCutoff) }
  $IsTodayStr = ""
  If ((Get-Date).Date -eq ($DateCutoff).Date) 
  {
    $IsTodayStr = "*"
  }
  return [PSCustomObject]@{
    Today              = $IsTodayStr
    Date              = $DateCutoff
    NumberOfVersionsAvailable    = $Dataset.Count - $VersionsExpired.Count
    NumberOfVersionsExpired     = $VersionsExpired.Count
    SizeOfVersionsExpiredInBytes  = ($VersionsExpired | Measure-Object Size -Sum).Sum
  }
}
function Get-FilesWithFewerThanNVersions($Dataset, $NumVersions)
{
  $AvailableVersionsByFile = $Dataset `
    | Where-Object { ($null -eq $_.TargetExpirationDate) -or ($_.TargetExpirationDate -gt [DateTime]::Now) } `
    | Group-Object -Property WebId.Compact, DocId.Compact
  $AvailableFilesWithNotEnoughVersions = @{}
  # Files with some versions left but not enough
  $AvailableVersionsByFile `
    | Where-Object Count -lt $NumVersions `
    | ForEach-Object { $AvailableFilesWithNotEnoughVersions[$_.Name] = $_.Count }
  # Files with 0 versions left
  $Dataset `
    | Group-Object -Property WebId.Compact, DocId.Compact `
    | Where-Object { $AvailableVersionsByFile.Name -notcontains $_.Name } `
    | ForEach-Object { $AvailableFilesWithNotEnoughVersions[$_.Name] = 0 }
  # Stitch all of the data together
  return $Dataset `
    | Group-Object -Property WebId.Compact, DocId.Compact `
    | Where-Object Count -ge $NumVersions `
    | Where-Object { $AvailableFilesWithNotEnoughVersions.Contains($_.Name) } `
    | ForEach-Object `
      {
        $fileUrl = $_.Group[0]."WebUrl.Compact" + "/" + $_.Group[0]."FileUrl.Compact"
        $numberOfVersionsAvailableBeforeTrim = $_.Count
        $numberOfVersionsAvailableAfterTrim = $AvailableFilesWithNotEnoughVersions[$_.Name]
        $numberOfVersionsTrimmed = $numberOfVersionsAvailableBeforeTrim - $numberOfVersionsAvailableAfterTrim
        [PSObject]::new() | 
          Add-Member -PassThru -NotePropertyMembers ([Ordered]@{
            FileUrl = $fileUrl
            NumberOfVersionsAvailableBeforeTrim = $numberOfVersionsAvailableBeforeTrim
            NumberOfVersionsAvailableAfterTrim = $numberOfVersionsAvailableAfterTrim
            NumberOfVersionsTrimmed = $numberOfVersionsTrimmed
          })
      } `
    | Sort-Object -Property NumberOfVersionsAvailableAfterTrim
}
function Get-MostImpactedUsers($Dataset)
{
  $VersionsExpired = $Dataset | Where-Object { ($null -ne $_.TargetExpirationDate) -and ($_.TargetExpirationDate -le [DateTime]::Now) }
  return $VersionsExpired `
    | Group-Object -Property ModifiedBy_UserId.Compact `
    | Select-Object `
      @{ L = "UserId"; E = { $_.Group[0]."ModifiedBy_UserId.Compact" } }, `
      @{ L = "UserDisplayName"; E = { $_.Group[0]."ModifiedBy_DisplayName.Compact" } },
      @{ L = "NumberOfVersionsTrimmed"; E = { $_.Count } } `
    | Sort-Object -Property NumberOfVersionsTrimmed -Descending
}
$Dataset = Import-Dataset -DatasetFilePath $ReportLocalFilePath
$CurrentExpirationSummaryTable = @()
$TargetExpirationSummaryTable = @()
$Timer = [Diagnostics.Stopwatch]::StartNew()
for ($Step = 0; $Step -lt $TimelineNumSteps; $Step++)
{
  $DateCutOff = $TimelineStartDate.AddDays($TimelineStepDays * $Step)
  $CurrentExpirationSummaryTable += `
    Get-NumVersionExpiresByDate -Dataset $Dataset -ColName CurrentExpirationDate -DateCutoff $DateCutOff
  $TargetExpirationSummaryTable += `
    Get-NumVersionExpiresByDate -Dataset $Dataset -ColName TargetExpirationDate -DateCutoff $DateCutOff
}
$Timer.Stop()
Write-Host "===========================" -ForegroundColor Yellow
Write-Host "Current Expiration Schedule" -ForegroundColor Yellow
Write-Host "===========================" -ForegroundColor Yellow
$CurrentExpirationSummaryTable | Format-Table -Autosize | Out-String | Write-Host
Write-Host "Total elapsed seconds: $($Timer.Elapsed.TotalSeconds / 2)" -ForegroundColor Green
Write-Host
Write-Host "==========================" -ForegroundColor Yellow
Write-Host "Target Expiration Schedule" -ForegroundColor Yellow
Write-Host "==========================" -ForegroundColor Yellow
$TargetExpirationSummaryTable | Format-Table -Autosize | Out-String | Write-Host
Write-Host "Total elapsed seconds: $($Timer.Elapsed.TotalSeconds / 2)" -ForegroundColor Green
Write-Host
Write-Host "================================" -ForegroundColor Yellow
Write-Host "Files with Fewer Than $ShowFilesWithFewerThanNVersions Versions" -ForegroundColor Yellow
Write-Host "================================" -ForegroundColor Yellow
$Timer = [Diagnostics.Stopwatch]::StartNew()
Get-FilesWithFewerThanNVersions -Dataset $Dataset -NumVersions $ShowFilesWithFewerThanNVersions | Format-Table -Autosize | Out-String | Write-Host
$Timer.Stop()
Write-Host "Total elapsed seconds: $($Timer.Elapsed.TotalSeconds)" -ForegroundColor Green
Write-Host
Write-Host "==============" -ForegroundColor Yellow
Write-Host "Users Impacted" -ForegroundColor Yellow
Write-Host "==============" -ForegroundColor Yellow
$Timer = [Diagnostics.Stopwatch]::StartNew()
Get-MostImpactedUsers -Dataset $Dataset | Format-Table -Autosize | Out-String | Write-Host
$Timer.Stop()
Write-Host "Total elapsed seconds: $($Timer.Elapsed.TotalSeconds)" -ForegroundColor Green
Write-Host
  1. Aprire PowerShell ed eseguire il comando seguente, sostituendo i valori segnaposto con i valori appropriati.

Nota

Usare PowerShell 7 per eseguire i comandi. È possibile installare PowerShell 7 seguendo queste istruzioni: Installazione di PowerShell in Windows - PowerShell | Microsoft Learn.

. “<path to AnalyzeReportFile.ps1>” –ReportLocalFilePath “<path to the file version expiration What-If report .csv file>”

Screenshot del comando analyze report powershell.

  1. L'output visualizza quattro tabelle:
  • Pianificazione della scadenza corrente: questa tabella contiene un riepilogo delle serie temporali per le versioni così come sono. Ha le colonne seguenti:

    1. Data: la prima colonna rappresenta la data.
    2. NumberOfVersionsAvailable: il numero di versioni disponibili in tale data nella pianificazione corrente.
    3. NumberOfVersionsExpired: il numero di versioni scadute in tale data in base alla pianificazione corrente.
    4. SizeOfVersionsExpiredMB: le dimensioni delle versioni sono scadute in tale data in base alla pianificazione corrente.

    Screenshot della pianificazione della scadenza corrente.

  • Pianificazione scadenza destinazione: questa tabella è uguale a Pianificazione scadenza corrente, ma riflette invece la pianificazione aggiornata. Questa tabella è utile solo se si vogliono testare scenari di scadenza diversi modificando la colonna TargetExpirationDate nel report di scadenza della versione del file.

    Screenshot della pianificazione della scadenza della destinazione.

  • File con meno di 10 versioni: un elenco degli URL e il numero di versioni precedenti e successive all'eliminazione per i file il cui numero di versioni è inferiore a 10 dopo l'eliminazione immediata (ma era più di 10 prima dell'eliminazione immediata).

    Screenshot dei file con meno di 10 versioni.

  • Utenti interessati: gli utenti le cui versioni verrebbero immediatamente eliminate.

    Screenshot degli utenti interessati.

Facoltativamente, è possibile modificare i parametri:

  • TimelineStartDate: data di inizio per le tabelle 1 e 2 precedenti.
  • TimelineStepDays: numero di giorni compresi tra le righe per la tabella 1 e 2 precedenti.
  • TimelineNumSteps: numero di righe da calcolare per le tabelle 1 e 2 precedenti.
  • ShowFilesWithFewerThanNVersions: soglia per il numero di versioni nella tabella 3 precedente.