PowerShellでMicrosoft PurviewのeDiscoveryを一括実行する方法

PowerShellを活用することで、Microsoft Purview(旧称 Security & Compliance)のeDiscovery機能を一括で効率的に実行することが可能です。eDiscoveryは、法的な調査やコンプライアンス対応のために重要な電子データを収集、保全、分析する機能です。しかし、手動での操作は時間がかかり、特に複数の検索やケースが絡む場合には非効率的です。本記事では、PowerShellを使った一括処理の方法を具体的に解説し、作業の効率化と正確性向上を目指します。初心者から実務で活用する方まで、分かりやすく説明します。

目次

Microsoft PurviewとeDiscoveryの基本概要


Microsoft Purviewは、組織のデータガバナンスとコンプライアンスを支援する包括的なクラウドプラットフォームで、特に情報保護や監査、データ検索機能を提供します。その中でも、eDiscovery(電子情報開示)は、法的調査やコンプライアンス対応に必要なデータを効率的に検索、保全、エクスポートするための重要な機能です。

eDiscoveryの役割


eDiscoveryは、以下のような状況で活用されます:

  • 法的調査:訴訟対応に必要な電子データを収集。
  • 内部監査:セキュリティやポリシー違反の確認。
  • 規制遵守:GDPRやSOX法などの規制に対応。

eDiscoveryの機能

  • 検索:メール、チャット、ファイルなど、さまざまなデータソースを横断的に検索可能。
  • 保全:特定のデータを削除や変更から保護。
  • エクスポート:調査や報告用にデータを適切な形式でエクスポート。

PowerShellとeDiscoveryの連携の利点


PowerShellを活用することで、以下のようなメリットがあります:

  • 効率化:一括処理により手作業を削減。
  • 自動化:定期的な検索やレポート作成をスクリプト化。
  • 柔軟性:カスタム条件を簡単に適用可能。

この基本知識を押さえることで、次章で説明するeDiscoveryの要件や具体的な操作にスムーズに取り組むことができます。

eDiscoveryの要件とPowerShellの環境設定

Microsoft PurviewのeDiscovery機能をPowerShellで使用するためには、いくつかの要件を満たす必要があります。また、スムーズに操作を進めるための環境設定も重要です。ここでは、それらの要件と環境設定手順について詳しく解説します。

eDiscoveryの要件


Microsoft PurviewでeDiscoveryを使用するために必要な条件は以下の通りです:

  • ライセンス要件:Microsoft 365 E3/E5 または対応するコンプライアンスアドオンライセンスが必要。
  • 管理者権限:eDiscovery Manager または eDiscovery Administrator のロールが付与されている必要がある。
  • 対象データの範囲:Exchange Online、SharePoint Online、Teamsなどが対象。

PowerShellの環境設定


PowerShellを使用してeDiscoveryを操作するための準備手順を以下に説明します。

1. 必要なモジュールのインストール


Microsoft Purview関連の操作を行うには、「Exchange Online Management モジュール」が必要です。以下のコマンドをPowerShellで実行してインストールします:

Install-Module -Name ExchangeOnlineManagement

2. PowerShellセッションの開始


Microsoft 365環境に接続するため、以下のコマンドを実行します:

Connect-ExchangeOnline -UserPrincipalName <あなたのメールアドレス>

3. eDiscovery権限の確認


eDiscoveryを操作するには、以下のコマンドで現在の権限を確認し、必要に応じて管理者にロールの付与を依頼します:

Get-ManagementRoleAssignment -Role "eDiscovery Manager"

4. スクリプト実行ポリシーの設定


ローカルで作成したスクリプトを実行する場合、スクリプト実行ポリシーを変更する必要があります:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

事前確認の重要性


環境設定後は、簡単なコマンドで接続が正しく行えるか確認してください。例えば、以下のコマンドで現在のメールボックス情報を取得できます:

Get-Mailbox -ResultSize 5

これらの要件と設定を整えることで、eDiscoveryのスムーズな操作が可能になります。次章では、具体的なスクリプトの構成要素について解説します。

