Usare uno script per creare un report sui blocchi nei casi di eDiscovery

Lo script in questo articolo consente agli amministratori di eDiscovery e ai responsabili di eDiscovery di generare un report contenente informazioni su tutti i blocchi associati ai casi eDiscovery (Standard) ed eDiscovery (Premium) nel Portale di conformità di Microsoft Purview. Il report contiene informazioni come il nome del caso a cui è associato un blocco, i percorsi del contenuto che vengono inseriti in attesa e se il blocco è basato su query. Se sono presenti casi in cui non sono presenti blocchi, lo script creerà un report aggiuntivo con un elenco di casi senza blocchi.

Per una descrizione dettagliata delle informazioni incluse nel report, vedere la sezione Altre informazioni .

Consiglio

Se non si è un cliente E5, usare la versione di valutazione delle soluzioni Microsoft Purview di 90 giorni per esplorare in che modo funzionalità aggiuntive di Purview possono aiutare l'organizzazione a gestire le esigenze di sicurezza e conformità dei dati. Iniziare ora dall'hub delle versioni di valutazione Portale di conformità di Microsoft Purview. Informazioni dettagliate sull'iscrizione e le condizioni di valutazione.

Amministrazione requisiti e informazioni sullo script

  • Per generare un report su tutti i casi di eDiscovery nell'organizzazione, è necessario essere un amministratore di eDiscovery nell'organizzazione. Se si è un gestore di eDiscovery, il report includerà solo informazioni sui casi a cui è possibile accedere. Per altre informazioni sulle autorizzazioni di eDiscovery, vedere Assegnare autorizzazioni di eDiscovery.
  • Lo script in questo articolo ha una gestione degli errori minima. Lo scopo principale è creare rapidamente un report sui blocchi associati ai casi di eDiscovery nell'organizzazione.
  • Gli script di esempio forniti in questo articolo non sono supportati da alcun programma o servizio standard di supporto Microsoft. Gli script di esempio sono forniti così come sono senza alcun tipo di garanzia. Microsoft esclude inoltre qualsiasi garanzia implicita, tra cui, senza limitazioni, tutte le garanzie implicite di commerciabilità o idoneità per uno scopo specifico. L'utente assume tutti i rischi associati all'uso o alle prestazioni degli script di esempio e della documentazione. In nessun caso Microsoft, i suoi autori o chiunque altro coinvolto nella creazione, produzione o consegna degli script è da ritenersi responsabile per qualsiasi danno eventuale (inclusi, senza limitazione alcuna, danni riguardanti profitti aziendali, interruzione di attività, perdita di informazioni aziendali o altra perdita pecuniaria) derivanti dall'utilizzo o dall'incapacità di utilizzo degli script di esempio e della documentazione, anche nel caso in cui Microsoft sia stata avvisata della possibilità di tali danni.

Passaggio 1: Connettersi a PowerShell in Sicurezza e conformità

Il primo passaggio consiste nel connettersi a PowerShell in Sicurezza e conformità e conformità per l'organizzazione. Per ottenere istruzioni dettagliate, vedere Connettersi a PowerShell in Sicurezza e conformità.

Passaggio 2: Eseguire lo script per segnalare i blocchi associati ai casi di eDiscovery

Dopo aver eseguito la connessione a Security & Compliance PowerShell, il passaggio successivo consiste nel creare ed eseguire lo script che raccoglie informazioni sui casi di eDiscovery nell'organizzazione.

  1. Salvare il testo seguente in un file di script Windows PowerShell usando un suffisso di nome file di .ps1, ad esempio 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 (Standard) 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 (Premium) 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. Nella sessione Windows PowerShell aperta nel passaggio 1 passare alla cartella in cui è stato salvato lo script.

  3. Eseguire lo script; Per esempio:

    .\CaseHoldsReport.ps1
    

    Lo script richiederà una cartella di destinazione in cui salvare il report.

  4. Digitare il nome completo del percorso della cartella in cui salvare il report e quindi premere INVIO.

    Consiglio

    Per salvare il report nella stessa cartella in cui si trova lo script, digitare un punto (".") quando viene richiesto di specificare una cartella di destinazione. Per salvare il report in una sottocartella nella cartella in cui si trova lo script, è sufficiente digitare il nome della sottocartella.

    Lo script inizia a raccogliere informazioni su tutti i casi di eDiscovery nell'organizzazione. Non accedere al file di report mentre lo script è in esecuzione. Al termine dello script, viene visualizzato un messaggio di conferma nella sessione di Windows PowerShell. Dopo aver visualizzato questo messaggio, è possibile accedere al report nella cartella specificata nel passaggio 4. Il nome del file per il report è CaseHoldsReport<DateTimeStamp>.csv.

    Inoltre, lo script crea anche un report con un elenco di casi che non hanno blocchi. Il nome del file per questo report è CaseswithNoHolds<DateTimeStamp>.csv.

    Ecco un esempio di esecuzione dello script CaseHoldsReport.ps1.

    Output dopo l'esecuzione dello script CaseHoldsReport.ps1.

Ulteriori informazioni

Il case contiene il report creato quando si esegue lo script in questo articolo contiene le informazioni seguenti su ogni blocco. Come spiegato in precedenza, è necessario essere un amministratore di eDiscovery per restituire informazioni per tutti i blocchi nell'organizzazione. Per altre informazioni sui blocchi dei casi, vedere casi di eDiscovery.

  • Nome del blocco e nome del caso di eDiscovery a cui è associato il blocco.
  • Indica se il blocco è associato a un caso di eDiscovery (Standard) o eDiscovery (Premium).
  • Indica se il caso di eDiscovery è attivo o chiuso.
  • Indica se il blocco è abilitato o disabilitato.
  • Membri del caso eDiscovery a cui è associato il blocco. I membri del case possono visualizzare o gestire un caso, a seconda delle autorizzazioni di eDiscovery a cui sono stati assegnati.
  • Ora e data di creazione del caso.
  • Se un caso viene chiuso, la persona che lo ha chiuso e l'ora e la data di chiusura.
  • Cassette postali di Exchange e posizioni dei siti di SharePoint in attesa.
  • Se il blocco è basato su query, la sintassi della query.
  • Ora e data di creazione del blocco e persona che l'ha creata.
  • Ora e data dell'ultima modifica del blocco e della persona che l'ha modificata.