Office 365 で対象のコレクションにコンテンツ検索を使用する

Office 365 セキュリティ/コンプライアンス センター のコンテンツ検索機能は、UI では、Exchange メールボックス内の特定のフォルダーを、またはSharePoint および OneDrive for Business サイト内の特定のフォルダーを直接検索する方法を提供していません。ただし、実際の検索クエリ構文でフォルダー ID またはパスを指定することにより、特定のフォルダー (対象となるコレクションと呼ぶ) を検索することは可能です。ケースに応答するアイテムまたは特権のあるアイテムが特定のメールボックスまたはサイトのフォルダー内に存在するという確証がある場合、対象のコレクションを実行する際にコンテンツ検索を使用すると便利です。この記事に示すスクリプトを使用すれば、メールボックス フォルダーのフォルダー ID、または SharePoint および OneDrive for Business サイトのフォルダー パスを取得することができます。検索クエリ内でフォルダー ID またはパスを指定すると、フォルダー内にあるアイテムを取得することができます。

そのための手順を以下に示します。

手順 1: メールボックスまたはサイトのフォルダーの一覧を取得するためのスクリプトを実行する

手順 2: フォルダー ID またはパスを使用して対象のコレクションを実行する

追加情報

始める前に

  • 手順 1 でスクリプトを実行するには、セキュリティ/コンプライアンス センター の電子情報開示マネージャー役割グループのメンバーであることが必要です。詳細については、「Office 365 のセキュリティとコンプライアンス センターでの電子情報開示の権限を割り当てる」を参照してください。

    さらに、Exchange Online 組織のメール受信者役割が割り当てられている必要があります。これは、Get-MailboxFolderStatistics コマンドレット (手順 1 のスクリプトに含まれています) を実行する場合に必要です。既定では、メール受信者役割は、Exchange Online の組織管理役割グループと受信者の管理役割グループに割り当てられます。Exchange Online でのアクセス許可の割り当ての詳細については、「役割グループのメンバーの管理」を参照してください。また、カスタム役割グループを作成し、そのグループにメール受信者役割を割り当ててから、手順 1 のスクリプトを実行する必要のあるメンバーを追加することが可能です。詳細については、「役割グループの管理」を参照してください。

  • 手順 1 でスクリプトを実行するたびに、新しいリモート PowerShell セッションが作成されます。このため、使用できるすべてのリモート PowerShell セッションが消費されてしまう場合があります。このような状況が発生しないように、次のコマンドを実行して、アクティブなリモート PowerShell セッションを切断することができます。

    Get-PSSession | Remove-PSSession

    詳細については、「リモート PowerShell による Exchange への接続」を参照してください。

  • スクリプトには最低限のエラー処理が含まれています。スクリプトの主な目的は、対象のコレクションを実行するためのコンテンツ検索の検索クエリ構文で使用できるメールボックス フォルダー ID またはサイト パスの一覧をすばやく表示することにあります。

  • このトピックに記載されているサンプル スクリプトは、Microsoft の標準的なサポート プログラムやサービスではサポートされていません。サンプル スクリプトはいかなる保障もない現状有姿のままで提供されます。さらに、Microsoft は、商品性、特定目的への適合性を含む一切の黙示の保証をいたしかねます。本サンプル スクリプトおよびドキュメントの使用または性能に起因するすべてのリスクは、お客様が負うものとします。Microsoft、本サンプル スクリプトの作成者、および本スクリプトの作成、製造、配布に関与する者は、いかなる場合においても、本サンプル スクリプトおよびドキュメントの使用または使用不能から生じる損害 (逸失利益、事業の中断、事業情報の喪失またはその他の金銭的損失を含みますがこれらに限定されません) に関して一切責任を負いません。たとえ、Microsoft がこのような損害の可能性について知らされていた場合でも同様です。

先頭に戻る

手順 1: メールボックスまたはサイトのフォルダーの一覧を取得するスクリプトを実行する

最初の手順で実行するスクリプトは、メールボックス フォルダーか、SharePoint または OneDrive for Business フォルダーの一覧と、各フォルダーに対応するフォルダー ID またはパスを返します。このスクリプトを実行すると、次の情報を入力するよう求められます。

  • メール アドレスまたはサイト URL   Exchange のメールボックス フォルダーとフォルダー ID のリストを返す場合は、カストディアンのメール アドレスを入力します。指定したサイトのパスの一覧を返す場合は、SharePoint サイトまたは OneDrive for Business サイトの URL を入力します。次に、いくつかの例を示します。

    • Exchange   stacig@contoso.onmicrosoft.com

    • SharePoint   https://contoso.sharepoint.com/sites/marketing

    • OneDrive for Business   https://contoso-my.sharepoint.com/personal/stacig_contoso_onmicrosoft_com

  • ユーザーの資格情報   スクリプトは、ユーザーの資格情報を使って、リモート PowerShell でExchange Online および セキュリティ/コンプライアンス センター に接続します。前述したように、このスクリプトを正常に実行するには、適切なアクセス許可が割り当てられている必要があります。