eDiscoveryスクリプトの構成要素の詳細解説

PowerShellを使用してeDiscoveryを一括実行するスクリプトでは、いくつかの主要な構成要素があります。これらを理解することで、スクリプトの作成とカスタマイズが容易になります。以下では、それぞれの構成要素について詳しく解説します。

1. 認証と接続


eDiscoveryを実行するには、Exchange Onlineに接続し、適切な権限を認証する必要があります。このセクションでは、以下のコードを使用します:

# Exchange Onlineに接続
Connect-ExchangeOnline -UserPrincipalName <ユーザー名>

このコードは、Microsoft 365環境に接続し、必要な操作権限を付与します。

2. eDiscoveryケースの作成または選択


eDiscoveryでは、検索を実行するケースが必要です。既存のケースを利用する場合、以下のコマンドを使用してケース名を取得します:

# 既存のeDiscoveryケースの一覧を取得
Get-ComplianceCase

新しいケースを作成する場合は、以下のコマンドを使用します:

# eDiscoveryケースを作成
New-ComplianceCase -Name "新しいケース名"

3. 検索条件の設定


検索条件は、特定のデータを対象に絞り込むための重要な構成要素です。以下のような条件を設定できます:

  • 日付範囲:指定された期間内のデータのみを対象とする。
  • 送信者/受信者:特定のユーザーを対象とする。
  • キーワード:特定の単語やフレーズを含むデータを対象とする。

具体例:

# eDiscovery検索の設定
New-ComplianceSearch -Name "検索名" `
  -ExchangeLocation "メールボックス1","メールボックス2" `
  -ContentMatchQuery 'subject:"重要なプロジェクト" AND received>=2023-01-01 AND received<=2023-12-31'

4. 一括実行のロジック


複数の検索を一括で実行するには、ループ処理を使用します。例として、複数のメールボックスを対象に検索を実行するスクリプトを示します:

# メールボックスリスト
$mailboxes = @("[email protected]", "[email protected]", "[email protected]")

# 各メールボックスに対して検索を実行
foreach ($mailbox in $mailboxes) {
    New-ComplianceSearch -Name "検索_$mailbox" `
      -ExchangeLocation $mailbox `
      -ContentMatchQuery 'subject:"機密情報"'
}

5. 結果のエクスポート


検索結果をエクスポートするには、以下のコマンドを使用します:

# 検索結果のエクスポート
Start-ComplianceSearchAction -SearchName "検索名" -Export

6. ログとエラー処理


スクリプトの実行中にエラーが発生した場合でも、後から原因を調査できるように、エラーログを記録する仕組みを組み込むことが推奨されます:

try {
    # eDiscovery検索の実行
    New-ComplianceSearch -Name "検索名" -ExchangeLocation "すべて" -ContentMatchQuery "キーワード"
} catch {
    # エラーをログに記録
    Out-File -FilePath "エラーログ.txt" -InputObject $_.Exception.Message -Append
}

これらの構成要素を組み合わせることで、eDiscoveryの一括実行スクリプトを柔軟に作成できます。次章では、具体的なスクリプトを作成して実行する手順を解説します。

PowerShellを用いた認証と権限の付与手順

eDiscoveryをPowerShellで操作するには、正しい認証情報と必要な権限を設定することが不可欠です。この章では、Microsoft 365環境に接続し、eDiscoveryを実行するための権限を確認・付与する手順について詳しく説明します。

1. Exchange Onlineへの接続


eDiscoveryを操作する最初のステップは、Microsoft Exchange Onlineに接続することです。以下の手順で接続します:

# Exchange Onlineへの接続
Connect-ExchangeOnline -UserPrincipalName <あなたのメールアドレス>

補足:接続エラー時の対処


接続中にエラーが発生した場合、以下を確認してください:

  • メールアドレスの入力ミスがないか確認。
  • 多要素認証(MFA)が有効な場合、専用のアプリパスワードを使用。
  • Exchange Online Managementモジュールが正しくインストールされているか確認:
  Install-Module -Name ExchangeOnlineManagement

