Поделиться через


Создание отчета об удержании в случаях обнаружения электронных данных с помощью скрипта

Совет

Обнаружение электронных данных (предварительная версия) теперь доступно на новом портале Microsoft Purview. Дополнительные сведения об использовании нового интерфейса обнаружения электронных данных см. в статье Сведения об обнаружении электронных данных (предварительная версия).

Скрипт, приведенный в этой статье, позволяет администраторам обнаружения электронных данных и менеджерам по обнаружению электронных данных создавать отчет, содержащий сведения обо всех удержаниях, связанных с случаями обнаружения электронных данных (Standard) и обнаружения электронных данных (премиум) в Портал соответствия требованиям Microsoft Purview. Отчет содержит такие сведения, как имя дела, с которым связано удержание, расположение содержимого, которое помещается на удержание, а также о том, основано ли удержание на основе запроса. Если есть случаи, в которых нет удержаний, скрипт создает дополнительный отчет со списком случаев без удержания.

Подробное описание сведений, включенных в отчет, см. в разделе Дополнительные сведения .

Совет

Если вы не являетесь клиентом E5, используйте 90-дневную пробную версию решений Microsoft Purview, чтобы узнать, как дополнительные возможности Purview могут помочь вашей организации управлять безопасностью данных и соответствием требованиям. Начните сейчас в центре пробных версий Microsoft Purview. Сведения о регистрации и условиях пробной версии.

требования к Администратор и сведения о скрипте

  • Чтобы создать отчет по всем случаям обнаружения электронных данных в организации, необходимо быть администратором обнаружения электронных данных в организации. Если вы являетесь диспетчером обнаружения электронных данных, отчет будет содержать только сведения о случаях, к которым можно получить доступ. Дополнительные сведения о разрешениях на обнаружение электронных данных см. в разделе Назначение разрешений на обнаружение электронных данных.
  • Скрипт, приведенный в этой статье, имеет минимальную обработку ошибок. Основная цель — быстро создать отчет о удержаниях, связанных с случаями обнаружения электронных данных в вашей организации.
  • Примеры сценариев, приведенные в данной статье, не поддерживаются ни одной из стандартных программ и служб технической поддержки Майкрософт. Примеры сценариев приводятся "как есть", без каких-либо гарантий. Кроме того, корпорация Майкрософт отказывается от всех подразумеваемых гарантий, включая, но не ограничиваясь указанным, все подразумеваемые гарантии пригодности для продажи или определенной цели. Все риски, возникающие в результате использования примеров сценариев и документации, берет на себя пользователь. Корпорация Майкрософт, ее штатные авторы и другие лица, принимающие участие в создании, подготовке и выпуске сценариев, ни при каких обстоятельствах не несут ответственность за какой-либо ущерб (в том числе, ущерб, вызванный потерей доходов предприятия, остановкой его работы, потерей бизнес-данных и другими материальными потерями), вызванный использованием или неспособностью использовать примеры сценариев и документацию, даже если корпорации Майкрософт известно о возможности нанесения такого ущерба.

Шаг 1. Подключение к PowerShell в Центре безопасности и соответствия требованиям

Первый шаг — подключение к PowerShell в Центре безопасности и соответствия требованиям вашей организации. Пошаговые инструкции см. в статье Подключение к PowerShell в Центре безопасности и соответствия требованиям.

Шаг 2. Запустите скрипт, чтобы сообщить о удержаниях, связанных с случаями обнаружения электронных данных

После подключения к PowerShell для обеспечения безопасности & соответствия требованиям следующим шагом является создание и запуск скрипта, который собирает сведения о случаях обнаружения электронных данных в вашей организации.

  1. Сохраните следующий текст в файл скрипта Windows PowerShell с помощью суффикса имени файла .ps1, например 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. В сеансе Windows PowerShell, открывшемся на шаге 1, перейдите в папку, в которой вы сохранили скрипт.

  3. Запустите скрипт; Например:

    .\CaseHoldsReport.ps1
    

    Сценарий запрашивает целевую папку для сохранения отчета.

  4. Введите полный путь к папке для сохранения отчета, а затем нажмите клавишу ВВОД.

    Совет

    Чтобы сохранить отчет в той же папке, в которую находится скрипт, введите точку (".") при появлении запроса в целевой папке. Чтобы сохранить отчет во вложенной папке в папке, где находится скрипт, просто введите имя вложенной папки.

    Скрипт начинает собирать сведения обо всех случаях обнаружения электронных данных в вашей организации. Не обращаться к файлу отчета во время выполнения скрипта. После завершения скрипта в сеансе Windows PowerShell отображается сообщение с подтверждением. После отображения этого сообщения доступ к отчету можно получить в папке, указанной на шаге 4. Имя файла отчета — CaseHoldsReport<DateTimeStamp>.csv.

    Кроме того, скрипт также создает отчет со списком случаев, в которых нет удержаний. Имя файла для этого отчета — CaseswithNoHolds<DateTimeStamp>.csv.

    Ниже приведен пример выполнения скрипта CaseHoldsReport.ps1.

    Выходные данные после выполнения скрипта CaseHoldsReport.ps1.

Дополнительная информация

В случае содержится отчет, созданный при выполнении скрипта в этой статье, содержит следующие сведения о каждом удержании. Как уже говорилось ранее, вы должны быть администратором обнаружения электронных данных, чтобы возвращать сведения обо всех удержаниях в вашей организации. Дополнительные сведения об удержании дел см. в разделе Случаи обнаружения электронных данных.

  • Имя удержания и имя дела обнаружения электронных данных, с которым связано удержание.
  • Связано ли удержание с делом обнаружения электронных данных (Standard) или eDiscovery (премиум).
  • Является ли дело обнаружения электронных данных активным или закрытым.
  • Независимо от того, включено или отключено удержание.
  • Члены дела обнаружения электронных данных, с которым связано удержание. Участники дела могут просматривать дело или управлять им в зависимости от назначенных им разрешений на обнаружение электронных данных.
  • Время и дата создания дела.
  • Если дело закрыто, лицо, закрывавшего его, а также время и дату его закрытия.
  • Расположения почтовых ящиков Exchange и сайтов SharePoint, которые находятся на удержании.
  • Если удержание основано на запросе, используется синтаксис запроса.
  • Время и дата создания удержания и лицо, создавшего его.
  • Время и дата последнего изменения удержания и лицо, изменив его.