若要將使用者新增至 [Office 365 的安全性與規範中心 eDiscovery 案例中保留使用指令碼

重要:  本文係由機器翻譯而成,請參閱免責聲明。本文的英文版本請見這裡,以供參考。

Office 365 安全性與合規性中心提供許多Windows PowerShell cmdlet 可讓您可自動化耗時的工作相關建立及管理 eDiscovery 案件。目前使用中的 eDiscovery 案例工具安全性與合規性中心放置大量的位置上的按住 okay 內容需要花費時間和準備。例如,您建立保留之前,您可以收集每個您想要保留的個案的商務用 OneDrive網站的 URL。然後您想要保留的個案每一位使用者,您必須將他們的信箱和其商務用 OneDrive網站新增至保留。在未來的安全性與合規性中心的版本類似,這會收到執行的工作變得更容易。之前,您可以使用本文中的指令碼來自動化此程序。

指令碼提示您的組織我的網站網域 (例如contoso中 URL https://contoso-my.sharepoint.com)、 現有 eDiscovery 案例的名稱、 名稱的新名稱的大小寫相關聯的電子郵件地址的使用者,您要放在清單,然後按住並按住您想要建立查詢為基礎,使用搜尋查詢。指令碼然後商務用 OneDrive網站的清單中的每個使用者會取得 URL、 建立新的保留,,然後新增每位使用者的信箱 」 和 「 商務用 OneDrive網站清單中保留。指令碼也會產生包含新保留的相關資訊的記錄檔。

以下是完成這項工作的步驟︰

步驟 1︰ 安裝 SharePoint Online 管理命令介面

步驟 2︰ 產生使用者的清單

步驟 3︰ 執行指令碼來建立保留,以及新增使用者

開始之前

  • 您必須是安全性與合規性中心和SharePoint Online全域管理員才能執行指令碼在步驟 3 中的 eDiscovery 管理員角色群組成員。如需詳細資訊,請參閱指派的 [Office 365 的安全性與規範中心中的 eDiscovery 權限

  • 上限為 1000 信箱和 100 網站可以新增至 eDiscovery 案例中安全性與合規性中心與相關聯的保留。假設您想要保留的個案的每位使用者都有商務用 OneDrive網站,您可以使用本文中的指令碼保留新增 100 個使用者最大值。

  • 請務必儲存您在步驟 2] 及 [在步驟 3 中的指令碼的相同資料夾中建立的使用者清單。會使執行指令碼更加容易。

  • 指令碼加入新的保留與現有的大小寫相關聯的使用者清單。請務必執行指令碼之前,先建立您想要建立關聯與保留的個案。

  • 指令碼包含最小的錯誤處理。其主要目的是快速且輕鬆地將信箱按住 OneDrive for Business 網站上的每一位使用者。

  • 在任何 Microsoft 標準支援程式或服務下,不支援本主題提供的指令碼。範例指令碼係依「現狀」提供,不附帶任何明示或默示的擔保。Microsoft 另外不承擔任何明示或默示的擔保,包括但不限於適售性或適合某特定用途的默示擔保。使用或操作範例指令碼和文件發生的所有風險皆屬於您的責任。Microsoft、其作者以及其他與建置、生產或交付程式碼相關的任何人在任何情況下皆完全不需對任何損失負責任,包括但不限於商業利潤損失、業務中斷、業務資訊損失、或其他錢財損失等因使用或無法使用範例指令碼所發生的損失,即使 Microsoft 曾建議這些損失發生的可能性。

回到頁首

步驟 1︰ 安裝SharePoint Online管理命令介面

第一步是如果尚未安裝在您的本機電腦上安裝SharePoint Online管理命令介面。您沒有使用此程序中的命令介面,但您必須將其安裝,因為它包含您在步驟 3 中執行的指令碼所需的必要條件。這些必要條件允許的指令碼進行通訊的SharePoint Online取得商務用 OneDrive網站的 Url。

移至 [設定 SharePoint Online 管理命令介面 Windows PowerShell 環境 ,並執行步驟 1 到步驟 2 到本機電腦上安裝SharePoint Online管理命令介面。

回到頁首

步驟 2︰ 產生使用者的清單

步驟 3 中的指令碼會建立保留相關聯 eDiscovery 案例,與新增信箱和商務用 OneDrive網站的 [要保留的使用者清單。您只可以在文字檔案中,輸入電子郵件地址,或您可以在Windows PowerShell取得電子郵件地址的清單,並將其儲存至檔案] (位於相同的資料夾,您會在步驟 3 中儲存的指令碼) 到執行命令。

以下是 [(您在使用遠端 PowerShell 連線到Exchange Online組織執行) 的 PowerShell 命令以取得您的組織中的所有使用者的電子郵件地址清單,並將其儲存至文字檔案命名 HoldUsers.txt。

Get-Mailbox -ResultSize unlimited -Filter { RecipientTypeDetails -eq 'UserMailbox'} | Select-Object PrimarySmtpAddress > HoldUsers.txt

執行此命令之後,開啟文字檔案並移除包含屬性名稱, PrimarySmtpAddress的標題。移除所有的電子郵件地址,除了您想要新增至您將建立在步驟 3 中保留的使用者。請確定沒有空白資料列之前或之後的電子郵件地址清單。

回到頁首

步驟 3︰ 執行指令碼來建立保留,以及新增使用者

當您執行此步驟中的指令碼時,它會提示您輸入下列資訊。請務必執行指令碼做好準備好這項資訊。

  • 您的使用者認證   指令碼會使用您的認證以連線至安全性與合規性中心與遠端 PowerShell。也會使用這些認證以存取SharePoint Online商務用 OneDrive Url 取得的使用者清單。

  • 我的網站網域的名稱   我的網站的網域是包含您組織中的所有商務用 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) 的名稱。如果文字檔案是在另一個資料夾中,輸入檔案的完整路徑名稱。

您所收集到的指令碼會提示您輸入的資訊後,最後一個步驟是執行指令碼來建立新的保留,並為其新增使用者。

  1. 使用檔案名稱的尾碼.ps1; 將下列文字儲存至Windows PowerShell指令碼檔例如,AddUsersToHold.ps1。

    #script begin
    " " 
    write-host "***********************************************"
    write-host "   Office 365 Security & Compliance Center   " -foregroundColor yellow -backgroundcolor darkgreen
    write-host "   eDiscovery cases - Add users to a hold   " -foregroundColor yellow -backgroundcolor darkgreen 
    write-host "***********************************************"
    " " 
    # Get user credentials & Connect to Office 365 SCC, SPO
    
    $credentials = Get-Credential -Message "Specify your credentials to connect to the Office 365 Security & Compliance Center and SharePoint Online"
    $s = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.compliance.protection.outlook.com/powershell-liveid" -Credential $credentials -Authentication Basic -AllowRedirection -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck)
    $a = Import-PSSession $s -AllowClobber
    
        if (!$s)
        {
            Write-Error "Couldn't create PowerShell session."
            return;
        }
    
    # Load the SharePoint assemblies from the SharePoint Online Management Shell
    # To install, go to http://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: http://go.microsoft.com/fwlink/p/?LinkId=255251 and then re-run this script."
            return;
        }
    }
    
    if (!$spCreds)
    {
        $spCreds = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($credentials.UserName, $credentials.Password)
    }
    
    # Get the user's MySite domain name. We use this to create the admin URL and root URL for OneDrive for Business
    ""
    $mySiteDomain = Read-Host "Enter the name of your organization's MySite domain. For example, 'contoso' for 'https://contoso-my.sharepoint.com'"
    ""
    
    # 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 Site 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"
    
    # 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
    $urls = @()
    foreach($emailAddress in $emailAddresses)
    {
          try{
            $prop = $UserProfileService.GetUserProfileByName("i:0#.f|membership|$emailAddress") | Where-Object { $_.Name -eq "PersonalSpace" }
            $url = $prop.values[0].value
    		if($url -ne $null){
            $furl = $mySiteUrlRoot + $url
            $urls += $furl
            Write-Host "- $emailAddress => $furl"
    		[array]$ODadded += $furl}
    	else{    
            Write-Warning "Couldn't locate OneDrive for $emailAddress"
    		[array]$ODExluded += $emailAddress
        }}
    	catch { 
    	Write-Warning "Could not locate OneDrive for $emailAddress"
    	[array]$ODExluded += $emailAddress
    	Continue }
    }
    
    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 $true | 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."}
    ""
    Write-host "Script complete!" -foregroundColor Yellow
    ""
    #script end
  2. 在您的本機電腦上開啟Windows PowerShell並移至之前儲存的指令碼的資料夾。

  3. 執行指令碼。例如︰

    .\AddUsersToHold.ps1
  4. 輸入指令碼會提示您輸入的資訊。

    指令碼連線到安全性與合規性中心使用遠端 PowerShell,然後在 [eDiscovery 案例中建立新的保留並將信箱和商務用 OneDrive的使用者清單內。若要檢視新保留安全性與合規性中心eDiscovery頁面上,您可以移至 [大小寫。

指令碼完成後執行,它會建立下列記錄檔],並將其儲存至指令碼所在的資料夾。

  • LocationsOnHold.txt   包含信箱和指令碼成功放在按住的商務用 OneDrive網站的清單。

  • LocationsNotOnHold.txt   包含信箱與商務用 OneDrive網站的指令碼並未不保留的個案的清單。如果使用者擁有的信箱,但不是商務用 OneDrive網站,使用者就會包含未保留放置商務用 OneDrive網站的清單中。

  • GetCaseHoldPolicy.txt   包含的新保留,指令碼執行之後建立新的保留Get-CaseHoldPolicy cmdlet 輸出。這個指令程式所傳回的資訊包括其信箱和商務用 OneDrive網站放在保留和保留是否已啟用或停用的使用者清單。

  • GetCaseHoldRule.txt   包含的新保留,指令碼執行之後建立新的保留Get-CaseHoldRule cmdlet 輸出。如果您用來建立保留以查詢為基礎的指令碼,這個指令程式所傳回的資訊會包含搜尋查詢。

回到頁首

附註: 機器翻譯免責聲明︰本文係以電腦系統翻譯而成,未經人為介入。Microsoft 提供此等機器翻譯旨在協助非英語系使用者輕鬆閱讀 Microsoft 產品、服務及技術相關內容。基於本文乃由機器翻譯而成,因此文中可能出現詞辭、語法、文法上之錯誤。

擴展您的技能
探索訓練
優先取得新功能
加入 Office 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與其中一位 Office 支援專員連絡以深入了解您的意見。

×