Создание и удаление нескольких поисков содержимого, а также получение отчетов по ним

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

Совет

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

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

Шаг 1. Создание CSV-файла, содержащего сведения о поисковых запросах, которые вы хотите выполнить

CSV-файл, который вы создаете на этом шаге, содержит строку для каждого пользователя, который хочет выполнить поиск. Вы можете выполнить поиск в почтовом ящике Exchange Online пользователя (который включает архивный почтовый ящик, если он включен) и его OneDrive для бизнеса сайте. Вы также можете выполнить поиск только в почтовом ящике или на сайте OneDrive для бизнеса. Вы также можете выполнять поиск на любом сайте в организации SharePoint Online. Скрипт, выполняемый на шаге 3, создаст отдельный поиск каждой строки в CSV-файле.

  1. Скопируйте и вставьте следующий текст в файл .txt с помощью Блокнота. Сохраните этот файл в папку на локальном компьютере. Вы также сохраните другие скрипты в этой папке.

    ExchangeLocation,SharePointLocation,ContentMatchQuery,StartDate,EndDate
    sarad@contoso.onmicrosoft.com,https://contoso-my.sharepoint.com/personal/sarad_contoso_onmicrosoft_com,(lawsuit OR legal),1/1/2000,12/31/2005
    sarad@contoso.onmicrosoft.com,https://contoso-my.sharepoint.com/personal/sarad_contoso_onmicrosoft_com,(lawsuit OR legal),1/1/2006,12/31/2010
    sarad@contoso.onmicrosoft.com,https://contoso-my.sharepoint.com/personal/sarad_contoso_onmicrosoft_com,(lawsuit OR legal),1/1/2011,3/21/2016
    ,https://contoso.sharepoint.com/sites/contoso,,,3/21/2016
    ,https://contoso-my.sharepoint.com/personal/davidl_contoso_onmicrosoft_com,,1/1/2015,
    ,https://contoso-my.sharepoint.com/personal/janets_contoso_onmicrosoft_com,,1/1/2015,
    

    В первой строке или строке заголовка файла перечислены параметры, которые будут использоваться командлетом New-ComplianceSearch (в скрипте на шаге 3) для создания нового поиска контента. Имена параметров отделяются друг от друга запятыми. Убедитесь, что в строке заголовка нет пробелов. Каждая строка под строкой заголовка представляет значения параметров для каждого поиска. Обязательно замените данные заполнителей в CSV-файле фактическими данными.

  2. Откройте файл .txt в Excel, а затем используйте сведения из следующей таблицы, чтобы изменить файл со сведениями для каждого поиска.


Параметр Описание
ExchangeLocation SMTP-адрес почтового ящика пользователя.
SharePointLocation URL-адрес сайта OneDrive для бизнеса пользователя или URL-адрес любого сайта в организации. Для URL-адреса OneDrive для бизнеса сайтов используйте следующий формат: https://<your organization>-my.sharepoint.com/personal/<user alias>_<your organization>_onmicrosoft_com. Например, https://contoso-my.sharepoint.com/personal/sarad_contoso_onmicrosoft_com.
ContentMatchQuery Поисковый запрос для поиска. Дополнительные сведения о создании поискового запроса см. в разделе Запросы ключевых слов и условия поиска для поиска контента.
StartDate Для электронной почты — это дата или после того, как сообщение было получено получателем или отправлено отправителем. Для документов на сайтах SharePoint или OneDrive для бизнеса дата последнего изменения документа или после нее.
EndDate Для электронной почты — дата или раньше отправки сообщения пользователем. Для документов на сайтах SharePoint или OneDrive для бизнеса дата последнего изменения документа или до нее.
  1. Сохраните файл Excel в виде CSV-файла в папку на локальном компьютере. Скрипт, создаваемый на шаге 3, будет использовать сведения из этого CSV-файла для создания поиска.

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

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

Шаг 3. Запуск скрипта для создания и запуска поиска

Скрипт на этом шаге создаст отдельный поиск контента для каждой строки в CSV-файле, созданном на шаге 1. При выполнении этого скрипта вам будет предложено ввести два значения:

  • Идентификатор группы поиска . Это имя позволяет легко организовать поиск, созданный из CSV-файла. Каждый созданный поиск именуется с идентификатором группы поиска, а затем к имени поиска добавляется число. Например, если ввести ContosoCase в качестве идентификатора группы поиска, поисковые запросы будут называться ContosoCase_1, ContosoCase_2, ContosoCase_3 и т. д. Обратите внимание, что введенное имя учитывает регистр. При использовании идентификатора группы поиска на шаге 4 и шаге 5 необходимо использовать тот же случай, что и при его создании.

  • CSV-файл — имя CSV-файла, созданного на шаге 1. Обязательно включите в поле use полное имя файла, включив расширение файла .csv; например, ContosoCase.csv.

