使用脚本来将用户添加到 Office 365 安全和合规性中心中的电子数据展示案例中保留

重要:  本文是由机器翻译的,请参阅免责声明。请在 此处 中查找本文的英文版本以便参考。

Office 365 安全与合规中心提供了大量Windows PowerShell cmdlet 可让您自动执行与创建和管理电子数据展示事例相关耗时的任务。目前,使用电子数据展示案例工具在安全和合规性中心放置大量的位置上的按住管理员内容需要时间和准备。例如,创建一个保留之前,您需要收集您想要将置于保持状态的每个OneDrive for Business网站的 URL。然后每个用户要放置置于保持状态,您必须添加到保留其邮箱和其OneDrive for Business网站。在将来的安全和合规性中心版本中,这将获得更容易。在此之前,您可以使用脚本本文中自动执行此过程。

将保留脚本提示您的名称的您的组织我的网站的域 (例如, contoso中 URL https://contoso-my.sharepoint.com)、 现有的电子数据展示事例的名称、 的新名称保存关联的大小写,想要放在的用户的电子邮件地址的列表,请在按住使用如果要为其创建基于查询的搜索查询。脚本然后OneDrive for Business网站的列表中的每个用户获取的 URL,创建新的保持状态,然后将每个用户的邮箱和OneDrive for Business网站列表中添加到保留。脚本还会生成日志文件中包含有关新的保留的信息。

下面是做到这一点的步骤操作︰

步骤 1︰ 安装 SharePoint Online Management Shell

步骤 2︰ 生成用户的列表

步骤 3︰ 运行脚本来创建一个保留和添加用户

开始之前

  • 您必须是安全与合规中心和SharePoint Online全局管理员才能在步骤 3 中运行脚本中的电子数据展示管理器角色组的成员。有关详细信息,请参阅在 Office 365 安全和合规性中心中的电子数据展示权限分配

  • 1000 个邮箱和 100 网站的最多可以添加到与安全与合规中心在电子数据展示事例相关联的保留。假设您想要将置于保持状态的每个用户具有OneDrive for Business网站,您可以添加到使用本文中的脚本保留的最大的 100 个用户。

  • 请务必保存您在步骤 2 和步骤 3 中的脚本到同一文件夹中创建的用户列表。将使其更轻松地运行该脚本。

  • 脚本添加到新的保留与现有事例相关联的用户列表。请确保您运行该脚本之前创建要关联的保留的事例。

  • 该脚本包括最少错误处理。其主要用途是可以轻松快速地将邮箱按住 OneDrive for Business 网站上的每个用户。

  • 本主题中提供的示例脚本在任意 Microsoft 标准支持程序或服务下都不受支持。示例脚本“原样”提供,不提供任何形式的保证。Microsoft 进一步拒绝所有默示保证,包括但不限于针对特定用途的适销性或适用性的任何默示保证。由于示例脚本及文档的使用或性能所引起的全部风险均由您承担。在任何情况下,对于由于使用或者无法使用示例脚本或文档所引起的任何损失(包括但不限于商业利润损失、业务中断、商业信息丢失或者其他经济损失),Microsoft、其作者或者参与创建、制作或交付脚本的任何人概不负责,即使 Microsoft 已被告知可能会出现此类损失。

返回页首

步骤 1︰ 安装SharePoint Online命令行管理程序

第一步是如果它尚未安装在本地计算机上安装SharePoint Online命令行管理程序。您不必使用 shell 在此过程,但您必须安装,因为它包含在步骤 3 中运行脚本所需的必备。这些先决条件允许脚本SharePoint Online以获取OneDrive for Business网站的 Url 使用进行通信。

转到设置 SharePoint Online Management Shell Windows PowerShell 环境 ,然后执行步骤 1 和步骤 2 在本地计算机上安装SharePoint Online命令行管理程序。

返回页首

步骤 2︰ 生成用户的列表

步骤 3 中的脚本将创建一个邮箱和OneDrive for Business网站的用户添加到保留的列表与电子数据展示案例,并添加具有关联的保留。在一个文本文件,只需键入电子邮件地址或您可以在Windows PowerShell以获取电子邮件地址的列表,并将其保存到文件 (位于同一个文件夹,您将在步骤 3 中保存到脚本) 运行命令。

下面介绍了的 PowerShell 命令 (使用远程 PowerShell 连接到您的组织Exchange Online运行) 以获取您的组织中的所有用户的电子邮件地址的列表,并将其保存到文本文件名为 HoldUsers.txt。

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

运行此命令之后,请打开的文本文件,然后删除包含属性名称, PrimarySmtpAddress的标题。然后删除您想要添加到您将在步骤 3 中创建保留的用户除外的所有电子邮件地址。请确保没有空白的行之前或之后的电子邮件地址的列表。

返回页首

步骤 3︰ 运行脚本来创建一个保留和添加用户

在此步骤中运行脚本时,它将提示您输入以下信息。请务必之前运行该脚本已准备好此信息。

  • 您的用户凭据   脚本将使用您的凭据连接到使用远程 PowerShell 安全与合规中心 。它将使用这些凭据访问SharePoint OnlineOneDrive for Business Url 获得的用户列表。

  • 我的网站域的名称   我的网站的域是包含您的组织中的所有OneDrive for Business网站的域。例如,如果您我的网站的域的 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,然后创建新的保留在电子数据展示事例并累加列表中的邮箱和OneDrive for Business的用户。您可以在安全与合规中心以查看新的保留的电子数据展示页上转到这种情况。

脚本运行完毕后运行,将创建下列日志文件,并将它们保存到该脚本所在的文件夹。

  • LocationsOnHold.txt   包含邮箱和成功放在该脚本按住的OneDrive for Business网站的列表。

  • LocationsNotOnHold.txt   包含脚本不是将置于保持状态的邮箱和OneDrive for Business网站的列表。如果用户具有邮箱,但不是OneDrive for Business站点,则用户会包含未置于保持状态的OneDrive for Business网站的列表中。

  • GetCaseHoldPolicy.txt   包含用于新保持状态,在创建新的保留之后运行脚本Get-CaseHoldPolicy cmdlet 输出。此 cmdlet 返回的信息包括其邮箱和OneDrive for Business网站被置于保持状态,并保留是否启用的用户的列表。

  • GetCaseHoldRule.txt   包含用于新保持状态,在创建新的保留之后运行脚本Get-CaseHoldRule cmdlet 输出。如果您使用脚本来创建一个基于查询的保留,则返回此 cmdlet 的信息包括搜索查询。

返回页首

注意: 机器翻译免责声明:本文是由无人工介入的计算机系统翻译的。Microsoft 提供机器翻译是为了帮助非英语国家/地区用户方便阅读有关 Microsoft 产品、服务和技术的内容。由于机器翻译的原因,本文可能包含词汇、语法或文法方面的错误。

扩展你的技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×