Microsoft 365: Az online szolgáltatások konfigurálása a Azure Tartalomvédelmi szolgáltatások használatára

**

Releváns:: AIP egyesített címkéző ügyfélprogram és klasszikus ügyfélprogram

Megjegyzés

Az egységes és zökkenőmentes ügyfélélmény érdekében 2021. március 31-énelavult az Azure Information Protection klasszikus ügyfélprogramja és az Azure Portal címkekezelés szolgáltatása. A klasszikus ügyfélprogramhoz nem biztosítunk további támogatást, és a karbantartási verziók a továbbiakban nem lesznek elérhetőek.

A klasszikus ügyfél hivatalosan is kivezetve lesz, és 2022. március 31-én meg fog állni.

Az Azure Information Protection összes klasszikus ügyfélalkalmazásának át kell áttelepítést Microsoft-információvédelem egyesített címkeplatformra, és frissítenie kell az egyesített címkéző ügyfélalkalmazásra. További információt az áttelepítési blogunkban talál.

Az alábbi szakaszokkal konfigurálhatja a Exchange Online, a Microsoft SharePoint és a Microsoft OneDrive az Azure Information Protection Azure Tartalomvédelmi szolgáltatások szolgáltatás használatára.

Exchange Online: Tartalomvédelmi szolgáltatás beállítása

Az Exchange Online-alkalmazások és -szolgáltatások Azure Tartalomvédelmi szolgáltatások Exchange Online és Exchange Server című szakasza nyújt tájékoztatást a Office-alkalmazások és -szolgáltatások támogatásához című szakaszban. Azure Tartalomvédelmi szolgáltatások.

Exchange Online lehet, hogy már engedélyezve van a szolgáltatás Azure Tartalomvédelmi szolgáltatások használata. Az ellenőrzéshez futtassa az alábbi parancsokat:

  1. Ha első alkalommal használja a Windows PowerShell-kiszolgálót Exchange Online számítógépen, konfigurálnia kell a Windows PowerShell futtatását. Indítsa el Windows PowerShell munkamenetet a Futtatás rendszergazdaként lehetőséggel, majd írja be a következőt:

    Set-ExecutionPolicy RemoteSigned
    

    A megerősítéshez nyomja le az Y billentyűt.

  2. A Windows PowerShell egy olyan fiókkal jelentkezzen Exchange Online, amely lehetővé teszi a távoli shell-hozzáférést. Alapértelmezés szerint az Exchange Online-ban létrehozott összes fiók engedélyezve van a távoli rendszerhéj-hozzáféréshez, de ez a Set-User UserIdentity > -RemotePowerShellEnabled paranccsal tiltható le (és engedélyezhető).

    A bejelentkezéshez először írja be a következőt:

    $Cred = Get-Credential
    

    Ezután a Hitelesítő Windows PowerShell párbeszédpanelen adja meg a Microsoft 365 felhasználónevét és jelszavát.

  3. Csatlakozás a Exchange Online a szolgáltatáshoz egy változó első beállításával:

    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $Cred -Authentication Basic –AllowRedirection
    

    Ezután futtassa a következő parancsot:

    Import-PSSession $Session
    
  4. A get-IRMConfiguration parancsot futtatva megtekintheti a Exchange Online szolgáltatás saját konfigurációját:

    Get-IRMConfiguration
    

    A kimenetben keresse meg az AzureRMSLicensingEnabled értéket:

    • Ha az AzureRMSLicensingEnabled beállítás True (Igaz) értékre van állítva, Exchange Online a szolgáltatás már engedélyezve Azure Tartalomvédelmi szolgáltatások számára.

    • Ha az AzureRMSLicensingEnabled beállítás False(Hamis) értéket ad meg, futtassa az alábbi parancsot a Exchange Online engedélyezéséhez a Azure Tartalomvédelmi szolgáltatások szolgáltatáshoz:

  5. Ha tesztelni Exchange Online sikeres konfigurálásról, futtassa az alábbi parancsot:

    Test-IRMConfiguration -Sender <user email address>
    

    Például: Test-IRMConfiguration -Sender

    Ez a parancs ellenőrzések sorozatát futtatja, beleértve a szolgáltatáshoz való csatlakozás ellenőrzését, a konfiguráció beolvasását, az URI-k, a licencek és az esetleges sablonok beolvasását. A Windows PowerShell munkamenetben láthatja az egyes és a végén, ha minden megfelel a következő ellenőrzéseknek: OVERALL RESULT: PASS

Ha Exchange Online az Azure Tartalomvédelmi szolgáltatások szolgáltatás használatára, konfigurálhat olyan szolgáltatásokat, amelyek automatikusan alkalmazzák az információvédelmet, például az e-mail-forgalom szabályait, az adatveszteség-megelőzési (DLP-)házirendeket és a védett hangposta-szolgáltatásokat (egyesített üzenetküldés).

SharePoint a Microsoft 365 és OneDrive: Tartalomvédelmi szolgáltatás konfigurálása

A tartalomvédelmi szolgáltatás SharePoint Azure Tartalomvédelmi szolgáltatások szolgáltatásról a jelen dokumentum SharePoint in Microsoft 365 és SharePoint Server című szakaszában tájékozódhat.

Ha a Microsoft 365 és a OneDrive szolgáltatás SharePoint szolgáltatását szeretné konfigurálni, először engedélyeznie kell az Azure Tartalomvédelmi szolgáltatások tartalomvédelmi szolgáltatását (IRM) a SharePoint számára a SharePoint Felügyeleti központban. Ezután a webhelytulajdonosok A tartalomvédelmi szolgáltatás védheti SharePoint-listáik és -dokumentumtáraik védelmét, OneDrive felhasználók pedig tartalomvédelem alatt állnak, így az ott mentett és másokkal megosztott dokumentumokat automatikusan védi az Azure Tartalomvédelmi szolgáltatások szolgáltatás.