Чтобы запустить сценарий, сделайте следующее:

  1. Сохраните следующий текст в файл скрипта Windows PowerShell с помощью суффикса имени файла .ps1, например CreateSearches.ps1. Сохраните файл в той же папке, в которой были сохранены другие файлы.

    # Get the Search Group ID and the location of the CSV input file
    $searchGroup = Read-Host 'Search Group ID'
    $csvFile = Read-Host 'Source CSV file'
    
    # Do a quick check to make sure our group name will not collide with other searches
    $searchCounter = 1
    import-csv $csvFile |
      ForEach-Object{
    
     $searchName = $searchGroup +'_' + $searchCounter
     $search = Get-ComplianceSearch $searchName -EA SilentlyContinue
     if ($search)
     {
        Write-Error "The Search Group ID conflicts with existing searches.  Please choose a search group name and restart the script."
        return
     }
     $searchCounter++
    }
    
    $searchCounter = 1
    import-csv $csvFile |
      ForEach-Object{
    
     # Create the query
     $query = $_.ContentMatchQuery
     if(($_.StartDate -or $_.EndDate))
     {
           # Add the appropriate date restrictions.  NOTE: Using the Date condition property here because it works across Exchange, SharePoint, and OneDrive for Business.
           # For Exchange, the Date condition property maps to the Sent and Received dates; for SharePoint and OneDrive for Business, it maps to Created and Modified dates.
           if($query)
           {
               $query += " AND"
           }
           $query += " ("
           if($_.StartDate)
           {
               $query += "Date >= " + $_.StartDate
           }
           if($_.EndDate)
           {
               if($_.StartDate)
               {
                   $query += " AND "
               }
               $query += "Date <= " + $_.EndDate
           }
           $query += ")"
     }
    
      # -ExchangeLocation can't be set to an empty string, set to null if there's no location.
      $exchangeLocation = $null
      if ( $_.ExchangeLocation)
      {
            $exchangeLocation = $_.ExchangeLocation
      }
    
     # Create and run the search
     $searchName = $searchGroup +'_' + $searchCounter
     Write-Host "Creating and running search: " $searchName -NoNewline
     $search = New-ComplianceSearch -Name $searchName -ExchangeLocation $exchangeLocation -SharePointLocation $_.SharePointLocation -ContentMatchQuery $query
    
     # Start and wait for each search to complete
     Start-ComplianceSearch $search.Name
     while ((Get-ComplianceSearch $search.Name).Status -ne "Completed")
     {
        Write-Host " ." -NoNewline
        Start-Sleep -s 3
     }
     Write-Host ""
    
     $searchCounter++
    }
    
  2. В Windows PowerShell перейдите в папку, в которой вы сохранили скрипт на предыдущем шаге, а затем запустите сценарий, например:

    .\CreateSearches.ps1
    
  3. В командной строке Идентификатор группы поиска введите имя поисковой группы и нажмите клавишу ВВОД; например, ContosoCase. Помните, что это имя учитывает регистр, поэтому вам придется ввести его таким же образом на последующих шагах.

  4. В командной строке Исходный CSV-файл введите имя CSV-файла, включая расширение файла .csv; например, ContosoCase.csv.

  5. Нажмите клавишу ВВОД , чтобы продолжить выполнение скрипта.

    Скрипт отображает ход создания и выполнения поиска. После завершения скрипта он возвращается в запрос.

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

Шаг 4. Запуск скрипта для отчета о оценках поиска

