建立、報告及刪除多個內容搜尋
提示
新的 Microsoft Purview 入口網站現已提供電子檔探索 (預覽) 。 若要深入瞭解如何使用新的電子檔探索體驗,請參閱 瞭解電子檔探索 (預覽) 。
當您嘗試瞭解基礎數據,以及搜尋的豐富性和品質時,快速建立和報告探索搜尋通常是電子檔探索和調查的重要步驟。 為了協助您執行這項操作,安全性 & 合規性 PowerShell 提供一組 Cmdlet 來自動化耗時的內容搜尋工作。 這些腳本提供快速且簡單的方法來建立數個搜尋,然後執行估計搜尋結果的報告,以協助您判斷有問題的數據量。 您也可以使用腳本來建立不同版本的搜尋,以比較每個搜尋所產生的結果。 這些腳本可協助您快速且有效率地識別和消除您的數據。
提示
如果您不是 E5 客戶,請使用 90 天Microsoft Purview 解決方案試用版來探索其他 Purview 功能如何協助貴組織管理數據安全性與合規性需求。 立即從 Microsoft Purview 合規性入口網站試用中樞開始。 瞭解 有關註冊和試用版條款的詳細數據。
建立內容搜尋之前
- 您必須是 Microsoft Purview 合規性入口網站中電子檔探索管理員角色群組的成員,才能執行本主題中所述的腳本。
- 若要收集組織中可新增至 CSV 檔案之組織中商務用 OneDrive 網站的 URL 清單,請參閱 建立組織中所有 OneDrive 位置的清單。
- 請務必將您在本主題中建立的所有檔案儲存到相同的資料夾。 這可讓您更輕鬆地執行腳本。
- 腳本包含最少的錯誤處理。 其主要目的是快速建立、報告及刪除多個內容搜尋。
- 本主題中提供的範例腳本不支援任何Microsoft標準支援計劃或服務。 範例指令碼係依「現狀」提供,不含任何種類的擔保方式。 Microsoft 另外不承擔任何明示或默示的擔保,包括但不限於適售性或適合某特定用途的默示擔保。 使用或操作範例指令碼和文件發生的所有風險,皆屬於您的責任。 Microsoft、其作者以及其他與建置、生產或交付程式碼相關的任何人在任何情況下皆完全不需對任何損失負責任,包括但不限於商業利潤損失、業務中斷、業務資訊損失、或其他錢財損失等因使用或無法使用範例指令碼或文件所發生的損失,即使 Microsoft 曾建議這些損失發生的可能性。
步驟 1:建立 CSV 檔案,其中包含您想要執行之搜尋的相關信息
您在此步驟中建立 (CSV) 檔案的逗號分隔值,包含每個想要搜尋之用戶的數據列。 如果) 及其商務用 OneDrive 網站已啟用,您可以搜尋使用者的 Exchange Online 信箱 (,其中包含封存信箱。 或者,您可以只搜尋信箱或商務用 OneDrive 網站。 您也可以搜尋 SharePoint Online 組織中的任何網站。 您在步驟 3 中執行的腳本會針對 CSV 檔案中的每個數據列建立個別的搜尋。
使用 [記事本] 將下列文字複製並貼到 .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 Cmdlet 將使用的參數, (步驟 3 中的腳本中) 建立新的內容搜尋。 每個參數名稱都是以逗號分隔。 請確定標頭數據列中沒有任何空格。 標頭數據列底下的每個數據列都代表每個搜尋的參數值。 請務必將 CSV 檔案中的佔位元數據取代為實際數據。
在 Excel 中開啟 .txt 檔案,然後使用下表中的資訊來編輯檔案,其中包含每個搜尋的資訊。
參數 | 描述 |
---|---|
ExchangeLocation |
使用者信箱的 SMTP 位址。 |
SharePointLocation |
用戶商務用 OneDrive 網站的 URL,或組織中任何網站的 URL。 針對商務用 OneDrive 網站的 URL,請使用下列格式: 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 網站上的檔,上次修改檔的日期。 |
- 將 Excel 檔案以 CSV 檔案儲存至本機電腦上的資料夾。 您在步驟 3 中建立的腳本會使用此 CSV 檔案中的資訊來建立搜尋。
步驟 2:連線到安全性 & 合規性 PowerShell
下一個步驟是連線到貴組織的安全性 & 合規性 PowerShell。 如需逐步指示,請參閱連線到安全性與合規性 PowerShell。
步驟 3:執行腳本來建立和啟動搜尋
此步驟中的腳本會針對您在步驟 1 中建立的 CSV 檔案中的每個數據列,建立個別的內容搜尋。 當您執行此文稿時,系統會提示您輸入兩個值:
搜尋群組識別 碼 - 此名稱可讓您輕鬆地組織從 CSV 檔案建立的搜尋。 每個建立的搜尋都會以搜尋群組標識元命名,然後將數位附加至搜尋名稱。 例如,如果您輸入 ContosoCase 作為搜尋群組標識碼,則搜尋會命名 為 ContosoCase_1、 ContosoCase_2、 ContosoCase_3 等。 請注意,您輸入的名稱會區分大小寫。 當您在步驟 4 和步驟 5 中使用搜尋群組標識碼時,必須使用與建立時相同的案例。
CSV 檔案 - 您在步驟 1 中建立的 CSV 檔案名稱。 請務必包含使用完整檔名、包含 .csv 擴展名;例如,
ContosoCase.csv
。
若要執行指令碼,請執行下列步驟:
使用 .ps1 的檔名後綴,將下列文字儲存至 Windows PowerShell 腳本檔案;例如,
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++ }
在 Windows PowerShell 中,移至您在上一個步驟中儲存腳本的資料夾,然後執行腳本;例如:
.\CreateSearches.ps1
在 [搜尋群組標識符] 提示字元中,輸入搜尋組名,然後按 Enter;例如,
ContosoCase
。 請記住,此名稱會區分大小寫,因此您必須在後續步驟中以相同方式輸入。在 [來源 CSV 檔案] 提示字元中,輸入 CSV 檔案的名稱,包括 .csv 擴展名;例如,
ContosoCase.csv
。按 Enter 繼續執行腳本。
腳本會顯示建立和執行搜尋的進度。 當腳本完成時,它會回到提示字元。
步驟 4:執行腳本以報告搜尋估計值
建立搜尋之後,下一個步驟是執行腳本,以顯示步驟 3 中所建立之每個搜尋的搜尋點擊數目簡單報告。 報表也包含每個搜尋的結果大小,以及所有搜尋的點擊總數和大小總計。 當您執行報告文本時,如果您想要將報表儲存至 CSV 檔案,系統會提示您輸入搜尋群組標識碼和 CSV 檔名。
使用 .ps1 的檔名後綴,將下列文字儲存至 Windows PowerShell 腳本檔案;例如,
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 }
在 Windows PowerShell 中,移至您在上一個步驟中儲存腳本的資料夾,然後執行腳本;例如:
.\SearchReport.ps1
在 [搜尋群組標識符] 提示字元中,輸入搜尋組名,然後按 Enter;例如
ContosoCase
。 請記住,此名稱會區分大小寫,因此您必須以在步驟 3 中執行腳本時的相同方式輸入。在 [檔案路徑] 將報表儲存至 CSV 檔案 (保留空白,只顯示報表) 提示中,輸入完整檔名路徑的檔名 (包括 .csv 擴展名) 如果您想要將報表儲存至 CSV 檔案。 CSV 檔案的名稱,包括 .csv 擴展名。 例如,您可以輸入
ContosoCaseReport.csv
將其儲存至當前目錄,或輸入C:\Users\admin\OneDrive for Business\ContosoCase\ContosoCaseReport.csv
將其儲存至不同的資料夾。 您也可以將提示保留空白以顯示報表,但無法將它儲存至檔案。按 Enter。
腳本會顯示建立和執行搜尋的進度。 腳本完成時,會顯示報表。
注意事項
如果相同信箱或網站指定為搜尋群組中一個以上搜尋的內容位置,則報表中的總結果會預估 (項目數和總大小) 可能包含相同項目的結果。 這是因為如果相同的電子郵件訊息或檔符合搜尋群組中不同搜尋的查詢,則會計算一次以上。
步驟 5:執行文稿以刪除搜尋
因為您可能正在建立許多搜尋,所以最後一個腳本可讓您輕鬆地快速刪除您在步驟 3 中建立的搜尋。 如同其他腳本,此腳本也會提示您輸入搜尋群組標識符。 當您執行此腳本時,會刪除搜尋名稱中具有搜尋群組標識碼的所有搜尋。
使用 .ps1 的檔名後綴,將下列文字儲存至 Windows PowerShell 腳本檔案;例如,
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 } }
在 Windows PowerShell 中,移至您在上一個步驟中儲存腳本的資料夾,然後執行腳本;例如:
.\DeleteSearches.ps1
在 [搜尋群組標識 符] 提示字元中,輸入您要刪除之搜尋的搜尋組名,然後按 Enter;例如,
ContosoCase
。 請記住,此名稱會區分大小寫,因此您必須以在步驟 3 中執行腳本時的相同方式輸入。文稿會顯示每個已刪除搜尋的名稱。