2. 必要な権限の確認と付与


eDiscovery操作には、特定の管理ロールが必要です。以下のコマンドを実行して、自分の権限を確認します:

# 現在のロールを確認
Get-ManagementRoleAssignment -RoleAssignee "<あなたのユーザー名>"

eDiscoveryに必要なロール


以下のいずれかのロールが必要です:

  • eDiscovery Manager
  • eDiscovery Administrator

権限が不足している場合、グローバル管理者に依頼してロールを追加します。追加は次のコマンドで行います:

# eDiscovery Managerロールを追加
Add-RoleGroupMember -Identity "eDiscovery Manager" -Member "<ユーザー名>"

3. Azure ADモジュールの使用(必要に応じて)


場合によってはAzure ADモジュールを利用して、権限やユーザー情報を管理する必要があります。以下の手順でモジュールをインストールし、Azure環境に接続します:

# Azure ADモジュールのインストール
Install-Module -Name AzureAD

# Azure ADへの接続
Connect-AzureAD

4. 接続確認


正しく接続され、権限が適用されているかを確認するには、簡単なeDiscovery操作を試します:

# eDiscoveryケースのリストを取得
Get-ComplianceCase

このコマンドが成功すれば、正しく認証と権限設定が完了しています。

5. 自動化のための認証トークン管理(応用)


定期的なスクリプト実行のために、サービスアカウントを利用し、認証情報をスクリプト内に保存することも可能です:

# 認証情報を保存
$Credentials = Get-Credential

# 認証情報を利用して接続
Connect-ExchangeOnline -Credential $Credentials

これらの手順を実行することで、PowerShellによるeDiscovery操作の準備が整います。次章では、eDiscoveryを一括で実行するスクリプトの作成手順について解説します。

一括eDiscovery実行のPowerShellスクリプトの作成

Microsoft PurviewのeDiscoveryを一括実行するには、PowerShellを用いて効率的なスクリプトを作成します。この章では、スクリプト全体の構成とその実装について具体的に説明します。

1. スクリプトの全体構成


以下は、一括eDiscovery実行スクリプトの基本構成です:

  1. 認証と接続
  2. 検索対象(メールボックスやTeamsチャットなど)の定義
  3. 検索条件の設定
  4. 検索の実行
  5. 結果のエクスポート

2. スクリプト例


以下に、複数のメールボックスを対象にeDiscoveryを実行するスクリプトの例を示します。

# Exchange Online接続
Write-Host "Exchange Onlineに接続中..." -ForegroundColor Green
Connect-ExchangeOnline -UserPrincipalName "[email protected]"

# 検索対象のメールボックスリスト
$mailboxes = @("[email protected]", "[email protected]", "[email protected]")

# 一括eDiscoveryのループ処理
foreach ($mailbox in $mailboxes) {
    # eDiscoveryケース名を定義
    $caseName = "eDiscovery_Case_" + $mailbox
    # 検索名を定義
    $searchName = "Search_" + $mailbox

    Write-Host "ケース作成中: $caseName" -ForegroundColor Yellow
    # eDiscoveryケース作成
    try {
        New-ComplianceCase -Name $caseName -ErrorAction Stop
    } catch {
        Write-Host "ケース作成時のエラー: $_" -ForegroundColor Red
    }

    Write-Host "検索作成中: $searchName" -ForegroundColor Yellow
    # 検索の設定と作成
    try {
        New-ComplianceSearch -Name $searchName `
            -ExchangeLocation $mailbox `
            -ContentMatchQuery 'subject:"重要" AND received>=2023-01-01'
    } catch {
        Write-Host "検索作成時のエラー: $_" -ForegroundColor Red
    }

    # 検索の実行
    Write-Host "検索を開始します: $searchName" -ForegroundColor Cyan
    try {
        Start-ComplianceSearch -Identity $searchName
    } catch {
        Write-Host "検索開始時のエラー: $_" -ForegroundColor Red
    }
}