メールボックス フォルダーまたはサイト パス名の一覧を表示するには

  1. ファイル名のサフィックスに .ps1 を使用して (例: GetFolderSearchParameters.ps1)、次のテキストを Windows PowerShell スクリプト ファイルに保存します。

    #########################################################################################################
    # 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 Security & Compliance Center.			#
    # 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 folder paths for the site.	#
    #    * In both cases, the script supplies the correct search properties (folderid: or path:)		#
    #      appeneded to the folder ID or path ID 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 will be 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 will be 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 Security & Complaince Center (Exchange Online Protection - EOP)
    if (!$credentials)
    {
        $credentials = Get-Credential
    }
    
    if ($addressOrSite.IndexOf("@") -ige 0)
    {
        # List the folder Ids for the target mailbox
        $emailAddress = $addressOrSite
    
        # Authenticate with Exchange Online
        if (!$ExoSession)
        {
            $ExoSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell-liveid/ -Credential $credentials -Authentication Basic -AllowRedirection
            Import-PSSession $ExoSession -AllowClobber -DisableNameChecking
        }
    
        $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"
    
        # List the folders for the SharePoint or OneDrive for Business Site
        $siteUrl = $addressOrSite
    
        # Authenticate with the Security & Complaince Center
        if (!$SccSession)
        {
            $SccSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.compliance.protection.outlook.com/powershell-liveid -Credential $credentials -Authentication Basic -AllowRedirection
            Import-PSSession $SccSession -AllowClobber -DisableNameChecking
        }
    
        # Clean-up, if the 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" -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 Complinace Search Action and wait for it to complete. The folders will be 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 "}"
                Write-Host "path:""$rawUrl"""
            }
        }
        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"
    }
  2. ローカル コンピューターで Windows PowerShell を開き、スクリプトを保存したフォルダーに移動します。

  3. 以下のようなスクリプトを実行します。

    .\GetFolderSearchParameters.ps1
  4. スクリプトで求められる情報を入力します。

    スクリプトは、指定したユーザーのメールボックス フォルダーまたはサイト フォルダーの一覧を表示します。このウィンドウを開くと、フォルダー ID またはパス名をコピーして、手順 2 の検索クエリに貼り付けることができます。

    ヒント: コンピューターの画面上にフォルダーの一覧を表示するのでなく、スクリプトの出力をテキスト ファイルにリダイレクトすることができます。このファイルは、スクリプトが置かれているフォルダーに保存されます。たとえば、スクリプトの出力をテキスト ファイルにリダイレクトするには、手順 3 で次のコマンドを実行します。.\GetFolderSearchParameters.ps1 > StacigFolderIds.txt 検索クエリで使用するファイルからフォルダー ID またはパスをコピーすることができます。

先頭に戻る

メールボックス フォルダーのスクリプト出力

メールボックス フォルダーの ID を取得する場合は、スクリプトで、リモート PowerShell を使用して Exchange Online に接続し、Get-MailboxFolderStatisics コマンドレットを実行し、指定したメールボックスのフォルダーの一覧を表示します。スクリプトは、メールボックス内のすべてのフォルダーについて、FolderPath 列にフォルダー名を表示し、FolderQuery 列にフォルダー ID を表示します。さらに、スクリプトは、folderId (メールボックス プロパティの名前) のプレフィックスをフォルダー ID に追加します。folderid プロパティは、検索可能なプロパティであるため、手順 2 の検索クエリに folderid:<folderid> を使用してそのフォルダーを検索します。

メールボックス フォルダーのスクリプトによって返される出力の例を次に示します。

スクリプトによって返されるメールボックス フォルダーとフォルダー ID の一覧の例

手順 2 の例では、ユーザーの Recoverable Items フォルダー内の Purges サブフォルダーを検索するために使用するクエリを表示します。

サイト フォルダーのスクリプトの出力

SharePoint サイトまたは OneDrive for Business サイトのパスを取得する場合は、スクリプトで、PowerShell を使って セキュリティ/コンプライアンス センター に接続し、サイトのフォルダーを検索する新しいコンテンツ検索を作成して、指定したサイトにあるフォルダーの一覧を表示します。スクリプトは、各フォルダーの名前を表示し、path のプレフィックス (サイトのプロパティの名前) をフォルダー URL に追加します。パス プロパティは検索可能なプロパティであるため、該当するフォルダーを検索するには、手順 2 の検索クエリに path:<path> を使用します。

ここでは、サイト フォルダーに対するスクリプトによって返される出力の例を示します。

