Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Ao compreender o armazenamento de versões num site, pode otimizar melhor as definições do Histórico de versões para cumprir os objetivos de recuperação da sua organização e gerir os custos de armazenamento.
Este tutorial mostra como pode gerar um relatório de utilização do armazenamento de versões e analisá-lo para compreender melhor a quantidade de armazenamento de versões do site. O relatório também pode ser utilizado para executar a análise "what-if" da aplicação de diferentes limites de versão ou de limitação de versões existentes.
Neste tutorial, vamos abordar como:
- Gerar o ficheiro de relatório de utilização do armazenamento de versões para o site ou biblioteca.
- Verifique o progresso da geração de relatórios.
- Compreenda o ficheiro de relatório.
- Analise a utilização do armazenamento de versões com o Excel ou o PowerShell.
Em tutoriais posteriores, reveja como pode executar a análise de impacto no relatório CSV gerado.
Antes de começar
- Identifique o site do SharePoint, a conta do OneDrive ou a biblioteca de documentos cuja utilização de armazenamento de versões quer compreender.
- Escolha uma localização na biblioteca de documentos do SharePoint na qual pretende guardar o relatório.
- Baixe o Shell de Gerenciamento do SharePoint Online mais recente.
Observação
- O ficheiro de relatório é gerado na localização do relatório especificada.
- A localização do relatório tem de estar numa biblioteca de documentos do SharePoint.
- Não pode haver um ficheiro com o mesmo nome que o relatório na biblioteca de documentos.
Gerar relatório de utilização de versões para sites ou bibliotecas
Pode gerar um relatório sobre a utilização atual do armazenamento de versões num site ao executar o New-SPOSiteFileVersionExpirationReportJob comando ou numa biblioteca ao executar o New-SPOListFileVersionBatchDeleteJob comando .
No exemplo seguinte, é colocada uma tarefa em fila para gerar um relatório no âmbito do site na localização do relatório, 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"
No exemplo seguinte, é colocada uma tarefa em fila para gerar um relatório com âmbito de biblioteca na localização do relatório, 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"
Verificar o progresso na geração de relatórios
Utilize o Get-SPOListFileVersionExpirationReportJobProgress comando para controlar o progresso do pedido de geração de relatórios.
O exemplo abaixo mostra como pode marcar se o relatório no âmbito do site estiver totalmente preenchido e pronto para ser analisado.
Get-SPOSiteFileVersionExpirationReportJobProgress -Identity https://contoso.sharepoint.com/sites/site1 -ReportUrl "https://contoso.sharepoint.com/sites/sites1/reports/MyReports/VersionReport.csv"
O exemplo abaixo mostra como pode marcar se o relatório no âmbito da biblioteca estiver totalmente preenchido e pronto para ser analisado.
Get-SPOListFileVersionExpirationReportJobProgress -Site https://contoso.sharepoint.com/sites/site1 -List "Documents" -ReportUrl "https://contoso.sharepoint.com/sites/sites1/reports/MyReports/VersionReport.csv"
O cmdlet devolverá uma resposta no formato JSON. A resposta json devolvida tem uma chave com o nome status. Veja a tabela abaixo para obter um dos seguintes valores esperados:
| Resposta de Estado JSON | Explicação |
|---|---|
| "concluído" | A tarefa foi concluída com êxito e o relatório está totalmente preenchido. |
| "in_progress" | Existe um trabalho ativo. O relatório é parcialmente preenchido. |
| "no_report_found" | Não existem tarefas ativas a preencher o ficheiro especificado. |
| "falhou" | A tarefa para gerar o relatório falhou devido à mensagem de erro. Verifique "error_message" para obter a mensagem de erro da falha. |
Compreender o ficheiro de relatório de versão
O relatório gerado está no formato CSV, com cada linha a corresponder a uma versão de ficheiro. Eis um exemplo do relatório de expiração da versão do ficheiro e a divisão das colunas.
A primeira linha é o cabeçalho com os identificadores de coluna que contêm Identificadores de Versão do Ficheiro, informações de Metadados de Versão e carimbo de data/hora de expiração. As colunas compactas são indicadas com .Compact pós-correção que não repetem valores se duas linhas consecutivas tiverem o mesmo valor. As outras linhas representam versões de ficheiro, em que cada linha representa uma única versão.
Vamos percorrer a primeira versão do ficheiro apresentada neste relatório.
Identificadores de versão do ficheiro:
WebId,DocId,MajorVersioneMinorVersionidentificam exclusivamente cada versão no seu site do SharePoint.Identificadores de metadados de versão:
WebUrlindica a versão nohttps://contoso.sharepoint.comeFileUrlindica que o ficheiro para esta versão está localizado no DocLib/MyDocument.docx. Por outras palavras, está numa Biblioteca de Documentos denominadaDocLib, enquanto o ficheiro está na pasta raiz deDocLibe tem o nome MyDocument.docx.Sizeindica que a versão requer 92 246 bytes de armazenamento.As duas colunas
ModifiedBy_UserIdseguintes indicamModifiedBy_DisplayNameque a utilizadora Michelle Harris (com o ID de utilizador 6) criou esta versão.LastModifiedDateindica que o conteúdo da versão foi modificado pela última vez a 13 de março de 2023 às 22:36:09 UTC.SnapshotDatemostra que a versão se tornou uma versão histórica a 20 de março de 2023, às 16:56:51 UTC.IsSnapshotDateEstimatedmostra queSnapshotDateé a data de snapshot real.Identificadores de agenda de expiração:
CurrentExpirationDateindica que esta versão está atualmente definida para nunca expirar.AutomaticPolicyExpirationDatemostra que, na política de expiração automática, esta versão também está definida para nunca expirar.TargetExpirationDateindica que, se seguirmos esta agenda para a limitação, definiríamos que esta versão nunca expiraria.
Observação
As versões de ficheiro armazenadas na biblioteca de suspensão de preservação também serão incluídas neste relatório.
Vejamos a terceira versão.
Os WebId valores e DocId estão vazios porque estas colunas são colunas compactas, indicadas por . Compactar pós-correção significa que devem ter valores. Se procurarmos o último valor acima dessa linha, encontramos WebId como 4c7a58c1-01f2-4fa3-a730-44081a44f689e DocId como 18c3e09c-b5be-48e7-a754-7a2ce53e0999.
Também podemos ver que o TargetExpirationDate está definido para 19 de abril de 2023, às 18:08:53 UTC. Significa que se cortarmos com base nesta agenda, estaríamos a definir a data de expiração para esta versão para essa hora.
Observação
Todas as datas são representadas no formato de ida e volta. Para obter mais informações, veja Standard cadeias de formato de data e hora - .NET | Microsoft Learn
Analisar o armazenamento de versões dos sites
Antes de iniciar a sua análise, deve atualizar a TargetExpirationDate coluna no ficheiro de relatório para as datas pretendidas, como as versões a expirar. Mais uma vez, se escolher uma data anterior para uma versão, essa versão será tratada como "versão que já tinha expirado" e será eliminada imediatamente após iniciar o corte.
Pode atualizar manualmente as datas no TargetExpirationDate ao editar o ficheiro csv. No entanto, pode ter demasiadas linhas para atualizar manualmente. Para atualizar a coluna em massa, pode utilizar fórmulas do Excel ou também pode utilizar um dos scripts do PowerShell que fornecemos no Tutorial: Executar a análise "What-If". Especificamente, pode escolher um modo de corte, executar o script correspondente para obter um ficheiro csv atualizado com TargetExpirationDate preenchido com base nesse modo de corte e continuar a partir daí.
Opção um: Analisar o relatório com o Excel
Abra o livro partilhado do Excel AnalyzeReportFile_Template.xlsx. Pode encontrar as seguintes folhas de cálculo na mesma.
- Configuração: utilize esta folha de cálculo para definir o intervalo de datas para gerar as diferentes vistas de relatório.
- Conjunto de dados: esta folha de cálculo é o conjunto de dados não processado importado do ficheiro de relatório. Várias vistas de resumo de relatórios são construídas a partir deste conjunto de dados.
-
Relatórios Predefinidos: eis uma lista de vistas predefinidas que podem ser utilizadas para compreender o impacto da aplicação da definição selecionada em versões armazenadas no site:
- Resumo: Analise o estado atual do armazenamento de versões para este site e elimine a distribuição de versões nas novas definições.
- Utilizadores Afetados: reveja os utilizadores cujas versões seriam afetadas nas novas definições.
- Contagem de Versões: uma tabela e um gráfico que mostram os números de versões que estarão disponíveis ao longo do tempo de acordo com a agenda atual e o número de versões que estarão disponíveis ao abrigo da nova agenda.
- Análise do Tamanho da Versão: compare o tamanho das versões que serão eliminadas ao longo do tempo de acordo com a agenda atual e o número de versões que estarão disponíveis de acordo com a nova agenda.
- Análise ao Nível do Ficheiro: reveja as eliminações de versões ao nível do ficheiro nas novas definições.
Preencha o livro ao seguir estes passos:
Na folha de cálculo Configuração , introduza o caminho completo para o ficheiro de relatório What-If na Célula B3.
Se quiser alterar o intervalo de datas dos gráficos na folha de cálculo Número de Versões Disponíveis ou Tamanho das Versões Expirado , altere os valores correspondentes nas Células B6, B7, B10 e/ou B11. É opcional.
Na parte superior do Excel, selecione o separador Dados e, no Friso, selecione o botão Atualizar Tudo .
Na folha de cálculo Análise ao Nível do Ficheiro , preenchimento automático das colunas Número de Versões e Número de Versões Restantes Após Eliminação .
Na folha de cálculo Utilizadores Afetados , preenchimento automático da coluna Número de Versões Será Eliminado .
Todas as folhas de cálculo devem estar atualizadas. Pode marcar as informações que lhe interessam.
Opção dois: Analisar o relatório com o PowerShell
- Guarde o script como um ficheiro com o nome 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
- Abra o PowerShell e execute o seguinte comando, substituindo os valores do marcador de posição pelos valores adequados.
Observação
Utilize o PowerShell 7 para executar os comandos. Pode instalar o PowerShell 7 ao seguir estas instruções: Instalar o PowerShell no Windows - PowerShell | Microsoft Learn.
. “<path to AnalyzeReportFile.ps1>” –ReportLocalFilePath “<path to the file version expiration What-If report .csv file>”
- O resultado apresenta quatro tabelas:
Agenda de Expiração Atual: esta tabela contém um resumo de série temporal para as suas versões tal como estão. Tem as seguintes colunas:
- Data: a primeira coluna representa a data.
- NumberOfVersionsAvailable: o número de versões disponíveis nessa data ao abrigo da agenda atual.
- NumberOfVersionsExpired: o número de versões expirou nessa data de acordo com a agenda atual.
- SizeOfVersionsExpiredMB: o tamanho das versões expirou nessa data de acordo com a agenda atual.
Agenda de Expiração de Destino: esta tabela é igual à Agenda de Expiração Atual, mas reflete antes a agenda atualizada. Esta tabela só é útil se quiser testar diferentes cenários de expiração ao alterar a coluna TargetExpirationDate no relatório de expiração da versão do ficheiro.
Ficheiros com Menos de 10 Versões: uma lista dos URLs e o número de versões antes e depois da eliminação dos ficheiros cujo número de versões é inferior a 10 após a eliminação imediata (mas foi mais de 10 antes da eliminação imediata).
Utilizadores Afetados: os utilizadores cujas versões seriam imediatamente eliminadas.
Opcionalmente, pode ajustar os parâmetros:
-
TimelineStartDate: a data de início da Tabela 1 e 2 acima. -
TimelineStepDays: o número de dias entre linhas para a Tabela 1 e 2 acima. -
TimelineNumSteps: o número de linhas a calcular para a Tabela 1 e 2 acima. -
ShowFilesWithFewerThanNVersions: o limiar do número de versões na Tabela 3 acima.