Compartilhar via


Utilizar um script para criar um relatório de suspensão na Deteção de Dados Eletrónicos

O script neste artigo permite que os administradores de Deteção de Dados Eletrónicos e os gestores de Deteção de Dados Eletrónicos gerem um relatório que contém informações sobre todas as retenções associadas a casos de Deteção de Dados Eletrónicos no portal do Microsoft Purview. O relatório contém informações como o nome do caso ao qual uma suspensão está associada, as localizações de conteúdo que são colocadas em suspensão e se a suspensão é baseada em consultas. Se existirem casos que não têm suspensões, o script cria um relatório adicional com uma lista de casos sem suspensões.

Dica

Comece a utilizar Microsoft Security Copilot para explorar novas formas de trabalhar de forma mais inteligente e rápida com o poder da IA. Saiba mais sobre Microsoft Security Copilot no Microsoft Purview.

Informações do relatório

O caso contém o relatório que o script neste artigo cria contém as seguintes informações sobre cada suspensão:

  • O nome da suspensão e o nome do caso de Deteção de Dados Eletrónicos ao qual a suspensão está associada.
  • Se a suspensão está associada a um caso de Deteção de Dados Eletrónicos.
  • Se o caso de Deteção de Dados Eletrónicos está ativo ou fechado.
  • Se a suspensão está ativada ou desativada.
  • Os membros do caso de Deteção de Dados Eletrónicos ao qual a suspensão está associada. Os membros do caso podem ver ou gerir um caso, consoante as permissões de Deteção de Dados Eletrónicos atribuídas.
  • A hora e a data em que o caso foi criado.
  • Se um caso for encerrado, a pessoa que o fechou e a hora e data em que foi encerrado.
  • As caixas de correio do Exchange e as localizações dos sites do SharePoint que estão em suspensão.
  • Se a suspensão for baseada em consultas, a sintaxe da consulta.
  • A hora e a data em que a suspensão foi criada e a pessoa que a criou.
  • A hora e a data em que a suspensão foi alterada pela última vez e a pessoa que a alterou.

requisitos de Administração e informações de script

  • Para gerar um relatório sobre todos os casos de Deteção de Dados Eletrónicos na sua organização, tem de ser um Administrador de Deteção de Dados Eletrónicos na sua organização. Se for um Gestor de Deteção de Dados Eletrónicos, o relatório inclui apenas informações sobre os casos a que pode aceder. Para obter mais informações sobre permissões de Deteção de Dados Eletrónicos, veja Atribuir permissões de Deteção de Dados Eletrónicos.
  • O script neste artigo tem um processamento de erros mínimo. O seu principal objetivo é criar rapidamente um relatório sobre as suspensões que estão associadas aos casos de Deteção de Dados Eletrónicos na sua organização.

Importante

Os scripts de exemplo fornecidos neste artigo não são compatíveis com nenhum serviço ou programa de suporte padrão da Microsoft. Os scripts de exemplo são fornecidos COMO ESTÃO sem qualquer tipo de garantia. A Microsoft também se isenta de todas as garantias implícitas, incluindo sem limitações quaisquer garantias aplicáveis de padrões de comercialização ou de adequação a uma finalidade específica. Todos os riscos decorrentes do uso ou da execução da documentação ou scripts de exemplo serão de sua responsabilidade. De modo algum a Microsoft, seus autores ou qualquer outra pessoa envolvida na criação, produção ou veiculação dos scripts serão considerados responsáveis por quaisquer danos (incluindo sem limitações danos por perda de lucros comerciais, interrupção de negócios, perda de informações comerciais ou outras perdas pecuniárias) resultantes do uso ou da incapacidade de uso da documentação ou scripts de exemplo, mesmo que a Microsoft tenha sido alertada sobre a possibilidade de tais danos.

Etapa 1: Conecte-se à Segurança e Conformidade do PowerShell

Em primeiro lugar, ligue-se ao PowerShell de Conformidade do & de Segurança da sua organização. Para obter instruções passo a passo, confira Conectar-se à Segurança e Conformidade do PowerShell .

Passo 2: Executar o script para comunicar em suspensões associadas a casos de Deteção de Dados Eletrónicos