スクリプトによって返されるサイト フォルダーのパス名の一覧の例

先頭に戻る

手順 2: フォルダー ID またはパスを使用して対象のコレクションを実行する

特定のユーザーのフォルダー ID またはパスの一覧を収集するスクリプトを実行したら、次に、セキュリティ/コンプライアンス センター に移動し、特定のフォルダーを検索する新しいコンテンツ検索を作成します。[コンテンツ検索] キーワード ボックスで構成する検索クエリに folderid:<folderid> プロパティまたは path:<path> プロパティを使用します (または、New-ComplianceSearch を使用する場合は、ContentMatchQuery パラメーターの値として使用)。folderid プロパティまたは path プロパティは、他の検索パラメーターまたは検索条件と組み合わせることもできます。クエリに folderid プロパティまたは path プロパティのみを指定した場合、指定したフォルダー内にあるすべてのアイテムが返されます。

  1. https://protection.office.com に移動します。

  2. 手順 1 でスクリプトを実行するために使用したアカウントと資格情報を使用して、Office 365 にサインインします。

  3. セキュリティ/コンプライアンス センター の左側のウィンドウで [検索と調査]、[コンテンツ検索] の順にクリックし、[新規] [追加] アイコン をクリックします。

  4. [新しい検索] ページで、コンテンツ検索の名前を入力します。この名前は組織内で一意にする必要があります。

  5. [どこを調べますか] で、メールボックス フォルダーまたはサイト フォルダーのどちらを検索するかに応じて、次のいずれかを実行します。

    • [検索する特定のメールボックスを選択] をクリックし、手順 1 でスクリプトを実行したときに指定したものと同じメールボックスを追加します。

      または

    • [検索する特定のサイトを選択] をクリックし、手順 1 でスクリプトを実行したときに指定したものと同じサイト URL を追加します。

  6. [次へ] をクリックします。

  7. [何をお探しですか?] ページのキーワードボックスに、手順 1 のスクリプトによって返された、folderid:<folderid> 値または path:<path> 値を貼り付けます。

    たとえば、次のスクリーン ショットのクエリは、手順 1 で示したメールボックス フォルダーのスクリーン ショットから、ユーザーの Recoverable Items フォルダーの Purges サブフォルダーにある任意のアイテムを検索します。

    フォルダー ID またはパスを検索クエリのキーワード ボックスに貼り付ける
  8. 対象のコレクションの検索を開始するには、[検索] をクリックします。

先頭に戻る

対象のコレクションの検索クエリの例

ここでは、folderid プロパティと pathプロパティをクエリに使用して、対象のコレクションを実行する例を示します。folderid:<folderid>path:<path> には、容量を節約するためにプレースホルダーを使用します。

  • この例では、3 つの異なるメールボックス フォルダーを検索します。同様のクエリ構文を使用すれば、ユーザーの Recoverable Items フォルダーにある非表示フォルダーも検索できます。

    folderid:<folderid> OR folderid:<folderid> OR folderid:<folderid>
  • この例では、メールボックス フォルダーを検索して、正確な語句が含まれるアイテムを探します。

    folderid:<folderid> AND "Contoso financial results"
  • この例では、サイト フォルダー (および任意のサブフォルダー) を検索して、タイトルに "NDA" という文字が含まれているドキュメントを探します。

    path:<path> AND filename:nda
  • この例では、サイト フォルダー (および任意のサブフォルダー) を検索して、ある日付範囲で変更が加えられているドキュメントを探します。

    path:<path> AND (lastmodifiedtime>=01/01/2017 AND lastmodifiedtime<=01/21/2017)

先頭に戻る

詳細情報

この記事に示したスクリプトを使用し、対象のコレクションを実行する場合は、次の点にご注意ください。

  • スクリプトは、結果からフォルダーを削除しません。結果に含まれる一部のフォルダーは、システムで生成されたコンテンツが含まれているために、検索できない (または 0 個のアイテムを返す) 場合があります。

  • このスクリプトは、ユーザーのプライマリ メールボックスに関するフォルダー情報のみを返します。ユーザーのアーカイブ メールボックス内のフォルダーに関する情報は返されません。

  • メールボックス フォルダーを検索する場合、指定したフォルダー (folderid プロパティで識別されたフォルダー) のみが検索されます。サブフォルダーは検索されません。サブフォルダーを検索するには、検索するサブフォルダーに対して folderid を使用する必要があります。

  • サイト フォルダーを検索する場合、フォルダー (path プロパティで識別された) とすべてのサブフォルダーが検索されます。

先頭に戻る

スキルを磨く
トレーニングの探索
新機能を最初に入手
Office Insider に参加する

この情報は役に立ちましたか?

ご意見をいただきありがとうございます。

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×