# 接続解除
Disconnect-ExchangeOnline -Confirm:$false
Write-Host "スクリプト実行完了。" -ForegroundColor Green

3. スクリプトの説明

認証と接続


スクリプトの冒頭で Connect-ExchangeOnline を使用し、Exchange Online環境に接続します。

検索対象の設定


$mailboxes 配列で、検索対象のメールボックスを定義しています。複数のメールボックスを対象にすることで一括実行を可能にします。

検索条件の設定


New-ComplianceSearch コマンドを使用して検索条件を設定します。
例: 特定の件名(subject)や日付範囲で絞り込み。

検索の実行


Start-ComplianceSearch コマンドで、作成した検索を実行します。

エラーハンドリング


try-catch 構文を用いて、各ステップでエラーが発生した場合でも、スクリプト全体が中断しないようにしています。

4. 実行結果の確認


スクリプト実行後、以下のコマンドで検索のステータスを確認できます:

# 検索のステータス確認
Get-ComplianceSearch

5. 応用例

  • フィルタリング条件を動的に変更する場合、スクリプト内で条件を生成するロジックを追加できます。
  • スケジュールタスクを使用して、このスクリプトを定期的に実行することも可能です。

次章では、実行結果の確認方法とログの取得について詳しく解説します。

実行結果の確認とログの取得方法

PowerShellでeDiscoveryを実行した後、実行結果を確認し、必要に応じてログを取得することは非常に重要です。この章では、検索のステータス確認やログの保存、エクスポートの方法について詳しく解説します。

1. 検索のステータス確認

検索の実行状況や結果を確認するには、Get-ComplianceSearch コマンドを使用します。
以下は、検索ステータスを確認する手順です:

# 実行中または完了した検索のリストを取得
Get-ComplianceSearch

このコマンドにより、以下の情報を含むリストが表示されます:

  • Name:検索名
  • Status:検索の状態(e.g., NotStarted, Running, Completed, Failed)
  • Items:検索結果のアイテム数
  • Errors:エラーの有無

詳細な検索結果を確認する方法


特定の検索結果を詳しく確認する場合は、次のコマンドを使用します:

# 特定の検索結果の詳細を表示
Get-ComplianceSearch -Identity "検索名" | Format-List

ここでは、検索条件、検索対象、結果数などの詳細情報が確認できます。


2. 検索結果のエクスポート

検索結果をエクスポートすることで、外部での分析や報告が可能になります。以下の手順でエクスポートを実行します:

エクスポートの開始

# 検索結果をエクスポート
Start-ComplianceSearchAction -SearchName "検索名" -Export

エクスポートが開始されると、検索の状態が更新されます。

エクスポートリンクの取得


エクスポートが完了したら、次のコマンドでダウンロードリンクを取得します:

# エクスポートリンクを取得
Get-ComplianceSearchAction -SearchName "検索名" -Action Export | Select-Object -Property ExportFileUri

このリンクをブラウザで開くと、検索結果をダウンロードできます。


3. ログの保存

スクリプトの実行中に発生するエラーや進捗を記録するために、ログを保存することを推奨します。以下は、ログ記録の例です:

エラーのログ保存

try {
    # 検索を実行
    Start-ComplianceSearch -Identity "検索名"
} catch {
    # エラーメッセージをログに記録
    Out-File -FilePath "ErrorLog.txt" -InputObject $_.Exception.Message -Append
}

実行履歴の保存


スクリプトの実行状況を記録するには、以下のように進捗をログに出力します:

# 実行履歴を記録
"検索名: Search1 実行開始 - $(Get-Date)" | Out-File -FilePath "ExecutionLog.txt" -Append

4. トラブルシューティングの補助情報

一般的なエラーの確認


Get-ComplianceSearch または Get-ComplianceSearchAction で、エラーの詳細を確認できます。

# エラー詳細を表示
Get-ComplianceSearch -Identity "検索名" | Format-List Errors

対処方法の例

  • 権限エラー:管理者に権限の追加を依頼。
  • 接続エラー:再接続を試行、または認証情報を確認。

