使用搜尋在電子檔探索 (預覽) 中建立目標搜尋
在電子檔探索中搜尋 (預覽) 無法直接搜尋 Exchange 信箱或 SharePoint 和 OneDrive 網站中的特定資料夾。 不過,在實際的搜尋查詢語法中,指定電子郵件或路徑的資料夾標識碼屬性 (DocumentLink) 屬性,即可在稱為 目標搜尋) (搜尋特定資料夾。 當您確信回應案例或特殊許可權專案的項目位於特定信箱或網站資料夾中時,使用搜尋來執行目標搜尋會很有用。
您可以使用本文中的腳本,針對 SharePoint 和網站上的資料夾,取得信箱資料夾的資料夾識別碼或 DocumentLink) (路徑。 然後,您可以在搜尋查詢中使用資料夾識別碼或路徑,傳回位於資料夾中的專案。
注意事項
若要傳回 SharePoint 或 OneDrive 網站中資料夾中的內容,本主題中的腳本會使用 DocumentLink Managed 屬性,而不是 Path 屬性。 DocumentLink 屬性比 Path 屬性更健全,因為它會傳回資料夾中的所有內容,而 Path 屬性不會傳回某些媒體檔案。
提示
如果您不是 E5 客戶,請使用 90 天Microsoft Purview 解決方案試用版來探索其他 Purview 功能如何協助貴組織管理數據安全性與合規性需求。 立即從 Microsoft Purview 試用中樞開始。 瞭解 有關註冊和試用版條款的詳細數據。
執行目標搜尋之前
您必須是 Microsoft Purview 入口網站中電子檔探索管理員角色群組的成員,才能在步驟 1 中執行腳本。 如需詳細資訊,請參閱指派電子文件探索權限。
您也必須獲指派 Exchange Online 組織中的郵件收件者角色。 執行腳本中包含的 Get-MailboxFolderStatistics Cmdlet 需要此專案。 根據預設,郵件收件者角色會指派給 Exchange Online 中的組織管理和收件者管理角色群組。 如需在 Exchange Online 中指派許可權的詳細資訊,請參閱管理角色群組成員。 您也可以建立自定義角色群組、將郵件收件者角色指派給該群組,然後在步驟 1 中新增需要執行腳本的成員。 如需詳細資訊,請 參閱管理角色群組。
本文中的腳本支援新式驗證。 如果您是 Microsoft 365 或Microsoft 365 GCC 組織,則可以依原樣使用腳本。 如果您是 Office 365 德國組織、Microsoft 365 GCC High 組織或Microsoft 365 DoD 組織,則必須編輯腳本才能成功執行。 具體而言,您必須編輯這一行
Connect-ExchangeOnline
,並使用 ExchangeEnvironmentName 參數 (,以及您組織類型) 連線到 Exchange Online PowerShell 的適當值。 此外,您也必須編輯這一行Connect-IPPSSession
,並使用 ConnectionUri 和 AzureADAuthorizationEndpointUri 參數 (以及您組織類型的適當值,) 連線到安全性 & 合規性 PowerShell。 如需詳細資訊,請參閱連線到 Exchange Online PowerShell 和連線到安全性 & 合規性 PowerShell 中的範例。腳本中的資料夾識別碼必須是十六進位 (HEX) 值格式。
每次執行腳本時,都會建立新的遠端 PowerShell 工作階段。 這表示您可以使用所有可供您使用的遠端 PowerShell 工作階段。 若要避免發生這種情況,請執行下列命令來中斷作用中遠端 PowerShell 工作階段的連線。
Get-PSSession | Remove-PSSession; Disconnect-ExchangeOnline
如需詳細資訊,請參閱<連線至 Exchange Online PowerShell>。
腳本包含最少的錯誤處理。 腳本的主要目的是快速顯示信箱資料夾標識碼或網站路徑清單,這些清單可用於搜尋的搜尋查詢語法,以執行目標搜尋。
在任何 Microsoft 標準支援計畫或服務下,不支援本文中提供的範例指令碼。 範例指令碼係依「現狀」提供,不含任何種類的擔保方式。 Microsoft 另外不承擔任何明示或默示的擔保,包括但不限於適售性或適合某特定用途的默示擔保。 使用或操作範例指令碼和文件發生的所有風險,皆屬於您的責任。 Microsoft、其作者以及其他與建置、生產或交付程式碼相關的任何人在任何情況下皆完全不需對任何損失負責任,包括但不限於商業利潤損失、業務中斷、業務資訊損失、或其他錢財損失等因使用或無法使用範例指令碼或文件所發生的損失,即使 Microsoft 曾建議這些損失發生的可能性。
步驟 1:執行文稿以取得信箱或網站的資料夾清單
您在第一個步驟中執行的腳本會傳回信箱資料夾或 SharePoint 和 商務用 OneDrive資料夾的清單,以及每個資料夾的對應資料夾識別碼或路徑。 當您執行此文稿時,它會提示您輸入下列資訊。
Email 位址或網站 URL:輸入監管人的電子郵件位址,以傳回 Exchange 信箱資料夾和資料夾識別碼的清單。 或輸入 SharePoint 網站或 商務用 OneDrive 網站的 URL,以傳回指定網站的路徑清單。 範例如下:
-
Exchange:
stacig@contoso.onmicrosoft.com
-
SharePoint:
https://contoso.sharepoint.com/sites/marketing
-
OneDrive:
https://contoso-my.sharepoint.com/personal/stacig_contoso_onmicrosoft_com
-
Exchange:
您的使用者認證:腳本會使用您的認證來連線至使用新式驗證 Exchange Online PowerShell 或安全性 & 合規性 PowerShell。 如先前所述,您必須獲指派適當的許可權,才能成功執行此腳本。
若要顯示信箱資料夾或網站文件連結的清單, (路徑) 名稱:
使用 .ps1 的檔案名後綴,將下列文字儲存至 Windows PowerShell 文稿檔案;例如
GetFolderSearchParameters.ps1
######################################################################################################### # This PowerShell script will prompt you for: # # * Admin credentials for a user who can run the Get-MailboxFolderStatistics cmdlet in Exchange # # Online and who is an eDiscovery Manager in the Microsoft Purview portal. # # The script will then: # # * If an email address is supplied: list the folders for the target mailbox. # # * If a SharePoint or OneDrive for Business site is supplied: list the documentlinks (folder paths) # # * for the site. # # * In both cases, the script supplies the correct search properties (folderid: or documentlink:) # # appended to the folder ID or documentlink to use in a Content Search. # # Notes: # # * For SharePoint and OneDrive for Business, the paths are searched recursively; this means the # # the current folder and all sub-folders are searched. # # * For Exchange, only the specified folder is searched; this means sub-folders in the folder # # will not be searched. To search sub-folders, you need to use the specify the folder ID for # # each sub-folder that you want to search. # # * For Exchange, only folders in the user's primary mailbox are returned by the script. # ######################################################################################################### # Collect the target email address or SharePoint Url $addressOrSite = Read-Host "Enter an email address or a URL for a SharePoint or OneDrive for Business site" # Authenticate with Exchange Online and the Microsoft Purview portal (Exchange Online Protection - EOP) if ($addressOrSite.IndexOf("@") -ige 0) { # List the folder Ids for the target mailbox $emailAddress = $addressOrSite # Connect to Exchange Online PowerShell if (!$ExoSession) { Import-Module ExchangeOnlineManagement Connect-ExchangeOnline -ShowBanner:$false -CommandName Get-MailboxFolderStatistics } $folderQueries = @() $folderStatistics = Get-MailboxFolderStatistics $emailAddress foreach ($folderStatistic in $folderStatistics) { $folderId = $folderStatistic.FolderId; $folderPath = $folderStatistic.FolderPath; $encoding= [System.Text.Encoding]::GetEncoding("us-ascii") $nibbler= $encoding.GetBytes("0123456789ABCDEF"); $folderIdBytes = [Convert]::FromBase64String($folderId); $indexIdBytes = New-Object byte[] 48; $indexIdIdx=0; $folderIdBytes | select -skip 23 -First 24 | %{$indexIdBytes[$indexIdIdx++]=$nibbler[$_ -shr 4];$indexIdBytes[$indexIdIdx++]=$nibbler[$_ -band 0xF]} $folderQuery = "folderid:$($encoding.GetString($indexIdBytes))"; $folderStat = New-Object PSObject Add-Member -InputObject $folderStat -MemberType NoteProperty -Name FolderPath -Value $folderPath Add-Member -InputObject $folderStat -MemberType NoteProperty -Name FolderQuery -Value $folderQuery $folderQueries += $folderStat } Write-Host "-----Exchange Folders-----" $folderQueries |ft } elseif ($addressOrSite.IndexOf("http") -ige 0) { $searchName = "SPFoldersSearch" $searchActionName = "SPFoldersSearch_Preview" $rawUrls = @() # List the folders for the SharePoint or OneDrive for Business Site $siteUrl = $addressOrSite # Connect to Security & Compliance PowerShell if (!$SccSession) { Import-Module ExchangeOnlineManagement Connect-IPPSSession } # Clean-up, if the script was aborted, the search we created might not have been deleted. Try to do so now. Remove-ComplianceSearch $searchName -Confirm:$false -ErrorAction 'SilentlyContinue' # Create a Content Search against the SharePoint Site or OneDrive for Business site and only search for folders; wait for the search to complete $complianceSearch = New-ComplianceSearch -Name $searchName -ContentMatchQuery "contenttype:folder OR contentclass:STS_Web" -SharePointLocation $siteUrl Start-ComplianceSearch $searchName do{ Write-host "Waiting for search to complete..." Start-Sleep -s 5 $complianceSearch = Get-ComplianceSearch $searchName }while ($complianceSearch.Status -ne 'Completed') if ($complianceSearch.Items -gt 0) { # Create a Compliance Search Action and wait for it to complete. The folders are listed in the .Results parameter $complianceSearchAction = New-ComplianceSearchAction -SearchName $searchName -Preview do { Write-host "Waiting for search action to complete..." Start-Sleep -s 5 $complianceSearchAction = Get-ComplianceSearchAction $searchActionName }while ($complianceSearchAction.Status -ne 'Completed') # Get the results and print out the folders $results = $complianceSearchAction.Results $matches = Select-String "Data Link:.+[,}]" -Input $results -AllMatches foreach ($match in $matches.Matches) { $rawUrl = $match.Value $rawUrl = $rawUrl -replace "Data Link: " -replace "," -replace "}" $rawUrls += "DocumentLink:""$rawUrl""" } $rawUrls |ft } else { Write-Host "No folders were found for $siteUrl" } Remove-ComplianceSearch $searchName -Confirm:$false -ErrorAction 'SilentlyContinue' } else { Write-Error "Couldn't recognize $addressOrSite as an email address or a site URL" }
在本機計算機上開啟 Windows PowerShell,然後移至您儲存腳本的資料夾。
執行腳本;例如:
.\GetFolderSearchParameters.ps1
輸入文稿提示您的資訊。
文稿會顯示指定使用者的信箱資料夾或網站資料夾清單。 讓此視窗保持開啟,讓您可以複製資料夾識別碼或文件連結名稱,並將它貼到步驟 2 中的搜尋查詢。
提示
您可以將文稿的輸出重新導向文字檔,而不是在電腦畫面上顯示資料夾清單。 此檔案會儲存至腳本所在的資料夾。 例如,若要將腳本輸出重新導向至文本檔,請在步驟 3 中執行下列命令:
.\GetFolderSearchParameters.ps1 > StacigFolderIds.txt
然後您可以從檔案複製資料夾識別碼或文件連結,以便在搜尋查詢中使用。
信箱資料夾的腳本輸出
如果您收到信箱資料夾標識碼,腳本會連線到 Exchange Online PowerShell、執行 Get-MailboxFolderStatisics Cmdlet,然後顯示指定信箱中的資料夾清單。 針對信箱中的每個資料夾,腳本會顯示 FolderPath 資料資料行中的資料夾名稱,以及 FolderQuery資料 行中的資料夾識別碼。 此外,腳本會將 folderId (的前置詞,也就是) 至資料夾標識碼的信箱屬性名稱。 因為 folderid 屬性是可搜尋的屬性,所以您將在步驟 2 的搜尋查詢中使用 folderid:<folderid>
來搜尋該資料夾。
重要事項
本文中的腳本包含編碼邏輯,可將 Get-MailboxFolderStatistics 傳回的 64 個字元資料夾識別碼值轉換成索引搜尋的相同 48 個字元格式。 如果您只在 PowerShell 中執行 Get-MailboxFolderStatistics Cmdlet 來取得資料夾識別碼 (,而不是在本文中執行腳本) ,則使用該資料夾標識碼值的搜尋查詢將會失敗。 您必須執行文稿,才能取得可在內容搜尋中使用的正確格式資料夾識別碼。
以下是腳本針對信箱資料夾所傳回的輸出範例。
步驟 2 中的範例顯示用來搜尋使用者 [可復原的專案] 資料夾中 [清除] 子資料夾的查詢。
月臺資料夾的腳本輸出
如果您要從 SharePoint 或 OneDrive 網站取得 documentlink 屬性的路徑,腳本會連線到安全性 & 合規性 PowerShell、建立新的內容搜尋來搜尋網站中的文件夾,然後顯示位於指定網站的資料夾清單。 腳本會顯示每個資料夾的名稱,並將 文件連結 的前置詞新增至資料夾 URL。 因為 documentlink 屬性是可搜尋的屬性,所以您會在步驟 2 的搜尋查詢中使用 documentlink:<path>
property:value 組來搜尋該資料夾。 文本最多會顯示 100 個網站資料夾。 如果有超過 100 個網站資料夾,則會顯示最新的資料夾。
以下是月臺資料夾的腳本所傳回的輸出範例。
從多個信箱提取 FolderID 的腳本
如果您需要在 Excel 中將 FolderID 轉換的結果分組並排序,請完成下列步驟,為個別使用者啟用檢視多個已刪除資料夾的功能:
建立名為
Users_GatherFolderIDs
的 .csv 檔案,其數據行標題為 UserSMTP。針對您要轉換成資料夾查詢語法的任何信箱資料夾,以資料列輸入使用者電子郵件位址。
使用 .ps1 的檔名後綴,將下列文字儲存至 Windows PowerShell 腳本檔案;例如,
GetMultiUserFolderIDseDiscovery.ps1
######################################################################################################### #This Sample Code is provided for the purpose of illustration only and is not intended to be used in a production environment. #THIS SAMPLE CODE AND ANY RELATED INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS OR A PARTICULAR PURPOSE. #We grant You a nonexclusive, royalty-free right to use and modify the Sample Code and to reproduce and distribute the object code form of the Sample Code, provided that You agree: # (1) to not use Our name, logo, or trademarks to market Your software product in which the Sample Code is embedded; # (2) to include a valid copyright notice on Your software product in which the Sample Code is embedded; and # (3) to indemnify, hold harmless, and defend Us and Our suppliers from and against any claims or lawsuits, including attorney's fees, that arise or result from the use or distribution of the Sample Code. ######################################################################################################### " " write-host "***********************************************" write-host "Security & Compliance Center " -foregroundColor yellow -backgroundcolor darkgreen write-host "eDiscovery cases - FolderID 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).' $inputPath = $Path + '\' + 'Users_GatherFolderIDs.csv' $outputpath = $Path + '\' + 'FileID Report' + ' ' + $time + '.csv' #Imports list of users #User List needs column "UserSMTP" with values of each mailbox's SMTP address. $users = Import-CSV $inputPath function add-tofolderidreport { Param( [string]$UserEmail, [String]$FolderName, [String]$FolderID, [String]$ConvertedFolderQuery ) $addRow = New-Object PSObject Add-Member -InputObject $addRow -MemberType NoteProperty -Name "User Email" -Value $useremail Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Folder Name" -Value $FolderName Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Native Folder ID" -Value $FolderID Add-Member -InputObject $addRow -MemberType NoteProperty -Name "Converted Folder Query" -Value $ConvertedFolderQuery $folderIDReport = $addRow | Select-Object "User Email", "Folder Name", "Native Folder ID", "Converted Folder Query" $folderIDReport | export-csv -path $outputPath -notypeinfo -append -Encoding ascii } #get information on the cases and pass values to the FolderID report function foreach ($u in $users) { $userAddress = $u.UserSMTP " " write-host "Gathering list of Folders for User:" $userAddress -ForegroundColor Yellow -BackgroundColor Black " " if ($userAddress.IndexOf("@") -ige 0) { # List the folder Ids for the target mailbox $emailAddress = $userAddress # Connect to Exchange Online PowerShell $folderQueries = @() $folderStatistics = Get-MailboxFolderStatistics $emailAddress -IncludeSoftDeletedRecipients foreach ($folderStatistic in $folderStatistics) { $folderId = $folderStatistic.FolderId; $folderPath = $folderStatistic.FolderPath; $encoding = [System.Text.Encoding]::GetEncoding("us-ascii") $nibbler = $encoding.GetBytes("0123456789ABCDEF"); $folderIdBytes = [Convert]::FromBase64String($folderId); $indexIdBytes = New-Object byte[] 48; $indexIdIdx = 0; $folderIdBytes | select -skip 23 -First 24 | % { $indexIdBytes[$indexIdIdx++] = $nibbler[$_ -shr 4]; $indexIdBytes[$indexIdIdx++] = $nibbler[$_ -band 0xF] } $folderQuery = "folderid:$($encoding.GetString($indexIdBytes))"; $folderStat = New-Object PSObject Add-Member -InputObject $folderStat -MemberType NoteProperty -Name FolderPath -Value $folderPath Add-Member -InputObject $folderStat -MemberType NoteProperty -Name FolderQuery -Value $folderQuery $folderQueries += $folderStat #add information to Report add-tofolderidreport -UserEmail $emailAddress -FolderName $folderPath -FolderID $folderId -ConvertedFolderQuery $folderQuery } #Outputs Exchange Folders for Single User Write-Host "-----Exchange Folders-----" -ForegroundColor Yellow $folderQueries | ft } } #Provides Path of Report " " Write-Host "----- Report Output Available at:" "$outputpath" " -----" -ForegroundColor Yellow -BackgroundColor Cyan " "
在本機計算機上開啟 Windows PowerShell,然後移至您儲存腳本的資料夾。 執行文稿檔案
GetMultiUserFolderIDseDiscovery.ps1
。輸入您儲存 UsersGatherFolderIDs.csv檔案的檔案 夾路徑。
文稿會顯示指定使用者的信箱資料夾或網站資料夾清單。 它也會在步驟 4 中指定的相同根資料夾中建立報表。
步驟 2:使用資料夾識別碼或文件連結來執行目標搜尋
執行腳本以收集特定使用者的資料夾標識碼或文件連結清單之後,下一個步驟是移至 Microsoft Purview 入口網站並建立新案例,並搜尋查詢搜尋特定資料夾。 如果使用 New-ComplianceSearch Cmdlet (,則您會在使用 Keyword 查詢語言 (KeyQL) 索引卷標 (設定的搜尋查詢中使用 folderid:<folderid>
or documentlink:<path>
property:value 組,或使用 New-ComplianceSearch Cmdlet) 做為 ContentMatchQuery 參數的值。 您可以將 或 documentlink
屬性與其他搜尋參數或搜尋條件結合folderid
。 如果您只在查詢中包含 folderid
或 documentlink
屬性,則搜尋會傳回位於指定資料夾中的所有專案。
移至 Microsoft Purview 入口網站,然後使用您在步驟 1 中用來執行腳本的帳戶和認證登入。
在 [關鍵詞查詢語言 (KeyQL) ] 索引標籤中,貼上
folderid:<folderid>
步驟 1 中腳本所傳回的 或documentlink:<path>/*
值。重要事項
檔案連結搜尋需要使用尾端 。
asterisk '/*'
執行搜尋。
目標搜尋的搜尋查詢範例
以下是在搜尋查詢中使用 folderid
和 documentlink
屬性來執行目標搜尋的一些範例。 佔位元用於 folderid:<folderid>
和 documentlink:<path>
,以節省空間。
此範例會搜尋三個不同的信箱資料夾。 您可以使用類似的查詢語法來搜尋使用者 [可復原的專案] 資料夾中的隱藏資料夾。
folderid:<folderid> OR folderid:<folderid> OR folderid:<folderid>
此範例會在信箱資料夾中搜尋包含確切片語的專案。
folderid:<folderid> AND "Contoso financial results"
本範例會搜尋網站資料夾 (和任何子資料夾) 標題中包含字母 「NDA」 的檔。
documentlink:"<path>/*" AND filename:nda
本範例會搜尋網站資料夾 (和任何子資料夾) ,以尋找日期範圍內已變更的檔。
documentlink:"<path>/*" AND (lastmodifiedtime>=01/01/2024 AND lastmodifiedtime<=01/21/2024)
其他相關資訊
使用本文中的腳本來執行搜尋時,請記住下列事項。
- 腳本不會從結果中移除任何資料夾。 因此,結果中列出的某些資料夾可能無法搜尋 (或傳回零個專案) ,因為它們包含系統產生的內容,或因為它們只包含子資料夾而非信箱專案。
- 此文稿只會傳回使用者主要信箱的資料夾資訊。 它不會傳回使用者封存信箱中資料夾的相關信息。 若要傳回使用者封存信箱中資料夾的相關信息,您可以編輯腳本。 若要這樣做,請將行
$folderStatistics = Get-MailboxFolderStatistics $emailAddress
變更為$folderStatistics = Get-MailboxFolderStatistics $emailAddress -Archive
,然後儲存並執行已編輯的腳本。 這項變更會傳回使用者封存信箱中資料夾和子資料夾的識別碼。 若要搜尋整個封存信箱,您可以在搜尋查詢中連接所有資料夾識別碼屬性:值組與OR
運算符。 - 搜尋信箱資料夾時,只會搜尋其
folderid
屬性) 識別的指定資料夾 (;不會搜尋子資料夾。 若要搜尋子資料夾,您必須針對要搜尋的子資料夾使用資料夾識別碼。 - 搜尋網站資料夾時,會搜尋其
documentlink
屬性) 和所有子資料夾所識別的資料夾 (。 - 匯出您只在搜尋查詢中指定
folderid
屬性的搜尋結果時,您可以選擇第一個匯出選項「符合搜尋查詢的索引專案」。不論其編製索引狀態為何,都會導出資料夾中的所有專案,因為資料夾標識碼一律會編製索引。