Depois de ligar ao PowerShell de Conformidade & de Segurança, crie e execute o script que recolhe informações sobre os casos de Deteção de Dados Eletrónicos na sua organização.

  1. Guarde o seguinte texto num ficheiro de script Windows PowerShell com um sufixo de nome de ficheiro de .ps1; por exemplo, CaseHoldsReport.ps1.

     #script begin
     " "
     write-host "***********************************************"
     write-host "Security & Compliance Center   " -foregroundColor yellow -backgroundcolor darkgreen
     write-host "eDiscovery cases - Holds report         " -foregroundColor yellow -backgroundcolor darkgreen
     write-host "***********************************************"
     " "
    
     #prompt users to specify a path to store the output files
     $time = get-date -Format dd-MM-yyyy_hh.mm
     $Path = Read-Host 'Enter a folder path to save the report to a .csv file (filename is created automatically)'
     $outputpath = $Path + '\' + 'CaseHoldsReport' + ' ' + $time + '.csv'
     $noholdsfilepath = $Path + '\' + 'CaseswithNoHolds' + $time + '.csv'
    
     #add case details to the csv file
     function add-tocasereport {
         Param([string]$casename,
             [String]$casetype,
             [String]$casestatus,
             [datetime]$casecreatedtime,
             [string]$casemembers,
             [datetime]$caseClosedDateTime,
             [string]$caseclosedby,
             [string]$holdname,
             [String]$Holdenabled,
             [string]$holdcreatedby,
             [string]$holdlastmodifiedby,
             [string]$ExchangeLocation,
             [string]$sharePointlocation,
             [string]$ContentMatchQuery,
             [datetime]$holdcreatedtime,
             [datetime]$holdchangedtime,
             [string]$holdstatus,
             [string]$holderror
         )
    
         $addRow = New-Object PSObject
         Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Case name" -Value $casename
         Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Case type" -Value $casetype
         Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Case status" -Value $casestatus
         Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Case members" -Value $casemembers
         Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Case created time" -Value $casecreatedtime
         Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Case closed time" -Value $caseClosedDateTime
         Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Case closed by" -Value $caseclosedby
         Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Hold name" -Value $holdname
         Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Hold enabled" -Value $Holdenabled
         Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Hold created by" -Value $holdcreatedby
         Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Hold last changed by" -Value $holdlastmodifiedby
         Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Exchange locations" -Value  $ExchangeLocation
         Add-Member -InputObject $addRow -MemberType NoteProperty -Name "SharePoint locations" -Value $sharePointlocation
         Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Hold query" -Value $ContentMatchQuery
         Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Hold created time (UTC)" -Value $holdcreatedtime
         Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Hold changed time (UTC)" -Value $holdchangedtime
         Add-Member -InputObject $addrow -MemberType NoteProperty -Name "Hold Status" -Value $holdstatus
         Add-Member -InputObject $addrow -MemberType NoteProperty -Name "Hold Error" -Value $holderror
    
         $allholdreport = $addRow | Select-Object "Case name", "Case type", "Case status", "Hold name", "Hold enabled", "Case members", "Case created time", "Case closed time", "Case closed by", "Exchange locations", "SharePoint locations", "Hold query", "Hold created by", "Hold created time (UTC)", "Hold last changed by", "Hold changed time (UTC)", "Hold Status", "Hold Error"
         $allholdreport | export-csv -path $outputPath -notypeinfo -append -Encoding ascii
     }
    
     #get information on the cases and pass values to the case report function
     " "
     write-host "Gathering a list of eDiscovery cases and holds..."
     " "
     $edc = Get-ComplianceCase -ErrorAction SilentlyContinue
     foreach ($cc in $edc) {
         write-host "Working on case :" $cc.name
         if ($cc.status -eq 'Closed') {
             $cmembers = ((Get-ComplianceCaseMember -Case $cc.name).windowsLiveID) -join ';'
             add-tocasereport -casename $cc.name -casetype $cc.casetype -casestatus $cc.Status -caseclosedby $cc.closedby -caseClosedDateTime $cc.ClosedDateTime -casemembers $cmembers
         }
         else {
             $cmembers = ((Get-ComplianceCaseMember -Case $cc.name).windowsLiveID) -join ';'
             $policies = Get-CaseHoldPolicy -Case $cc.Name | % { Get-CaseHoldPolicy $_.Name -Case $_.CaseId -DistributionDetail }
             if ($policies -ne $NULL) {
                 foreach ($policy in $policies) {
                     $rule = Get-CaseHoldRule -Policy $policy.name
                     add-tocasereport -casename $cc.name -casetype $cc.casetype -casemembers $cmembers -casestatus $cc.Status -casecreatedtime $cc.CreatedDateTime -holdname $policy.name -holdenabled $policy.enabled -holdcreatedby $policy.CreatedBy -holdlastmodifiedby $policy.LastModifiedBy -ExchangeLocation (($policy.exchangelocation.name) -join ';') -SharePointLocation (($policy.sharePointlocation.name) -join ';') -ContentMatchQuery $rule.ContentMatchQuery -holdcreatedtime $policy.WhenCreatedUTC -holdchangedtime $policy.WhenChangedUTC -holdstatus $policy.DistributionStatus -holderror $policy.DistributionResults
                 }
             }
             else {
                 Write-Host "No hold policies found in case:" $cc.name -foregroundColor 'Yellow'
                 " "
                 [string]$cc.name | out-file -filepath $noholdsfilepath -append
             }
         }
     }
    
     #get information on the cases and pass values to the case report function
     " "
     write-host "Gathering a list of eDiscovery cases and holds..."
     " "
     $edc = Get-ComplianceCase -CaseType Advanced -ErrorAction SilentlyContinue
     foreach ($cc in $edc) {
         write-host "Working on case :" $cc.name
         if ($cc.status -eq 'Closed') {
             $cmembers = ((Get-ComplianceCaseMember -Case $cc.name).windowsLiveID) -join ';'
             add-tocasereport -casename $cc.name -casestatus $cc.Status -casetype $cc.casetype -caseclosedby $cc.closedby -caseClosedDateTime $cc.ClosedDateTime -casemembers $cmembers
         }
         else {
             $cmembers = ((Get-ComplianceCaseMember -Case $cc.name).windowsLiveID) -join ';'
             $policies = Get-CaseHoldPolicy -Case $cc.Name | % { Get-CaseHoldPolicy $_.Name -Case $_.CaseId -DistributionDetail }
             if ($policies -ne $NULL) {
                 foreach ($policy in $policies) {
                     $rule = Get-CaseHoldRule -Policy $policy.name
                     add-tocasereport -casename $cc.name -casetype $cc.casetype -casemembers $cmembers -casestatus $cc.Status -casecreatedtime $cc.CreatedDateTime -holdname $policy.name -holdenabled $policy.enabled -holdcreatedby $policy.CreatedBy -holdlastmodifiedby $policy.LastModifiedBy -ExchangeLocation (($policy.exchangelocation.name) -join ';') -SharePointLocation (($policy.sharePointlocation.name) -join ';') -ContentMatchQuery $rule.ContentMatchQuery -holdcreatedtime $policy.WhenCreatedUTC -holdchangedtime $policy.WhenChangedUTC -holdstatus $policy.DistributionStatus -holderror $policy.DistributionResults
    
                 }
             }
             else {
                 write-host "No hold policies found in case:" $cc.name -foregroundColor 'Yellow'
                 " "
                 [string]$cc.name | out-file -filepath $noholdsfilepath -append
             }
         }
     }
    
     " "
     Write-host "Script complete! Report files saved to this folder: '$Path'"
     " "
     #script end
    
  2. Na Windows PowerShell sessão que abriu no Passo 1, aceda à pasta onde guardou o script.

  3. Executar o script; Por exemplo:

    .\CaseHoldsReport.ps1
    

    O script pede uma pasta de destino para guardar o relatório.

  4. Escreva o nome completo do caminho da pasta na qual pretende guardar o relatório e, em seguida, prima Enter.

    Dica

    Para guardar o relatório na mesma pasta onde o script está localizado, escreva um ponto final (".") quando lhe for pedido para procurar uma pasta de destino. Para guardar o relatório numa subpasta na pasta onde o script está localizado, basta escrever o nome da subpasta.

    O script começa a recolher informações sobre todos os casos de Deteção de Dados Eletrónicos na sua organização. Não aceda ao ficheiro de relatório enquanto o script estiver em execução. Após a conclusão do script, é apresentada uma mensagem de confirmação na sessão de Windows PowerShell. Depois de esta mensagem ser apresentada, pode aceder ao relatório na pasta que especificou no Passo 4. O nome do ficheiro do relatório é CaseHoldsReport<DateTimeStamp>.csv.

    Além disso, o script cria um relatório com uma lista de casos que não têm retenções. O nome de ficheiro para este relatório é CaseswithNoHolds<DateTimeStamp>.csv.

    Eis um exemplo de execução do CaseHoldsReport.ps1 script.

    O resultado depois de executar o script CaseHoldsReport.ps1.