После создания поиска следующим шагом является запуск скрипта, который отображает простой отчет о количестве попаданий поиска для каждого поиска, созданного на шаге 3. Отчет также включает размер результатов для каждого поиска, а также общее количество попаданий и общий размер всех поисковых запросов. При запуске скрипта отчетов вам будет предложено ввести идентификатор группы поиска и имя CSV-файла, если вы хотите сохранить отчет в CSV-файл.

  1. Сохраните следующий текст в файл скрипта Windows PowerShell с помощью суффикса имени файла .ps1, например SearchReport.ps1. Сохраните файл в той же папке, в которой были сохранены другие файлы.

    $searchGroup = Read-Host 'Search Group ID'
    $outputFile = Read-Host 'Enter a file name or file path to save the report to a .csv file. Leave blank to only display the report'
    $searches = Get-ComplianceSearch | ?{$_.Name -clike $searchGroup + "_*"}
    $allSearchStats = @()
    foreach ($partialObj in $searches)
    {
       $search = Get-ComplianceSearch $partialObj.Name
       $sizeMB = [System.Math]::Round($search.Size / 1MB, 2)
       $searchStatus = $search.Status
       if($search.Errors)
       {
           $searchStatus = "Failed"
       }elseif($search.NumFailedSources -gt 0)
       {
           $searchStatus = "Failed Sources"
       }
       $searchStats = New-Object PSObject
       Add-Member -InputObject $searchStats -MemberType NoteProperty -Name Name -Value $search.Name
       Add-Member -InputObject $searchStats -MemberType NoteProperty -Name ContentMatchQuery -Value $search.ContentMatchQuery
       Add-Member -InputObject $searchStats -MemberType NoteProperty -Name Status -Value $searchStatus
       Add-Member -InputObject $searchStats -MemberType NoteProperty -Name Items -Value $search.Items
       Add-Member -InputObject $searchStats -MemberType NoteProperty -Name "Size" -Value $search.Size
       Add-Member -InputObject $searchStats -MemberType NoteProperty -Name "Size(MB)" -Value $sizeMB
       $allSearchStats += $searchStats
    }
    # Calculate the totals
    $allItems = ($allSearchStats | Measure-Object Items -Sum).Sum
    # Convert the total size to MB and round to the nearst 100th
    $allSize = ($allSearchStats | Measure-Object 'Size' -Sum).Sum
    $allSizeMB = [System.Math]::Round($allSize  / 1MB, 2)
    # Get the total successful searches and total of all searches
    $allSuccessCount = ($allSearchStats |?{$_.Status -eq "Completed"}).Count
    $allCount = $allSearchStats.Count
    $allStatus = [string]$allSuccessCount + " of " + [string]$allCount
    # Totals Row
    $totalSearchStats = New-Object PSObject
    Add-Member -InputObject $totalSearchStats -MemberType NoteProperty -Name Name -Value "Total"
    Add-Member -InputObject $totalSearchStats -MemberType NoteProperty -Name Status -Value $allStatus
    Add-Member -InputObject $totalSearchStats -MemberType NoteProperty -Name Items -Value $allItems
    Add-Member -InputObject $totalSearchStats -MemberType NoteProperty -Name "Size(MB)" -Value $allSizeMB
    $allSearchStats += $totalSearchStats
    # Just get the columns we're interested in showing
    $allSearchStatsPrime = $allSearchStats | Select-Object Name, Status, Items, "Size(MB)", ContentMatchQuery
    # Print the results to the screen
    $allSearchStatsPrime |ft -AutoSize -Wrap
    # Save the results to a CSV file
    if ($outputFile)
    {
       $allSearchStatsPrime | Export-Csv -Path $outputFile -NoTypeInformation
    }
    
  2. В Windows PowerShell перейдите в папку, в которой вы сохранили скрипт на предыдущем шаге, а затем запустите сценарий, например:

    .\SearchReport.ps1
    
  3. В командной строке Идентификатор группы поиска введите имя поисковой группы и нажмите клавишу ВВОД; например ContosoCase. Помните, что это имя учитывает регистр, поэтому вам придется ввести его так же, как и при выполнении скрипта на шаге 3.

  4. В поле Путь к файлу для сохранения отчета в CSV-файл (оставьте пустым, чтобы просто отобразить отчет) введите имя файла с полным путем к имени файла (включая расширение файла .csv), если вы хотите сохранить отчет в CSV-файл. имя CSV-файла, включая расширение файла .csv. Например, можно ввести ContosoCaseReport.csv , чтобы сохранить его в текущем каталоге, или ввести C:\Users\admin\OneDrive for Business\ContosoCase\ContosoCaseReport.csv , чтобы сохранить его в другой папке. Вы также можете оставить запрос пустым, чтобы отобразить отчет, но не сохранить его в файле.

  5. Нажмите клавишу ВВОД.

    Скрипт отображает ход создания и выполнения поиска. По завершении скрипта отобразится отчет.

    Запустите отчет о поиске, чтобы отобразить оценки для группы поиска.

Примечание.

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

Шаг 5. Запуск скрипта для удаления поисковых запросов

Так как вы можете создавать много поисковых запросов, последний скрипт просто упрощает быстрое удаление поисковых запросов, созданных на шаге 3. Как и другие скрипты, этот также предлагает ввести идентификатор группы поиска. Все поисковые запросы с идентификатором группы поиска в имени поиска будут удалены при выполнении этого скрипта.

  1. Сохраните следующий текст в файл скрипта Windows PowerShell с помощью суффикса имени файла .ps1, например DeleteSearches.ps1. Сохраните файл в той же папке, в которой были сохранены другие файлы.

    # Delete all searches in a search group
    $searchGroup = Read-Host 'Search Group ID'
    Get-ComplianceSearch |
       ForEach-Object{
       # If the name matches the search group name pattern (case sensitive), delete the search
       if ($_.Name -cmatch $searchGroup + "_\d+")
       {
           Write-Host "Deleting search: " $_.Name
           Remove-ComplianceSearch $_.Name -Confirm:$false
       }
    }
    
  2. В Windows PowerShell перейдите в папку, в которой вы сохранили скрипт на предыдущем шаге, а затем запустите сценарий, например:

    .\DeleteSearches.ps1
    
  3. В командной строке Идентификатор группы поиска введите имя группы поиска, которую требуется удалить, и нажмите клавишу ВВОД. например, ContosoCase. Помните, что это имя учитывает регистр, поэтому вам придется ввести его так же, как и при выполнении скрипта на шаге 3.

    Скрипт отображает имя каждого удаленного поиска.

    Запустите скрипт, чтобы удалить поисковые запросы в группе поиска.