これらの手順を実行することで、eDiscoveryの結果を効率的に管理し、必要に応じて外部にエクスポートできます。次章では、eDiscovery実行中に発生する一般的な問題とその解決方法について解説します。

トラブルシューティング:よくあるエラーとその対処法

PowerShellでMicrosoft PurviewのeDiscoveryを実行する際には、さまざまなエラーや問題が発生する可能性があります。この章では、一般的なエラーの原因とその解決策を詳しく解説します。

1. 接続に関するエラー

エラー例:

The term 'Connect-ExchangeOnline' is not recognized as the name of a cmdlet.

原因:


Exchange Online Managementモジュールがインストールされていない、または正しくインポートされていない場合に発生します。

解決策:


以下のコマンドでモジュールをインストールし、インポートします:

Install-Module -Name ExchangeOnlineManagement
Import-Module ExchangeOnlineManagement

2. 権限に関するエラー

エラー例:

You don't have sufficient permissions to perform this operation.

原因:


ユーザーにeDiscovery ManagerまたはeDiscovery Administratorの権限が付与されていない。

解決策:


管理者に依頼して権限を確認・追加してもらいます。ロールを確認するには以下のコマンドを使用します:

Get-ManagementRoleAssignment -RoleAssignee "<ユーザー名>"

権限を追加する場合:

Add-RoleGroupMember -Identity "eDiscovery Manager" -Member "<ユーザー名>"

3. 検索実行時のエラー

エラー例:

The search name already exists.

原因:


指定した検索名が既に存在しています。

解決策:


検索名が一意になるように変更してください。スクリプト内で日時やインデックスを付加すると便利です:

$searchName = "Search_" + (Get-Date -Format "yyyyMMdd_HHmmss")

4. エクスポートに関するエラー

エラー例:

Export failed due to insufficient storage space.

原因:


検索結果が大きすぎる場合やエクスポート先のストレージ容量が不足している場合に発生します。

解決策:

  • 検索条件を絞り込み、データ量を減らします。
  • ストレージを増やす、または外部ストレージを活用します。

検索条件の例:

