스크립트를 사용하여 eDiscovery(Standard) 사례의 보류에 사용자 추가
팁
eDiscovery(미리 보기)는 이제 새 Microsoft Purview 포털에서 사용할 수 있습니다. 새 eDiscovery 환경을 사용하는 방법에 대한 자세한 내용은 eDiscovery에 대한 자세한 정보(미리 보기)를 참조하세요.
보안 & 규정 준수 PowerShell은 eDiscovery 사례 만들기 및 관리와 관련된 시간이 많이 걸리는 작업을 자동화할 수 있는 cmdlet을 제공합니다. 현재 Microsoft Purview 규정 준수 포털 Microsoft Purview eDiscovery(Standard) 사례를 사용하여 많은 수의 보유자 콘텐츠 위치를 보류하는 데 시간과 준비가 필요합니다. 예를 들어 보류를 만들기 전에 보류하려는 각 비즈니스용 OneDrive 사이트에 대한 URL을 수집해야 합니다. 그런 다음 보류하려는 각 사용자에 대해 사서함과 해당 비즈니스용 OneDrive 사이트를 보류에 추가해야 합니다. 이 문서의 스크립트를 사용하여 이 프로세스를 자동화할 수 있습니다.
스크립트는 organization 내 사이트 도메인의 이름(예contoso
: URLhttps://contoso-my.sharepoint.com), 기존 eDiscovery 사례의 이름, 사례와 연결된 새 보류의 이름, 보류하려는 사용자의 이메일 주소 목록 및 쿼리 기반 보류를 만들려는 경우 사용할 검색 쿼리를 묻는 메시지를 표시합니다. 그런 다음, 스크립트는 목록의 각 사용자에 대한 비즈니스용 OneDrive 사이트의 URL을 가져오고, 새 보류를 만든 다음, 목록의 각 사용자에 대한 사서함 및 비즈니스용 OneDrive 사이트를 보류에 추가합니다. 또한 스크립트는 새 보류에 대한 정보가 포함된 로그 파일을 생성합니다.
이 작업을 수행할 단계는 다음과 같습니다.
1단계: SharePoint Online 관리 셸설치2단계: 사용자 목록 생성3단계: 스크립트를 실행하여 보류 만들기 및 사용자 추가
팁
E5 고객이 아닌 경우 90일 Microsoft Purview 솔루션 평가판을 사용하여 조직이 데이터 보안 및 규정 준수 요구 사항을 관리하는 데 도움이 되는 추가 Purview 기능을 살펴보세요. Microsoft Purview 평가판 허브에서 지금 시작합니다. 등록 및 평가판 조건에 대한 세부 정보를 알아봅니다.
보류에 사용자를 추가하기 전에
- 3단계에서 스크립트를 실행하려면 규정 준수 포털에서 eDiscovery Manager 역할 그룹의 멤버이고 SharePoint Online 관리자여야 합니다. 자세한 내용은 Office 365 보안 & 규정 준수 센터에서 eDiscovery 권한 할당을 참조하세요.
- 규정 준수 포털의 eDiscovery 사례와 연결된 보류에 최대 1,000개의 사서함과 100개의 사이트를 추가할 수 있습니다. 보류하려는 모든 사용자에게 비즈니스용 OneDrive 사이트가 있다고 가정하면 이 문서의 스크립트를 사용하여 최대 100명의 사용자를 보류에 추가할 수 있습니다.
- 2단계에서 만든 사용자 목록과 3단계의 스크립트를 동일한 폴더에 저장해야 합니다. 그러면 스크립트를 더 쉽게 실행할 수 있습니다.
- 스크립트는 기존 사례와 연결된 새 보류에 사용자 목록을 추가합니다. 스크립트를 실행하기 전에 보류를 연결하려는 경우를 만들어야 합니다.
- 이 문서의 스크립트는 보안 & 준수 PowerShell 및 SharePoint Online 관리 셸 연결할 때 최신 인증을 지원합니다. Microsoft 365 또는 Microsoft 365 GCC organization 경우 스크립트를 있는 그대로 사용할 수 있습니다. 독일 organization, Microsoft 365 GCC High organization 또는 Microsoft 365 DoD organization Office 365 스크립트를 편집하여 성공적으로 실행해야 합니다. 특히 선을
Connect-IPPSSession
편집하고 ConnectionUri 및 AzureADAuthorizationEndpointUri 매개 변수(및 organization 형식에 대한 적절한 값)를 사용하여 보안 & 준수 PowerShell에 연결해야 합니다. 자세한 내용은 보안에 연결 & 준수 PowerShell의 예제를 참조하세요. - 이 스크립트는 보안 & 규정 준수 PowerShell 및 SharePoint Online 관리 셸 자동으로 연결을 끊습니다.
- 스크립트에는 최소한의 오류 처리가 포함됩니다. 주요 목적은 각 사용자의 사서함 및 비즈니스용 OneDrive 사이트를 빠르고 쉽게 보류하는 것입니다.
- 이 항목에 제공된 샘플 스크립트는 Microsoft 표준 지원 프로그램 또는 서비스에서 지원되지 않습니다. 샘플 스크립트는 어떠한 보증도 없이 "있는 그대로" 제공됩니다. 또한 Microsoft는 묵시적인 모든 보증(상품성 또는 특정 목적에의 적합성에 대한 묵시적인 보증을 포함하되 이에 제한되지 않음)을 부인합니다. 샘플 스크립트 및 문서의 사용 또는 수행으로 인해 발생하는 모든 위험은 사용자의 책임입니다. 어떠한 경우에도 Microsoft, 스크립트 작성자 또는 그외 스크립트의 작성, 생산 또는 제공과 관련된 사람은 누구나 샘플 스크립트 또는 문서의 사용 또는 사용할 수 없음으로 인해 발생하는 모든 손해(수익 손실, 비즈니스 중단, 비즈니스 정보 손실 또는 기타 금전상의 손실을 포함하되 이에 제한되지 않음)에 대해 책임지지 않습니다. 이는 Microsoft가 이러한 손해가 발생할 가능성에 대해 알았더라도 마찬가지입니다.
1단계: SharePoint Online 관리 셸 설치
첫 번째 단계는 로컬 컴퓨터에 아직 설치되지 않은 경우 SharePoint Online 관리 셸 설치하는 것입니다. 이 절차에서는 셸을 사용할 필요가 없지만 3단계에서 실행하는 스크립트에 필요한 필수 구성 요소가 포함되어 있으므로 셸을 설치해야 합니다. 이러한 필수 구성 요소를 사용하면 스크립트가 SharePoint Online과 통신하여 비즈니스용 OneDrive 사이트에 대한 URL을 가져올 수 있습니다.
SharePoint Online 관리 셸 환경 설정으로 이동하고 1단계 및 2단계를 수행하여 로컬 컴퓨터에 SharePoint Online 관리 셸 설치합니다.
2단계: 사용자 목록 생성
3단계의 스크립트는 eDiscovery 사례와 연결된 보류를 만들고 사용자 목록의 사서함 및 비즈니스용 OneDrive 사이트를 보류에 추가합니다. 텍스트 파일에 전자 메일 주소를 입력하거나 PowerShell에서 명령을 실행하여 전자 메일 주소 목록을 가져와 파일에 저장할 수 있습니다(3단계에서 스크립트를 저장할 폴더와 동일한 폴더에 있음).
다음은 organization 모든 사용자의 이메일 주소 목록을 가져와서 HoldUsers.txt 텍스트 파일에 저장하는 Exchange Online PowerShell 명령입니다.
Get-Mailbox -ResultSize unlimited -Filter { RecipientTypeDetails -eq 'UserMailbox'} | Select-Object PrimarySmtpAddress > HoldUsers.txt
이 명령을 실행한 후 텍스트 파일을 열고 속성 이름 PrimarySmtpAddress
가 포함된 헤더를 제거합니다. 그런 다음, 3단계에서 만들 보류에 추가하려는 사용자의 전자 메일 주소를 제외한 모든 전자 메일 주소를 제거합니다. 전자 메일 주소 목록 앞이나 뒤의 빈 행이 없는지 확인합니다.
3단계: 스크립트를 실행하여 보류 만들기 및 사용자 추가
이 단계에서 스크립트를 실행하면 다음 정보를 묻는 메시지가 표시됩니다. 스크립트를 실행하기 전에 이 정보를 준비해야 합니다.
사용자 자격 증명: 스크립트는 자격 증명을 사용하여 보안 & 준수 PowerShell에 연결합니다. 또한 이러한 자격 증명을 사용하여 SharePoint Online에 액세스하여 사용자 목록에 대한 비즈니스용 OneDrive URL을 가져옵니다.
SharePoint 도메인의 이름: 이 스크립트는 SharePoint 관리 센터에 연결할 수 있도록 이 이름을 입력하라는 메시지를 표시합니다. 또한 organization OneDrive URL의 도메인 이름을 사용합니다. 예를 들어 관리 센터의 URL이 이
https://contoso-admin.sharepoint.com
고 OneDrive의 URL이https://contoso-my.sharepoint.com
인 경우 스크립트에서 도메인 이름을 묻는 메시지가 표시되면 를 입력contoso
합니다.사례의 이름: 기존 사례의 이름입니다. 스크립트는 이 사례와 연결된 새 보류를 만듭니다.
보류 이름: 스크립트가 만들고 지정된 대/소문자와 연결할 보류의 이름입니다.
쿼리 기반 보류에 대한 쿼리 검색: 지정된 검색 조건을 충족하는 콘텐츠만 보류되도록 쿼리 기반 보류를 만들 수 있습니다. 모든 콘텐츠를 보류하려면 검색 쿼리를 묻는 메시지가 표시되면 Enter 키를 누릅니다.
보류 켜기 여부: 스크립트를 만든 후 보류를 켜거나 스크립트에서 보류를 사용하도록 설정하지 않고 만들 수 있습니다. 스크립트가 보류를 켜지 않은 경우 나중에 규정 준수 포털에서 또는 다음 PowerShell 명령을 실행하여 켤 수 있습니다.
Set-CaseHoldPolicy -Identity <name of the hold> -Enabled $true
Set-CaseHoldRule -Identity <name of the hold> -Disabled $false
사용자 목록이 있는 텍스트 파일의 이름 - 보류에 추가할 사용자 목록이 포함된 2단계의 텍스트 파일 이름입니다. 이 파일이 스크립트와 동일한 폴더에 있는 경우 파일 이름(예: HoldUsers.txt)을 입력하기만 하면 됩니다. 텍스트 파일이 다른 폴더에 있는 경우 파일의 전체 경로 이름을 입력합니다.
스크립트에서 요청하는 정보를 수집한 후 마지막 단계는 스크립트를 실행하여 새 보류를 만들고 사용자를 추가하는 것입니다.
의 파일 이름 접미사를
.ps1
사용하여 다음 텍스트를 Windows PowerShell 스크립트 파일에 저장합니다. 예를 들면AddUsersToHold.ps1
와 같습니다.#script begin " " write-host "***********************************************" write-host " Security & Compliance PowerShell " -foregroundColor yellow -backgroundcolor darkgreen write-host " eDiscovery (Standard) cases - Add users to a hold " -foregroundColor yellow -backgroundcolor darkgreen write-host "***********************************************" " " # Connect to Security & Compliance PowerShell using modern authentication if (!$SccSession) { Import-Module ExchangeOnlineManagement Connect-IPPSSession } # Get the organization's domain name. We use this to create the SharePoint admin URL and root URL for OneDrive for Business. "" $mySiteDomain = Read-Host "Enter the domain name for your SharePoint organization. We use this name to connect to SharePoint admin center and for the OneDrive URLs in your organization. For example, 'contoso' in 'https://contoso-admin.sharepoint.com' and 'https://contoso-my.sharepoint.com'" "" # Connect to PnP Online using modern authentication Import-Module PnP.PowerShell Connect-PnPOnline -Url https://$mySiteDomain-admin.sharepoint.com -UseWebLogin # 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 "The SharePoint Online Management Shell isn't installed. Please install it from: https://go.microsoft.com/fwlink/p/?LinkId=255251 and then re-run this script." return; } } # Get other required information do{ $casename = Read-Host "Enter the name of the case" $caseexists = (get-compliancecase -identity "$casename" -erroraction SilentlyContinue).isvalid if($caseexists -ne 'True') {"" write-host "A case named '$casename' doesn't exist. Please specify the name of an existing case, or create a new case and then re-run the script." -foregroundColor Yellow ""} }While($caseexists -ne 'True') "" do{ $holdName = Read-Host "Enter the name of the new hold" $holdexists=(get-caseholdpolicy -identity "$holdname" -case "$casename" -erroraction SilentlyContinue).isvalid if($holdexists -eq 'True') {"" write-host "A hold named '$holdname' already exists. Please specify a new hold name." -foregroundColor Yellow ""} }While($holdexists -eq 'True') "" $holdQuery = Read-Host "Enter a search query to create a query-based hold, or press Enter to hold all content" "" $holdstatus = read-host "Do you want the hold enabled after it's created? (Yes/No)" do{ "" $inputfile = read-host "Enter the name of the text file that contains the email addresses of the users to add to the hold" "" $fileexists = test-path -path $inputfile if($fileexists -ne 'True'){write-host "$inputfile doesn't exist. Please enter a valid file name." -foregroundcolor Yellow} }while($fileexists -ne 'True') #Import the list of addresses from the txt file. Trim any excess spaces and make sure all addresses #in the list are unique. [array]$emailAddresses = Get-Content $inputfile -ErrorAction SilentlyContinue | where {$_.trim() -ne ""} | foreach{ $_.Trim() } [int]$dupl = $emailAddresses.count [array]$emailAddresses = $emailAddresses | select-object -unique $dupl -= $emailAddresses.count #Validate email addresses so the hold creation does not run in to an error. if($emailaddresses.count -gt 0){ write-host ($emailAddresses).count "addresses were found in the text file. There were $dupl duplicate entries in the file." -foregroundColor Yellow "" Write-host "Validating the email addresses. Please wait..." -foregroundColor Yellow "" $finallist =@() foreach($emailAddress in $emailAddresses) { if((get-recipient $emailaddress -erroraction SilentlyContinue).isvalid -eq 'True') {$finallist += $emailaddress} else {"Unable to find the user $emailaddress" [array]$excludedlist += $emailaddress} } "" #Find user's OneDrive account URL using email address Write-Host "Getting the URL for each user's OneDrive for Business site." -foregroundColor Yellow "" $AdminUrl = "https://$mySiteDomain-admin.sharepoint.com" $mySiteUrlRoot = "https://$mySiteDomain-my.sharepoint.com" $urls = @() foreach($emailAddress in $finallist) { try { $url=Get-PnPUserProfileProperty -Account $emailAddress | Select PersonalUrl $urls += $url.PersonalUrl Write-Host "- $emailAddress => $url" [array]$ODadded += $url.PersonalUrl }catch { Write-Warning "Could not locate OneDrive for $emailAddress" [array]$ODExluded += $emailAddress Continue } } $urls | FL if(($finallist.count -gt 0) -or ($urls.count -gt 0)){ "" Write-Host "Creating the hold named $holdname. Please wait..." -foregroundColor Yellow if(($holdstatus -eq "Y") -or ($holdstatus -eq "y") -or ($holdstatus -eq "yes") -or ($holdstatus -eq "YES")){ New-CaseHoldPolicy -Name "$holdName" -Case "$casename" -ExchangeLocation $finallist -SharePointLocation $urls -Enabled $True | out-null New-CaseHoldRule -Name "$holdName" -Policy "$holdname" -ContentMatchQuery $holdQuery | out-null } else{ New-CaseHoldPolicy -Name "$holdName" -Case "$casename" -ExchangeLocation $finallist -SharePointLocation $urls -Enabled $false | out-null New-CaseHoldRule -Name "$holdName" -Policy "$holdname" -ContentMatchQuery $holdQuery -disabled $false | out-null } "" } else {"No valid locations were identified. Therefore, the hold wasn't created."} #write log files (if needed) $newhold=Get-CaseHoldPolicy -Identity "$holdname" -Case "$casename" -erroraction SilentlyContinue $newholdrule=Get-CaseHoldRule -Identity "$holdName" -erroraction SilentlyContinue if(($ODAdded.count -gt 0) -or ($ODExluded.count -gt 0) -or ($finallist.count -gt 0) -or ($excludedlist.count -gt 0) -or ($newhold.isvalid -eq 'True') -or ($newholdrule.isvalid -eq 'True')) { Write-Host "Generating output files..." -foregroundColor Yellow if($ODAdded.count -gt 0){ "OneDrive Locations" | add-content .\LocationsOnHold.txt "==================" | add-content .\LocationsOnHold.txt $newhold.SharePointLocation.name | add-content .\LocationsOnHold.txt} if($ODExluded.count -gt 0){ "Users without OneDrive locations" | add-content .\LocationsNotOnHold.txt "================================" | add-content .\LocationsNotOnHold.txt $ODExluded | add-content .\LocationsNotOnHold.txt} if($finallist.count -gt 0){ " " | add-content .\LocationsOnHold.txt "Exchange Locations" | add-content .\LocationsOnHold.txt "==================" | add-content .\LocationsOnHold.txt $newhold.ExchangeLocation.name | add-content .\LocationsOnHold.txt} if($excludedlist.count -gt 0){ " "| add-content .\LocationsNotOnHold.txt "Mailboxes not added to the hold" | add-content .\LocationsNotOnHold.txt "===============================" | add-content .\LocationsNotOnHold.txt $excludedlist | add-content .\LocationsNotOnHold.txt} $FormatEnumerationLimit=-1 if($newhold.isvalid -eq 'True'){$newhold|fl >.\GetCaseHoldPolicy.txt} if($newholdrule.isvalid -eq 'True'){$newholdrule|Fl >.\GetCaseHoldRule.txt} } } else {"The hold wasn't created because no valid entries were found in the text file."} "" #Disconnect from SCC PowerShell and PnPOnline Write-host "Disconnecting from SCC PowerShell and PnP Online" -foregroundColor Yellow Get-PSSession | Remove-PSSession Disconnect-PnPOnline Write-host "Script complete!" -foregroundColor Yellow "" #script end
로컬 컴퓨터에서 Windows PowerShell 열고 스크립트를 저장한 폴더로 이동합니다.
스크립트를 실행합니다. 예를 들어:
.\AddUsersToHold.ps1
스크립트에서 요청하는 정보를 입력합니다.
이 스크립트는 보안 & 준수 PowerShell에 연결한 다음 eDiscovery 사례에서 새 보류를 만들고 목록의 사용자에 대한 사서함 및 비즈니스용 OneDrive 추가합니다. 규정 준수 포털의 eDiscovery 페이지에서 사례로 이동하여 새 보류를 볼 수 있습니다.
스크립트 실행이 완료되면 다음 로그 파일을 만들고 스크립트가 있는 폴더에 저장합니다.
- LocationsOnHold.txt: 스크립트가 성공적으로 보류된 사서함 및 비즈니스용 OneDrive 사이트 목록을 포함합니다.
- LocationsNotOnHold.txt: 스크립트가 보류되지 않은 사서함 및 비즈니스용 OneDrive 사이트 목록을 포함합니다. 사용자에게 사서함이 있지만 비즈니스용 OneDrive 사이트는 없는 경우 사용자는 보류되지 않은 비즈니스용 OneDrive 사이트 목록에 포함됩니다.
- GetCaseHoldPolicy.txt: 새 보류를 만든 후 스크립트가 실행된 새 보류에 대한 Get-CaseHoldPolicy cmdlet의 출력을 포함합니다. 이 cmdlet에서 반환된 정보에는 사서함 및 비즈니스용 OneDrive 사이트가 보류된 사용자 목록과 보류가 사용 또는 비활성화되었는지 여부가 포함됩니다.
- GetCaseHoldRule.txt: 새 보류를 만든 후 스크립트가 실행된 새 보류에 대한 Get-CaseHoldRule cmdlet의 출력을 포함합니다. 이 cmdlet에서 반환된 정보에는 스크립트를 사용하여 쿼리 기반 보류를 만드는 경우 검색 쿼리가 포함됩니다.