共用方式為


使用文稿在電子檔探索案例中建立保留的報告

本文中的腳本可讓電子檔探索系統管理員和電子檔探索管理員產生報告,其中包含與 Microsoft Purview 合規性入口網站 中 eDiscovery (Standard) 和 eDiscovery (Premium) 案例相關聯之所有保留的相關信息。 報表包含的資訊,例如保留所關聯的案例名稱、保留中的內容位置,以及保留是否以查詢為基礎。 如果有沒有任何保留的案例,腳本會建立額外的報表,其中包含不含保留的案例清單。

如需報表中所含信息的詳細描述,請參閱詳細 資訊 一節。

提示

如果您不是 E5 客戶,請使用 90 天的 Microsoft Purview 解決方案試用版來探索其他 Purview 功能如何協助貴組織管理數據安全性與合規性需求。 立即從 Microsoft Purview 合規性入口網站 試用中樞開始。 瞭解 有關註冊和試用版條款的詳細數據

管理員 需求和腳本資訊

  • 若要產生組織中所有電子檔探索案例的報告,您必須是組織中的電子檔探索系統管理員。 如果您是電子檔探索管理員,報表只會包含您可以存取之案例的相關信息。 如需電子檔探索許可權的詳細資訊,請 參閱指派電子檔探索許可權
  • 本文中的腳本具有最少的錯誤處理。 主要目的是要快速建立與組織中電子檔探索案例相關聯之保留的相關報告。
  • 在任何 Microsoft 標準支援程式或服務下,不支援本文中提供的範例指令碼。 範例指令碼係依「現狀」提供,不含任何種類的擔保方式。 Microsoft 另外不承擔任何明示或默示的擔保,包括但不限於適售性或適合某特定用途的默示擔保。 使用或操作範例指令碼和文件發生的所有風險,皆屬於您的責任。 Microsoft、其作者以及其他與建置、生產或交付程式碼相關的任何人在任何情況下皆完全不需對任何損失負責任,包括但不限於商業利潤損失、業務中斷、業務資訊損失、或其他錢財損失等因使用或無法使用範例指令碼或文件所發生的損失,即使 Microsoft 曾建議這些損失發生的可能性。

步驟 1︰連線至安全性與合規性 PowerShell

第一個步驟是將組織連線至安全性與合規性 PowerShell。 如需逐步指示,請參閱連線到安全性與合規性 PowerShell

步驟 2:執行腳本以報告與電子檔探索案例相關聯的保留

聯機到安全性 & 合規性 PowerShell 之後,下一個步驟是建立並執行腳本,以收集組織中電子檔探索案例的相關信息。

  1. 使用 .ps1 的檔名後綴,將下列文字儲存至 Windows PowerShell 腳本檔案;例如,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. 在步驟 1 中開啟的 Windows PowerShell 工作階段中,移至您儲存腳本的資料夾。

  3. 執行腳本;例如:

    .\CaseHoldsReport.ps1
    

    文本會提示目標資料夾儲存報表。

  4. 輸入要儲存報表的資料夾完整路徑名稱,然後按 Enter

    提示

    若要將報表儲存在腳本所在的相同資料夾中,請輸入句號 (」。當系統提示您輸入目標資料夾時,) 。 若要將報表儲存在腳本所在資料夾的子資料夾中,只要輸入子資料夾的名稱即可。

    腳本會開始收集組織中所有電子檔探索案例的相關信息。 腳本執行時,請勿存取報表檔案。 腳本完成之後,Windows PowerShell 會話中會顯示確認訊息。 顯示此訊息之後,您可以在步驟 4 中指定的資料夾中存取報表。 報表的檔案名是 CaseHoldsReport<DateTimeStamp>.csv

    此外,腳本也會建立報表,其中包含沒有任何保留的案例清單。 此報表的檔案名態 CaseswithNoHolds<DateTimeStamp>.csv

    以下是執行 CaseHoldsReport.ps1 腳本的範例。

    執行 CaseHoldsReport.ps1 腳本之後的輸出。

其他相關資訊

案例會保留您在本文中執行腳本時所建立的報表,其中包含每個保留的下列資訊。 如先前所述,您必須是電子檔探索系統管理員,才能傳回組織中所有保留的資訊。 如需案例保存的詳細資訊,請參閱 電子檔探索案例

  • 保留的名稱,以及與保留相關聯之電子檔探索案例的名稱。
  • 保留是否與 eDiscovery (Standard) 或 eDiscovery (Premium) 案例相關聯。
  • 電子檔探索案例是否為作用中或已關閉。
  • 保留是否已啟用或停用。
  • 與保留相關聯之電子檔探索案例的成員。 案例成員可以視其已指派的電子檔探索許可權而定,檢視或管理案例。
  • 建立案例的時間和日期。
  • 如果案例已結案,則為關閉案例的人員,以及其關閉的時間和日期。
  • 保留的 Exchange 信箱和 SharePoint 網站位置。
  • 如果保留是以查詢為基礎,則為查詢語法。
  • 保留建立的時間和日期,以及建立保留的時間和日期。
  • 上次變更保留的時間和日期,以及變更保留的時間和日期。