New-ComplianceSearch -Name "Search_Limited" `
  -ContentMatchQuery 'subject:"重要" AND received>=2023-01-01 AND received<=2023-12-31'

5. スクリプトの実行ポリシーに関するエラー

エラー例:

File cannot be loaded because running scripts is disabled on this system.

原因:


スクリプトの実行ポリシーが制限されている。

解決策:


一時的にスクリプトの実行ポリシーを緩和します:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

6. その他の一般的な問題

問題:スクリプトが途中で中断する

  • 原因:特定のケースでエラーが発生したため。
  • 解決策:スクリプトにエラーハンドリングを追加します:
  try {
      # 検索を実行
      Start-ComplianceSearch -Identity "検索名"
  } catch {
      Write-Host "エラーが発生しました: $_" -ForegroundColor Red
      Out-File -FilePath "ErrorLog.txt" -InputObject $_.Exception.Message -Append
  }

7. トラブルシューティングに役立つリソース

  Get-Help <コマンド名> -Detailed

これらの対策を活用し、eDiscoveryの実行中に発生する問題を迅速に解決できます。次章では、応用例や高度な検索条件の活用方法について解説します。

応用例:フィルタリングや高度な検索条件の活用

Microsoft PurviewのeDiscoveryでは、単純な検索条件だけでなく、高度なフィルタリングやカスタム条件を活用することで、より効率的に必要なデータを抽出できます。この章では、具体的な応用例とその実装方法を解説します。

1. 特定の条件に基づく高度な検索

eDiscoveryでは、以下のような条件を組み合わせて高度な検索が可能です:

条件の例

  • 日付範囲:特定の期間内に送受信されたデータ。
  • 特定のキーワード:件名や本文に含まれる重要な単語。
  • 送信者/受信者:特定の人物が関わるやり取り。

PowerShellスクリプト例


以下は、複数条件を組み合わせた検索の例です:

# 高度な検索条件を使用したeDiscovery検索の作成
New-ComplianceSearch -Name "AdvancedSearch" `
  -ExchangeLocation "[email protected]","[email protected]" `
  -ContentMatchQuery 'subject:"機密" AND received>=2023-01-01 AND received<=2023-12-31 AND from:"[email protected]"'

この例では、以下の条件を適用しています:

  • 件名に「機密」を含む。
  • 2023年1月1日から2023年12月31日の間に受信。
  • 送信者が [email protected]。

2. 特定のデータタイプの検索

Exchange Online以外のデータソース


eDiscoveryでは、TeamsのチャットやSharePointのファイルも検索対象に含められます。

PowerShellスクリプト例


Teamsメッセージを対象とした検索:

New-ComplianceSearch -Name "TeamsSearch" `
  -TeamsLocation "[email protected]" `
  -ContentMatchQuery 'body:"プロジェクト進捗" AND sent>=2023-06-01'

SharePointファイルを対象とした検索:

New-ComplianceSearch -Name "SharePointSearch" `
  -SharePointLocation "https://tenant.sharepoint.com/sites/プロジェクトサイト" `
  -ContentMatchQuery 'filename:"報告書" AND lastmodified>=2023-01-01'

3. 一括検索と動的条件の使用

特定のグループ全体を対象に動的な検索を実行する場合、ループ処理を使用します。

PowerShellスクリプト例

# グループ内のメールボックスを動的に取得
$groupMembers = Get-DistributionGroupMember -Identity "プロジェクトチーム"

foreach ($member in $groupMembers) {
    $searchName = "Search_" + $member.PrimarySmtpAddress
    Write-Host "検索作成中: $searchName"

    # メールボックスごとの検索を作成
    New-ComplianceSearch -Name $searchName `
      -ExchangeLocation $member.PrimarySmtpAddress `
      -ContentMatchQuery 'subject:"会議記録" AND received>=2023-01-01'
}

このスクリプトは、グループ全体を対象に個別の検索を自動作成します。


4. 結果の分析とレポート作成

eDiscoveryで抽出したデータを分析し、レポートを生成することも可能です。

CSV形式でのエクスポート

# 検索結果をCSV形式でエクスポート
Get-ComplianceSearch -Identity "SearchName" | Export-Csv -Path "検索結果.csv" -NoTypeInformation

Excelでの視覚化


エクスポートしたCSVファイルをExcelで開き、フィルターやピボットテーブルを使用してデータを分析します。


5. 定期的な自動検索の設定

定期的に検索を実行したい場合、スケジュールタスクを利用して自動化することが可能です。

スクリプトの自動化例

  1. 作成したスクリプトをファイルとして保存(例:eDiscoveryAutomation.ps1)。
  2. スケジュールタスクで以下のコマンドを設定:
   powershell.exe -File "C:\Scripts\eDiscoveryAutomation.ps1"

6. 応用例の活用効果


これらの応用例を活用することで、以下のメリットが得られます:

  • 必要なデータをピンポイントで抽出可能。
  • 複数ソースにまたがる効率的な検索が可能。
  • 繰り返し作業を自動化し、作業時間を短縮。

次章では、記事全体の内容をまとめ、実践に活用するポイントを整理します。

まとめ

本記事では、PowerShellを活用してMicrosoft PurviewのeDiscovery機能を効率的に一括実行する方法について解説しました。基本的なeDiscoveryの概要から、PowerShellによる認証・権限の設定、一括検索スクリプトの作成、高度なフィルタリング条件の活用方法、さらにはトラブルシューティングや応用例までを網羅しました。

PowerShellを使用することで、eDiscoveryの手動操作に比べて以下のメリットを得られます:

  • 作業の自動化による効率化。
  • 検索条件の柔軟なカスタマイズ。
  • ミスを減らし、正確で一貫した検索結果の取得。

これらの知識を実践に取り入れることで、コンプライアンスや法的調査の対応を迅速かつ的確に行えるようになります。本記事を参考に、PowerShellを活用したeDiscoveryの一括実行にぜひ挑戦してみてください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次