Megjegyzés

A Microsoft 365-ban és az OneDrive-ban a tartalomvédelemmel SharePoint tartalomvédelmi szolgáltatás által védett tárakhoz az új OneDrive szinkronizálási app-ügyfél (OneDrive.exe) legújabb verziója, valamint a Microsoft letöltőközpontból származó tartalomvédelmi szolgáltatás ügyfélprogram verziója szükséges. A tartalomvédelmi szolgáltatás ügyfélprogramnak ezt a verzióját akkor is telepítse, ha telepítette az Azure Information Protection ügyfélprogramot. Erről a telepítési forgatókönyvről további információt Az új ügyfélprogram OneDrive szinkronizálási app központi telepítése nagyvállalati környezetben.

Ha engedélyezni szeretné a tartalomvédelmi (IRM) szolgáltatást SharePoint, olvassa el az alábbi utasításokat a Office dokumentációjában:

Ezt a konfigurációt a rendszergazdától Microsoft 365 el.

Tartalomvédelmi szolgáltatás konfigurálása tárakhoz és listákhoz

Miután engedélyezte a tartalomvédelmi szolgáltatást a SharePoint, a webhelytulajdonosok tartalomvédelmi szolgáltatással védheti SharePoint dokumentumtárait és listáit. Az utasításokat a következő webhelyen Office el:

Ezt a konfigurációt a webhely rendszergazdája SharePoint el.

Tartalomvédelmi szolgáltatás konfigurálása OneDrive

Miután engedélyezte a tartalomvédelmi szolgáltatást a SharePoint számára, OneDrive a felhasználók dokumentumtárát vagy különálló mappáit is beállíthatja a tartalomvédelem érdekében. Ezt a felhasználók saját maguknak is beállíthatják a saját OneDrive használatával. Bár a rendszergazdák ezt a védelmet nem konfigurálhatják számukra a SharePoint Felügyeleti központban, ezt a következő Windows PowerShell.

Megjegyzés

A dokumentumok konfigurálásával kapcsolatos további OneDrive lásd a OneDrive dokumentációjában.

Konfiguráció felhasználóknak

Adja meg a felhasználóknak az alábbi utasításokat, hogy konfigurálni tudják OneDrive az üzleti fájljaik védelmére.

  1. Jelentkezzen be Microsoft 365 munkahelyi vagy iskolai fiókjával, és a OneDrive webhelyére.

  2. A navigációs ablak alján válassza a Visszatérés a klasszikus nézetbe OneDrive.

  3. Válassza a Gépház ikont. Ha a menüszalag Gépház Ki van kapcsolva, a menüszalag bekapcsol ehhez a beállításhoz válassza ezt a beállítást.

  4. Ha az összes OneDrive szeretné konfigurálni, válassza a menüszalagON a TÁR fület, majd a Táreszközök Gépház.

  5. A Dokumentumok lap Engedélyek és kezelés Gépház válassza a Rights Management (Információvédelem) lehetőséget.

  6. A Tartalomvédelem Gépház jelölje be a Tár engedélyeinek korlátozása letöltésre jelölőnégyzetet. Adja meg az engedélyek nevét és leírását, és szükség esetén kattintson a BEÁLLÍTÁSOK MEGJELENÍTÉSE elemre az opcionális konfigurációk megadásához, majd kattintson az OK gombra.

    A konfigurációs beállításokról további információt A dokumentumban található dokumentumban található Információvédelem alkalmazása listára vagy tárra Office útmutatóban talál.

Mivel ez a konfiguráció a rendszergazda helyett a felhasználókra támaszkodik az OneDrive-fájljaik védelmében, tájékoztassa a felhasználókat a fájlok védelmének előnyeiről és ennek mikéntjéiről. Mondja el például, hogy amikor az OneDrive-ból oszt meg egy dokumentumot, csak az engedéllyel rendelkező személyek férhetnek hozzá a dokumentumhoz az ön által konfigurált korlátozásokkal, még akkor is, ha a fájlt átnevezik és máshová másolják.

Konfiguráció rendszergazdáknak

