コンテンツ検索を使用してメールボックスと OneDrive サイトでユーザーの一覧を検索する
ヒント
新しい Microsoft Purview ポータルで電子情報開示 (プレビュー) を使用できるようになりました。 新しい電子情報開示エクスペリエンスの使用の詳細については、「電子 情報開示 (プレビュー)」を参照してください。
セキュリティ & コンプライアンス PowerShell には、電子情報開示に関連する時間のかかるタスクを自動化できる多数のコマンドレットが用意されています。 現在、Microsoft Purview コンプライアンス ポータルでコンテンツ検索を作成して多数のカストディアン コンテンツの場所を検索するには、時間と準備が必要です。 検索を作成する前に、各 OneDrive for Business サイトの URL を収集し、各メールボックスと OneDrive for Business サイトを検索に追加する必要があります。 今後のリリースでは、コンプライアンス ポータルでこれを行う方が簡単になります。 それまでは、この記事のスクリプトを使用して、このプロセスを自動化できます。 このスクリプトでは、組織の MySite ドメインの名前 (URL https://contoso-my.sharepoint.com
の contoso など)、ユーザーのメール アドレスの一覧、新しいコンテンツ検索の名前、使用する検索クエリの入力を求められます。 このスクリプトは、リスト内の各ユーザーの OneDrive for Business URL を取得し、指定した検索クエリを使用して、リスト内の各ユーザーのメールボックスと OneDrive for Business サイトを検索するコンテンツ検索を作成して開始します。
アクセス許可とスクリプト情報
重要
Microsoft では、アクセス許可が可能な限りで少ないロールを使用することをお勧めします。 グローバル管理者ロールを持つユーザーの数を最小限に抑えることで、組織のセキュリティを向上させることができます。 Microsoft Purview のロールとアクセス許可の詳細については、こちらをご覧ください。
- 手順 3 でスクリプトを実行するには、Microsoft Purview ポータルまたはコンプライアンス ポータルの電子情報開示マネージャー役割グループのメンバーであり、SharePoint グローバル管理者である必要があります。
- 手順 2 で作成したユーザーの一覧と手順 3 のスクリプトを同じフォルダーに保存してください。 これにより、スクリプトを簡単に実行できます。
- スクリプトには、最小限のエラー処理が含まれています。 その主な目的は、各ユーザーのメールボックスと OneDrive サイトをすばやく簡単に検索することです。
- この記事で提供されるサンプル スクリプトは、Microsoft のいかなる標準サポート プログラムまたはサービスの下でもサポートされません。 サンプル スクリプトは現状のまま提供され、いかなる保証も伴いません。 さらに、Microsoft は、商品性、特定目的への適合性を含む一切の黙示の保証をいたしかねます。 本サンプル スクリプトおよびドキュメントの使用または性能に起因するすべてのリスクは、お客様が負うものとします。 サンプル スクリプトおよびドキュメントを使用したこと、または使用できなかったことに伴って生じるいかなる損害 (業務利益の損失、業務の中断、業務情報の損失、金銭上の損失、その他一切の損害) についても、Microsoft、Microsoft に帰属する作者、スクリプトの作成、製造、または納入に関与したその他のすべての人員は、いかなる場合も責めを負わないものとします。
手順 1: SharePoint Online 管理シェルをインストールする
最初の手順は、SharePoint Online 管理シェルをインストールすることです。 この手順ではシェルを使用する必要はありませんが、手順 3 で実行するスクリプトに必要な前提条件が含まれているため、シェルをインストールする必要があります。 これらの前提条件により、スクリプトは SharePoint と通信して OneDrive サイトの URL を取得できます。
[SharePoint Online 管理シェル環境のセットアップ] に移動し、手順 1 と手順 2 を実行して SharePoint Online 管理シェルをインストールします。
手順 2: ユーザーの一覧を生成する
手順 3 のスクリプトでは、メールボックスと OneDrive アカウントを検索してユーザーの一覧を検索するコンテンツ検索を作成します。 テキスト ファイルにメール アドレスを入力するか、PowerShell でコマンドを実行してメール アドレスの一覧を取得し、ファイルに保存できます (手順 3 でスクリプトを保存するフォルダーと同じフォルダーにあります)。
組織内のすべてのユーザーのメール アドレスの一覧を取得し、Users.txt
という名前のテキスト ファイルに保存するために実行できる Exchange Online PowerShell コマンドを次に示します。
Get-Mailbox -ResultSize unlimited -Filter { RecipientTypeDetails -eq 'UserMailbox'} | Select-Object PrimarySmtpAddress > Users.txt
このコマンドを実行した後は、必ずファイルを開き、プロパティ名を含むヘッダーを削除 PrimarySmtpAddress
。 テキスト ファイルには、電子メール アドレスの一覧だけが含まれている必要があります。それ以外は何も含まれていません。 電子メール アドレスの一覧の前後に空白の行がないことを確認します。
手順 3: スクリプトを実行して検索を作成して開始する
この手順でスクリプトを実行すると、次の情報の入力を求められます。 スクリプトを実行する前に、この情報を準備しておいてください。
ユーザーの資格情報 - このスクリプトでは、資格情報を使用して SharePoint にアクセスし、OneDrive URL を取得し、Security & Compliance PowerShell に接続します。
MySite ドメインの名前 - MySite ドメインは、組織内のすべての OneDrive サイトを含むドメインです。 たとえば、MySite ドメインの URL が https://contoso-my.sharepoint.comされている場合は、スクリプトから MySite ドメインの名前を求めるメッセージが表示されたときに「
contoso
」と入力します。手順 2 のテキスト ファイルのパス名 - 手順 2 で作成したテキスト ファイルのパス名。 テキスト ファイルとスクリプトが同じフォルダーにある場合は、テキスト ファイルの名前を入力します。 それ以外の場合は、テキスト ファイルの完全なパス名を入力します。
コンテンツ検索の名前 - スクリプトによって作成されるコンテンツ検索の名前。
検索クエリ - コンテンツ検索で使用される検索クエリが作成され、実行されます。 検索クエリの詳細については、「 電子情報開示のキーワード クエリと検索条件」を参照してください。
このスクリプトを実行するには、以下の手順を実行します。
.ps1 のファイル名サフィックスを使用して、次のテキストを Windows PowerShell スクリプト ファイルに保存します。たとえば、
SearchEXOOD4B.ps1
。 手順 2 でユーザーの一覧を保存したのと同じフォルダーにファイルを保存します。# This PowerShell script will prompt you for the following information: # * Your user credentials # * The name of your organization's MySite domain # * The pathname for the text file that contains a list of user email addresses # * The name of the Content Search that will be created # * The search query string # The script will then: # * Find the OneDrive site for each user in the text file # * Create and start a Content Search using the above information # Get user credentials if (!$credentials) { $credentials = Get-Credential } # Get the user's MySite domain name. We use this to create the admin URL and root URL for OneDrive $mySiteDomain = Read-Host "What is your organization's MySite domain? For example, 'contoso' for 'https://contoso-my.sharepoint.com'" $AdminUrl = "https://$mySiteDomain-admin.sharepoint.com" $mySiteUrlRoot = "https://$mySiteDomain-my.sharepoint.com" # Get other required information $inputfile = read-host "Enter the file name of the text file that contains the email addresses for the users you want to search" $searchName = Read-Host "Enter the name for the new search" $searchQuery = Read-Host "Enter the search query you want to use" $emailAddresses = Get-Content $inputfile | where {$_ -ne ""} | foreach{ $_.Trim() } # Connect to Security & Compliance PowerShell if (!$s -or !$a) { Import-Module ExchangeOnlineManagement Connect-IPPSSession } # Load the SharePoint assemblies from the SharePoint Online Management Shell # To install, go to https://go.microsoft.com/fwlink/p/?LinkId=255251 if (!$SharePointClient -or !$SPRuntime -or !$SPUserProfile) { $SharePointClient = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") $SPRuntime = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") $SPUserProfile = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.UserProfiles") if (!$SharePointClient) { Write-Error "SharePoint Online Management Shell isn't installed, please install from: https://go.microsoft.com/fwlink/p/?LinkId=255251 and then run this script again" return; } } if (!$spCreds) { $spCreds = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($credentials.UserName, $credentials.Password) } # Add the path of the User Profile Service to the SPO admin URL, then create a new webservice proxy to access it $proxyaddr = "$AdminUrl/_vti_bin/UserProfileService.asmx?wsdl" $UserProfileService= New-WebServiceProxy -Uri $proxyaddr -UseDefaultCredential False $UserProfileService.Credentials = $credentials # Take care of auth cookies $strAuthCookie = $spCreds.GetAuthenticationCookie($AdminUrl) $uri = New-Object System.Uri($AdminUrl) $container = New-Object System.Net.CookieContainer $container.SetCookies($uri, $strAuthCookie) $UserProfileService.CookieContainer = $container Write-Host "Getting each user's OneDrive URL" $urls = @() foreach($emailAddress in $emailAddresses) { try { $prop = $UserProfileService.GetUserProfileByName("i:0#.f|membership|$emailAddress") | Where-Object { $_.Name -eq "PersonalSpace" } $url = $prop.values[0].value $furl = $mySiteUrlRoot + $url $urls += $furl Write-Host "-$emailAddress => $furl" } catch { Write-Warning "Could not locate OneDrive for $emailAddress" } } Write-Host "Creating and starting the search" $search = New-ComplianceSearch -Name $searchName -ExchangeLocation $emailAddresses -SharePointLocation $urls -ContentMatchQuery $searchQuery # Finally, start the search and then display the status if($search) { Start-ComplianceSearch $search.Name Get-ComplianceSearch $search.Name }
Windows PowerShell を開き、スクリプトを保存したフォルダーと手順 2 のユーザーの一覧に移動します。
スクリプトを開始します。例えば:
.\SearchEXOOD4B.ps1
資格情報の入力を求められたら、メール アドレスとパスワードを入力し、[OK] を選択します。
スクリプトによってプロンプトが表示されたら、次の情報を入力します。 各情報を入力し、 Enter キーを押します。
MySite ドメインの名前。
ユーザーの一覧を含むテキスト ファイルのパス名。
コンテンツ検索の名前。
検索クエリ (コンテンツの場所のすべての項目を返すには、この空白のままにします)。
このスクリプトは、各 OneDrive サイトの URL を取得し、検索を作成して開始します。 Security & Compliance PowerShell で Get-ComplianceSearch コマンドレットを実行して検索の統計情報と結果を表示するか、コンプライアンス ポータルの コンテンツ検索 ページに移動して検索に関する情報を表示できます。