Bár a tartalomvédelmi szolgáltatás nem konfigurálható OneDrive a SharePoint Felügyeleti központ használatával, ezt a következő Windows PowerShell. Ha engedélyezni szeretné az IRM-et ezekben a tárakban, kövesse az alábbi lépéseket:

  1. Töltse le és telepítse a SharePoint Client Components SDK szoftvert.

  2. Töltse le és telepítse a SharePoint Management Shellt.

  3. Másolja a vágólapra az alábbi parancsfájl tartalmát, és nevezze el Set-IRMOnOneDriveForBusiness.ps1 fájlnevet a számítógépen.

    **Jogi nyilatkozat**: Ezt a minta parancsprogramot a Microsoft egyik normál támogatási programja vagy szolgáltatása sem támogatja. Ez a minta parancsprogram adott módon, bármilyen garancia nélkül áll rendelkezésre.

    # Requires Windows PowerShell version 3
    
    <#
      Description:
    
        Configures IRM policy settings for OneDrive and can also be used for SharePoint libraries and lists
    
     Script Installation Requirements:
    
       SharePoint Client Components SDK
       https://www.microsoft.com/download/details.aspx?id=42038
    
       SharePoint Management Shell
       https://www.microsoft.com/download/details.aspx?id=35588
    
    ======
    #>
    
    # URL will be in the format https://<tenant-name>-admin.sharepoint.com
    $sharepointAdminCenterUrl = "https://contoso-admin.sharepoint.com"
    
    $tenantAdmin = "admin@contoso.com"
    
    $webUrls = @("https://contoso-my.sharepoint.com/personal/user1_contoso_com",
                 "https://contoso-my.sharepoint.com/personal/user2_contoso_com",
                 "https://contoso-my.sharepoint.com/personal/user3_contoso_com")
    
    <# As an alternative to specifying the URLs as an array, you can import them from a CSV file (no header, single value per row).
       Then, use: $webUrls = Get-Content -Path "File_path_and_name.csv"
    
    #>
    
    $listTitle = "Documents"
    
    function Load-SharePointOnlineClientComponentAssemblies
    {
        [cmdletbinding()]
        param()
    
        process
        {
            # assembly location: C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI
            try
            {
                Write-Verbose "Loading Assembly: Microsoft.Office.Client.Policy, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
                [System.Reflection.Assembly]::Load("Microsoft.Office.Client.Policy, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null
    
                Write-Verbose "Loading Assembly: Microsoft.Office.Client.TranslationServices, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
                [System.Reflection.Assembly]::Load("Microsoft.Office.Client.TranslationServices, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null
    
                Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
                [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null
    
                Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.DocumentManagement, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
                [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.DocumentManagement, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null
    
                Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.Publishing, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
                [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.Publishing, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null
    
                Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.Runtime, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
                [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.Runtime, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null
    
                Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.Search.Applications, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
                [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.Search.Applications, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null
    
                Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.Search, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
                [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.Search, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null
    
                Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.Taxonomy, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
                [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.Taxonomy, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null
    
                Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.UserProfiles, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
                [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.UserProfiles, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null
    
                return $true
            }
            catch
            {
                if($_.Exception.Message -match "Could not load file or assembly")
                {
                    Write-Error -Message "Unable to load the SharePoint Server 2013 Client Components.`nDownload Location: https://www.microsoft.com/download/details.aspx?id=42038"
                }
                else
                {
                    Write-Error -Exception $_.Exception
                }
                return $false
            }
        }
    }
    
    function Load-SharePointOnlineModule
    {
        [cmdletbinding()]
        param()
    
        process
        {
            do
            {
                # Installation location: C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell
                $spoModule = Get-Module -Name Microsoft.Online.SharePoint.PowerShell -ErrorAction SilentlyContinue
    
                if(-not $spoModule)
                {
                    try
                    {
                        Import-Module Microsoft.Online.SharePoint.PowerShell -DisableNameChecking
                        return $true
                    }
                    catch
                    {
                        if($_.Exception.Message -match "Could not load file or assembly")
                        {
                            Write-Error -Message "Unable to load the SharePoint Online Management Shell.`nDownload Location: https://www.microsoft.com/download/details.aspx?id=35588"
                        }
                        else
                        {
                            Write-Error -Exception $_.Exception
                        }
                        return $false
                    }
                }
                else
                {
                    return $true
                }
            }
            while(-not $spoModule)
        }
    }
    
    function Set-IrmConfiguration
    {
        [cmdletbinding()]
        param(
            [parameter(Mandatory=$true)][Microsoft.SharePoint.Client.List]$List,
            [parameter(Mandatory=$true)][string]$PolicyTitle,
            [parameter(Mandatory=$true)][string]$PolicyDescription,
            [parameter(Mandatory=$false)][switch]$IrmReject,
            [parameter(Mandatory=$false)][DateTime]$ProtectionExpirationDate,
            [parameter(Mandatory=$false)][switch]$DisableDocumentBrowserView,
            [parameter(Mandatory=$false)][switch]$AllowPrint,
            [parameter(Mandatory=$false)][switch]$AllowScript,
            [parameter(Mandatory=$false)][switch]$AllowWriteCopy,
            [parameter(Mandatory=$false)][int]$DocumentAccessExpireDays,
            [parameter(Mandatory=$false)][int]$LicenseCacheExpireDays,
            [parameter(Mandatory=$false)][string]$GroupName
        )
    
        process
        {
            Write-Verbose "Applying IRM Configuration on '$($List.Title)'"
    
            # reset the value to the default settings
            $list.InformationRightsManagementSettings.Reset()
    
            $list.IrmEnabled = $true
    
            # IRM Policy title and description
    
                $list.InformationRightsManagementSettings.PolicyTitle       = $PolicyTitle
                $list.InformationRightsManagementSettings.PolicyDescription = $PolicyDescription
    
            # Set additional IRM library settings
    
                # Do not allow users to upload documents that do not support IRM
                $list.IrmReject = $IrmReject.IsPresent
    
                $parsedDate = Get-Date
                if([DateTime]::TryParse($ProtectionExpirationDate, [ref]$parsedDate))
                {
                    # Stop restricting access to the library at <date>
                    $list.IrmExpire = $true
                    $list.InformationRightsManagementSettings.DocumentLibraryProtectionExpireDate = $ProtectionExpirationDate
                }
    
                # Prevent opening documents in the browser for this Document Library
                $list.InformationRightsManagementSettings.DisableDocumentBrowserView = $DisableDocumentBrowserView.IsPresent
    
            # Configure document access rights
    
                # Allow viewers to print
                $list.InformationRightsManagementSettings.AllowPrint = $AllowPrint.IsPresent
    
                # Allow viewers to run script and screen reader to function on downloaded documents
                $list.InformationRightsManagementSettings.AllowScript = $AllowScript.IsPresent
    
                # Allow viewers to write on a copy of the downloaded document
                $list.InformationRightsManagementSettings.AllowWriteCopy = $AllowWriteCopy.IsPresent
    
                if($DocumentAccessExpireDays)
                {
                    # After download, document access rights will expire after these number of days (1-365)
                    $list.InformationRightsManagementSettings.EnableDocumentAccessExpire = $true
                    $list.InformationRightsManagementSettings.DocumentAccessExpireDays   = $DocumentAccessExpireDays
                }
    
            # Set group protection and credentials interval
    
                if($LicenseCacheExpireDays)
                {
                    # Users must verify their credentials using this interval (days)
                    $list.InformationRightsManagementSettings.EnableLicenseCacheExpire = $true
                    $list.InformationRightsManagementSettings.LicenseCacheExpireDays   = $LicenseCacheExpireDays
                }
    
                if($GroupName)
                {
                    # Allow group protection. Default group:
                    $list.InformationRightsManagementSettings.EnableGroupProtection = $true
                    $list.InformationRightsManagementSettings.GroupName             = $GroupName
                }
        }
        end
        {
            if($list)
            {
                Write-Verbose "Committing IRM configuration settings on '$($list.Title)'"
                $list.InformationRightsManagementSettings.Update()
                $list.Update()
                $script:clientContext.Load($list)
                $script:clientContext.ExecuteQuery()
            }
        }
    }
    
    function Get-CredentialFromCredentialCache
    {
        [cmdletbinding()]
        param([string]$CredentialName)
    
        #if( Test-Path variable:\global:CredentialCache )
        if( Get-Variable O365TenantAdminCredentialCache -Scope Global -ErrorAction SilentlyContinue )
        {
            if($global:O365TenantAdminCredentialCache.ContainsKey($CredentialName))
            {
                Write-Verbose "Credential Cache Hit: $CredentialName"
                return $global:O365TenantAdminCredentialCache[$CredentialName]
            }
        }
        Write-Verbose "Credential Cache Miss: $CredentialName"
        return $null
    }
    
    function Add-CredentialToCredentialCache
    {
        [cmdletbinding()]
        param([System.Management.Automation.PSCredential]$Credential)
    
        if(-not (Get-Variable CredentialCache -Scope Global -ErrorAction SilentlyContinue))
        {
            Write-Verbose "Initializing the Credential Cache"
            $global:O365TenantAdminCredentialCache = @{}
        }
    
        Write-Verbose "Adding Credential to the Credential Cache"
        $global:O365TenantAdminCredentialCache[$Credential.UserName] = $Credential
    }
    
    # load the required assemblies and Windows PowerShell modules
    
        if(-not ((Load-SharePointOnlineClientComponentAssemblies) -and (Load-SharePointOnlineModule)) ) { return }
    
    # Add the credentials to the client context and SharePoint service connection
    
        # check for cached credentials to use
        $o365TenantAdminCredential = Get-CredentialFromCredentialCache -CredentialName $tenantAdmin
    
        if(-not $o365TenantAdminCredential)
        {
            # when credentials are not cached, prompt for the tenant admin credentials
            $o365TenantAdminCredential = Get-Credential -UserName $tenantAdmin -Message "Enter the password for the Microsoft 365 admin"
    
            if(-not $o365TenantAdminCredential -or -not $o365TenantAdminCredential.UserName -or $o365TenantAdminCredential.Password.Length -eq 0 )
            {
                Write-Error -Message "Could not validate the supplied tenant admin credentials"
                return
            }
    
            # add the credentials to the cache
            Add-CredentialToCredentialCache -Credential $o365TenantAdminCredential
        }
    
    # connect to Office365 first, required for SharePoint cmdlets to run
    
        Connect-SPOService -Url $sharepointAdminCenterUrl -Credential $o365TenantAdminCredential
    
    # enumerate each of the specified site URLs
    
        foreach($webUrl in $webUrls)
        {
            $grantedSiteCollectionAdmin = $false
    
            try
            {
                # establish the client context and set the credentials to connect to the site
                $script:clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($webUrl)
                $script:clientContext.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($o365TenantAdminCredential.UserName, $o365TenantAdminCredential.Password)
    
                # initialize the site and web context
                $script:clientContext.Load($script:clientContext.Site)
                $script:clientContext.Load($script:clientContext.Web)
                $script:clientContext.ExecuteQuery()
    
                # load and ensure the tenant admin user account if present on the target SharePoint site
                $tenantAdminUser = $script:clientContext.Web.EnsureUser($o365TenantAdminCredential.UserName)
                $script:clientContext.Load($tenantAdminUser)
                $script:clientContext.ExecuteQuery()
    
                # check if the tenant admin is a site admin
                if( -not $tenantAdminUser.IsSiteAdmin )
                {
                    try
                    {
                        # grant the tenant admin temporary admin rights to the site collection
                        Set-SPOUser -Site $script:clientContext.Site.Url -LoginName $o365TenantAdminCredential.UserName -IsSiteCollectionAdmin $true | Out-Null
                        $grantedSiteCollectionAdmin = $true
                    }
                    catch
                    {
                        Write-Error $_.Exception
                        return
                    }
                }
    
                try
                {
                    # load the list orlibrary using CSOM
    
                    $list = $null
                    $list = $script:clientContext.Web.Lists.GetByTitle($listTitle)
                    $script:clientContext.Load($list)
                    $script:clientContext.ExecuteQuery()
    
                    # **************  ADMIN INSTRUCTIONS  **************
                    # If necessary, modify the following Set-IrmConfiguration parameters to match your required values
                    # The supplied options and values are for example only
                    # Example that shows the Set-IrmConfiguration command with all parameters: Set-IrmConfiguration -List $list -PolicyTitle "Protected Files" -PolicyDescription "This policy restricts access to authorized users" -IrmReject -ProtectionExpirationDate $(Get-Date).AddDays(180) -DisableDocumentBrowserView -AllowPrint -AllowScript -AllowWriteCopy -LicenseCacheExpireDays 25 -DocumentAccessExpireDays 90
    
                    Set-IrmConfiguration -List $list -PolicyTitle "Protected Files" -PolicyDescription "This policy restricts access to authorized users"  
                }
                catch
                {
                    Write-Error -Message "Error setting IRM configuration on site: $webUrl.`nError Details: $($_.Exception.ToString())"
                }
           }
           finally
           {
                if($grantedSiteCollectionAdmin)
                {
                    # remove the temporary admin rights to the site collection
                    Set-SPOUser -Site $script:clientContext.Site.Url -LoginName $o365TenantAdminCredential.UserName -IsSiteCollectionAdmin $false | Out-Null
                }
           }
        }
    
    Disconnect-SPOService -ErrorAction SilentlyContinue
    
  4. Tekintse át a parancsfájlt, és tegye a következő módosításokat:

    1. Keresse meg a példaértéket, és cserélje le a saját SharePoint $sharepointAdminCenterUrl felügyeleti központ URL-címére.

      Ez az érték lesz az alap URL-cím, amikor a SharePoint Felügyeleti központba lép, és a következő formátumot használja: https:// tenant_name >-admin.sharepoint.com

      Ha például a bérlő neve "contoso", a következőt kell megadnia: https://contoso-admin.sharepoint.com

    2. Keresse meg a példaértéket, és cserélje le a saját teljesen minősített $tenantAdmin globális rendszergazdai fiókjára a Microsoft 365.

      Ez az érték megegyezik a Microsoft 365 Felügyeleti központ-be való bejelentkezéshez használt értékkel, és a következő formátumú: user_name@ bérlő tartományneve >.com

      Ha például a Microsoft 365 rendszergazdai felhasználóneve "rendszergazda", a "contoso.com" bérlői tartományhoz az alábbit kell megadnia:admin@contoso.com

    3. Keressen rá a példaértékre, és cserélje le a felhasználók webes URL-címeit OneDrive, és szükség szerint adja hozzá vagy törölje $webUrls a bejegyzéseket.

      Másik lehetőségként a parancsfájl megjegyzéseit is láthatja arról, hogy miként cserélheti le ezt a tömböt egy olyan .CSV-fájl importálásával, amely az összes konfigurálni kívánt URL-t tartalmazza. Egy másik parancsfájlt biztosítunk, amely automatikusan megkeresi és kinyeri az URL-címeket a .CSV feltöltéséhez. Ha készen áll erre, a További parancsfájllal közvetlenül az OneDrive fájlszakaszba .CSV összes URL-t kimenetként használhatja.

      A felhasználó tartománynevének webes URL-OneDrive a következő formátumú: https:// bérlő >neve -my.sharepoint.com/personal/>_<_com

      Ha például a contoso bérlő felhasználója "rsimone" felhasználónevet használ, a következőt kell megadnia: https://contoso-my.sharepoint.com/personal/rsimone_contoso_com

    4. Mivel a parancsfájlt a OneDrive használjuk, ne módosítsa a Documents (Dokumentumok) értékét a változóhoz.

    5. Keresse meg a ADMIN INSTRUCTIONS () keresőt. Ha nem módosítja ezt a szakaszt, a felhasználó OneDrive szolgáltatása úgy lesz konfigurálva az IRM-hez, hogy a házirend címe "Védett fájlok", és a "Ez a házirend korlátozza a hozzáférést az engedéllyel rendelkező felhasználóknak" leírást tartalmazza. Más tartalomvédelmi beállításokat nem ad meg, ami valószínűleg megfelelő a legtöbb környezetben. Módosíthatja azonban a házirend javasolt címét és leírását, valamint a környezetének megfelelő egyéb tartalomvédelmi beállításokat is hozzáadhat. A parancsfájlban a megjegyzésben látható példával saját paramétereket állíthat össze a Set-IrmConfiguration parancshoz.

  5. Mentse a parancsfájlt, és írja alá. Ha nem írja alá a parancsfájlt (biztonságosabb), akkor Windows PowerShell kell konfigurálnia a számítógépen az aláíratlan parancsfájlok futtatásához. Ehhez futtason egy Windows PowerShell Futtatás rendszergazdaként lehetőséggel, és írja be a következőt: Set-ExecutionPolicy Unrestricted. Ezzel a konfigurációval azonban minden aláíratlan parancsfájl futtatható (kevésbé biztonságos).

    A parancsfájlok Windows PowerShell A about_Signing a PowerShell dokumentációtára tartalmazza.

  6. Futtassa a parancsfájlt, és ha a rendszer kéri, írja be a rendszergazdai Microsoft 365 jelszavát. Ha módosítja a parancsfájlt, és ugyanazon a munkamenetben futtatja Windows PowerShell munkamenetben, a rendszer nem kér hitelesítő adatokat.

Tipp

Ezzel a parancsfájlral konfigurálhatja a tartalomvédelmi szolgáltatását egy SharePoint számára. Ebben a konfigurációban valószínűleg engedélyeznie kell a Nem engedélyezi a felhasználóknak a tartalomvédelmi szolgáltatás által nem támogatott dokumentumok feltöltését, hogy a tár csak védett dokumentumokat tartalmaz. Ehhez adja hozzá a paramétert a -IrmReject Set-IrmConfiguration parancsprogramban.

A változót (például ) és a változót $webUrlshttps://contoso.sharepoint.com is $listTitle módosítania kell (például a $webUrls

Ha le kell tiltania az IRM-et a felhasználói OneDrive, tekintse meg a Parancsfájl a tartalomvédelmi szolgáltatás letiltásához című OneDrive szakaszt.

További parancsprogram a OneDrive URL-címének kimenetként való .CSV fájlhoz

A fenti 4c. lépésben az alábbi Windows PowerShell-parancsprogram segítségével kinyerheti az URL-címeket az összes felhasználó OneDrive-tárához, amelyeket szükség esetén ellenőrizhet, szerkeszthet, majd importálhat a fő parancsfájlba.

Ehhez a parancsprogramhoz szükség SharePoint Client Components SDK csomagra és a SharePoint Management Shellre. Kövesse a fenti utasításokat a másoláshoz és beillesztéshez, mentse a fájlt helyileg (például "Report-OneDriveForBusinessSiteInfo.ps1"), módosítsa az értékeket a korábban megadottak szerint, majd futtassa a $sharepointAdminCenterUrl$tenantAdmin parancsfájlt.

**Jogi nyilatkozat**: Ezt a minta parancsprogramot a Microsoft egyik normál támogatási programja vagy szolgáltatása sem támogatja. Ez a minta parancsprogram adott módon, bármilyen garancia nélkül áll rendelkezésre.

# Requires Windows PowerShell version 3

<#
  Description:

    Queries the search service of a Microsoft 365 tenant to retrieve all OneDrive sites.  
    Details of the discovered sites are written to a .CSV file (by default,"OneDriveForBusinessSiteInfo_<date>.csv").

 Script Installation Requirements:

   SharePoint Client Components SDK
   https://www.microsoft.com/download/details.aspx?id=42038

   SharePoint Management Shell
   https://www.microsoft.com/download/details.aspx?id=35588

======
#>

# URL will be in the format https://<tenant-name>-admin.sharepoint.com
$sharepointAdminCenterUrl = "https://contoso-admin.sharepoint.com"

$tenantAdmin = "admin@contoso.onmicrosoft.com"                           

$reportName = "OneDriveForBusinessSiteInfo_$((Get-Date).ToString("yyyy-MM-dd_hh.mm.ss")).csv"

$oneDriveForBusinessSiteUrls= @()
$resultsProcessed = 0

function Load-SharePointOnlineClientComponentAssemblies
{
    [cmdletbinding()]
    param()

    process
    {
        # assembly location: C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI
        try
        {
            Write-Verbose "Loading Assembly: Microsoft.Office.Client.Policy, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.Office.Client.Policy, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.Office.Client.TranslationServices, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.Office.Client.TranslationServices, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.DocumentManagement, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.DocumentManagement, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.Publishing, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.Publishing, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.Runtime, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.Runtime, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.Search.Applications, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.Search.Applications, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.Search, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.Search, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.Taxonomy, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.Taxonomy, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.UserProfiles, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.UserProfiles, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            return $true
        }
        catch
        {
            if($_.Exception.Message -match "Could not load file or assembly")
            {
                Write-Error -Message "Unable to load the SharePoint Server 2013 Client Components.`nDownload Location: https://www.microsoft.com/download/details.aspx?id=42038"
            }
            else
            {
                Write-Error -Exception $_.Exception
            }
            return $false
        }
    }
}

function Load-SharePointOnlineModule
{
    [cmdletbinding()]
    param()

    process
    {
        do
        {
            # Installation location: C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell
            $spoModule = Get-Module -Name Microsoft.Online.SharePoint.PowerShell -ErrorAction SilentlyContinue

            if(-not $spoModule)
            {
                try
                {
                    Import-Module Microsoft.Online.SharePoint.PowerShell -DisableNameChecking
                    return $true
                }
                catch
                {
                    if($_.Exception.Message -match "Could not load file or assembly")
                    {
                        Write-Error -Message "Unable to load the SharePoint Online Management Shell.`nDownload Location: https://www.microsoft.com/download/details.aspx?id=35588"
                    }
                    else
                    {
                        Write-Error -Exception $_.Exception
                    }
                    return $false
                }
            }
            else
            {
                return $true
            }
        }
        while(-not $spoModule)
    }
}

function Get-CredentialFromCredentialCache
{
    [cmdletbinding()]
    param([string]$CredentialName)

    #if( Test-Path variable:\global:CredentialCache )
    if( Get-Variable O365TenantAdminCredentialCache -Scope Global -ErrorAction SilentlyContinue )
    {
        if($global:O365TenantAdminCredentialCache.ContainsKey($CredentialName))
        {
            Write-Verbose "Credential Cache Hit: $CredentialName"
            return $global:O365TenantAdminCredentialCache[$CredentialName]
        }
    }
    Write-Verbose "Credential Cache Miss: $CredentialName"
    return $null
}

function Add-CredentialToCredentialCache
{
    [cmdletbinding()]
    param([System.Management.Automation.PSCredential]$Credential)

    if(-not (Get-Variable CredentialCache -Scope Global -ErrorAction SilentlyContinue))
    {
        Write-Verbose "Initializing the Credential Cache"
        $global:O365TenantAdminCredentialCache = @{}
    }

    Write-Verbose "Adding Credential to the Credential Cache"
    $global:O365TenantAdminCredentialCache[$Credential.UserName] = $Credential
}

# load the required assemblies and Windows PowerShell modules

    if(-not ((Load-SharePointOnlineClientComponentAssemblies) -and (Load-SharePointOnlineModule)) ) { return }

# Add the credentials to the client context and SharePoint service connection

    # check for cached credentials to use
    $o365TenantAdminCredential = Get-CredentialFromCredentialCache -CredentialName $tenantAdmin

    if(-not $o365TenantAdminCredential)
    {
        # when credentials are not cached, prompt for the tenant admin credentials
        $o365TenantAdminCredential = Get-Credential -UserName $tenantAdmin -Message "Enter the password for the Office 365 admin"

        if(-not $o365TenantAdminCredential -or -not $o365TenantAdminCredential.UserName -or $o365TenantAdminCredential.Password.Length -eq 0 )
        {
            Write-Error -Message "Could not validate the supplied tenant admin credentials"
            return
        }

        # add the credentials to the cache
        Add-CredentialToCredentialCache -Credential $o365TenantAdminCredential
    }

# establish the client context and set the credentials to connect to the site

    $clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($sharepointAdminCenterUrl)
    $clientContext.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($o365TenantAdminCredential.UserName, $o365TenantAdminCredential.Password)

# run a query against the Microsoft 365 tenant search service to retrieve all OneDrive URLs

    do
    {
        # build the query object
	    $query = New-Object Microsoft.SharePoint.Client.Search.Query.KeywordQuery($clientContext)
	    $query.TrimDuplicates        = $false
	    $query.RowLimit              = 500
	    $query.QueryText             = "SPSiteUrl:'/personal/' AND contentclass:STS_Site"
	    $query.StartRow              = $resultsProcessed
	    $query.TotalRowsExactMinimum = 500000

        # run the query
	    $searchExecutor = New-Object Microsoft.SharePoint.Client.Search.Query.SearchExecutor($clientContext)
	    $queryResults = $searchExecutor.ExecuteQuery($query)
	    $clientContext.ExecuteQuery()

        # enumerate the search results and store the site URLs
        $queryResults.Value[0].ResultRows | % {
            $oneDriveForBusinessSiteUrls += $_.Path
            $resultsProcessed++
        }
    }
    while($resultsProcessed -lt $queryResults.Value.TotalRows)

$oneDriveForBusinessSiteUrls | Out-File -FilePath $reportName
Parancsprogram a tartalomvédelmi szolgáltatás OneDrive

Ha le szeretné tiltani az IRM-et a felhasználók felhasználói OneDrive.

Ehhez a parancsprogramhoz szükség SharePoint Client Components SDK csomagra és a SharePoint Management Shellre. Másolja és illessze be a tartalmat, mentse a fájlt helyileg (például "Disable-IRMOnOneDriveForBusiness.ps1"), és módosítsa $sharepointAdminCenterUrl a és az $tenantAdmin értékeket. Manuálisan adja meg OneDrive URL-címeket, vagy használja az előző szakaszban található parancsfájlt, hogy importálni tudja ezeket, majd futtassa a parancsfájlt.

**Jogi nyilatkozat**: Ezt a minta parancsprogramot a Microsoft egyik normál támogatási programja vagy szolgáltatása sem támogatja. Ez a minta parancsprogram adott módon, bármilyen garancia nélkül áll rendelkezésre.

# Requires Windows PowerShell version 3

<#
  Description:

    Disables IRM for OneDrive and can also be used for SharePoint libraries and lists

 Script Installation Requirements:

   SharePoint Client Components SDK
   https://www.microsoft.com/download/details.aspx?id=42038

   SharePoint Management Shell
   https://www.microsoft.com/download/details.aspx?id=35588

======
#>

$sharepointAdminCenterUrl = "https://contoso-admin.sharepoint.com"

$tenantAdmin = "admin@contoso.com"

$webUrls = @("https://contoso-my.sharepoint.com/personal/user1_contoso_com",
             "https://contoso-my.sharepoint.com/personal/user2_contoso_com",
             "https://contoso-my.sharepoint.com/personal/person3_contoso_com")

<# As an alternative to specifying the URLs as an array, you can import them from a CSV file (no header, single value per row).
   Then, use: $webUrls = Get-Content -Path "File_path_and_name.csv"

#>

$listTitle = "Documents"

function Load-SharePointOnlineClientComponentAssemblies
{
    [cmdletbinding()]
    param()

    process
    {
        # assembly location: C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI
        try
        {
            Write-Verbose "Loading Assembly: Microsoft.Office.Client.Policy, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.Office.Client.Policy, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.Office.Client.TranslationServices, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.Office.Client.TranslationServices, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.DocumentManagement, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.DocumentManagement, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.Publishing, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.Publishing, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.Runtime, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.Runtime, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.Search.Applications, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.Search.Applications, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.Search, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.Search, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.Taxonomy, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.Taxonomy, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            Write-Verbose "Loading Assembly: Microsoft.SharePoint.Client.UserProfiles, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
            [System.Reflection.Assembly]::Load("Microsoft.SharePoint.Client.UserProfiles, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") | Out-Null

            return $true
        }
        catch
        {
            if($_.Exception.Message -match "Could not load file or assembly")
            {
                Write-Error -Message "Unable to load the SharePoint Server 2013 Client Components.`nDownload Location: https://www.microsoft.com/download/details.aspx?id=42038"
            }
            else
            {
                Write-Error -Exception $_.Exception
            }
            return $false
        }
    }
}

function Load-SharePointOnlineModule
{
    [cmdletbinding()]
    param()

    process
    {
        do
        {
            # Installation location: C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell
            $spoModule = Get-Module -Name Microsoft.Online.SharePoint.PowerShell -ErrorAction SilentlyContinue

            if(-not $spoModule)
            {
                try
                {
                    Import-Module Microsoft.Online.SharePoint.PowerShell -DisableNameChecking
                    return $true
                }
                catch
                {
                    if($_.Exception.Message -match "Could not load file or assembly")
                    {
                        Write-Error -Message "Unable to load the SharePoint Online Management Shell.`nDownload Location: https://www.microsoft.com/download/details.aspx?id=35588"
                    }
                    else
                    {
                        Write-Error -Exception $_.Exception
                    }
                    return $false
                }
            }
            else
            {
                return $true
            }
        }
        while(-not $spoModule)
    }
}

function Remove-IrmConfiguration
{
    [cmdletbinding()]
    param(
        [parameter(Mandatory=$true)][Microsoft.SharePoint.Client.List]$List
    )

    process
    {
        Write-Verbose "Disabling IRM Configuration on '$($List.Title)'"

        $List.IrmEnabled = $false
        $List.IrmExpire  = $false
        $List.IrmReject  = $false
        $List.InformationRightsManagementSettings.Reset()
    }
    end
    {
        if($List)
        {
            Write-Verbose "Committing IRM configuration settings on '$($list.Title)'"
            $list.InformationRightsManagementSettings.Update()
            $list.Update()
            $script:clientContext.Load($list)
            $script:clientContext.ExecuteQuery()
        }
    }
}

function Get-CredentialFromCredentialCache
{
    [cmdletbinding()]
    param([string]$CredentialName)

    #if( Test-Path variable:\global:CredentialCache )
    if( Get-Variable O365TenantAdminCredentialCache -Scope Global -ErrorAction SilentlyContinue )
    {
        if($global:O365TenantAdminCredentialCache.ContainsKey($CredentialName))
        {
            Write-Verbose "Credential Cache Hit: $CredentialName"
            return $global:O365TenantAdminCredentialCache[$CredentialName]
        }
    }
    Write-Verbose "Credential Cache Miss: $CredentialName"
    return $null
}

function Add-CredentialToCredentialCache
{
    [cmdletbinding()]
    param([System.Management.Automation.PSCredential]$Credential)

    if(-not (Get-Variable CredentialCache -Scope Global -ErrorAction SilentlyContinue))
    {
        Write-Verbose "Initializing the Credential Cache"
        $global:O365TenantAdminCredentialCache = @{}
    }

    Write-Verbose "Adding Credential to the Credential Cache"
    $global:O365TenantAdminCredentialCache[$Credential.UserName] = $Credential
}

# load the required assemblies and Windows PowerShell modules

    if(-not ((Load-SharePointOnlineClientComponentAssemblies) -and (Load-SharePointOnlineModule)) ) { return }

# Add the credentials to the client context and SharePoint service connection

    # check for cached credentials to use
    $o365TenantAdminCredential = Get-CredentialFromCredentialCache -CredentialName $tenantAdmin

    if(-not $o365TenantAdminCredential)
    {
        # when credentials are not cached, prompt for the tenant admin credentials
        $o365TenantAdminCredential = Get-Credential -UserName $tenantAdmin -Message "Enter the password for the Office 365 admin"

        if(-not $o365TenantAdminCredential -or -not $o365TenantAdminCredential.UserName -or $o365TenantAdminCredential.Password.Length -eq 0 )
        {
            Write-Error -Message "Could not validate the supplied tenant admin credentials"
            return
        }

        # add the credentials to the cache
        Add-CredentialToCredentialCache -Credential $o365TenantAdminCredential
    }

# connect to Office365 first, required for SharePoint cmdlets to run

    Connect-SPOService -Url $sharepointAdminCenterUrl -Credential $o365TenantAdminCredential

# enumerate each of the specified site URLs

    foreach($webUrl in $webUrls)
    {
        $grantedSiteCollectionAdmin = $false

        try
        {
            # establish the client context and set the credentials to connect to the site
            $script:clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($webUrl)
            $script:clientContext.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($o365TenantAdminCredential.UserName, $o365TenantAdminCredential.Password)

            # initialize the site and web context
            $script:clientContext.Load($script:clientContext.Site)
            $script:clientContext.Load($script:clientContext.Web)
            $script:clientContext.ExecuteQuery()

            # load and ensure the tenant admin user account if present on the target SharePoint site
            $tenantAdminUser = $script:clientContext.Web.EnsureUser($o365TenantAdminCredential.UserName)
            $script:clientContext.Load($tenantAdminUser)
            $script:clientContext.ExecuteQuery()

            # check if the tenant admin is a site admin
            if( -not $tenantAdminUser.IsSiteAdmin )
            {
                try
                {
                    # grant the tenant admin temporary admin rights to the site collection
                    Set-SPOUser -Site $script:clientContext.Site.Url -LoginName $o365TenantAdminCredential.UserName -IsSiteCollectionAdmin $true | Out-Null
                    $grantedSiteCollectionAdmin = $true
                }
                catch
                {
                    Write-Error $_.Exception
                    return
                }
            }

            try
            {
                # load the list orlibrary using CSOM

                $list = $null
                $list = $script:clientContext.Web.Lists.GetByTitle($listTitle)
                $script:clientContext.Load($list)
                $script:clientContext.ExecuteQuery()

               Remove-IrmConfiguration -List $list
            }
            catch
            {
                Write-Error -Message "Error setting IRM configuration on site: $webUrl.`nError Details: $($_.Exception.ToString())"
            }
       }
       finally
       {
            if($grantedSiteCollectionAdmin)
            {
                # remove the temporary admin rights to the site collection
                Set-SPOUser -Site $script:clientContext.Site.Url -LoginName $o365TenantAdminCredential.UserName -IsSiteCollectionAdmin $false | Out-Null
            }
       }
    }

Disconnect-SPOService -ErrorAction SilentlyContinue