Microsoft 365: Azure çevrimiçi hizmetler hizmetini kullanmak için Rights Management yapılandırma

Uygulama:Azure Information Protection, Office 365

için uygun: AIP birleşik etiketleme istemcisi ve klasik istemci

Not

Birleşik ve kolaylaştırılmış bir müşteri deneyimi sağlamak için Azure portalındaki Azure Information Protection Klasik istemci ve etiket yönetimi 31 Mart 2021 itibarıyla kullanım dışıdır . Klasik istemci yapılandırıldığı şekilde çalışmaya devam ederken, başka bir destek sağlanmaz ve artık klasik istemci için bakım sürümleri yayınlanmayacaktır.

Birleşik etiketlemeye geçiş yapmanızı ve Birleşik etiketleme istemcisineyükseltmenizi öneririz. Son kullanımdan kaldırma blogumuzhakkında daha fazla bilgi edinin.

Exchange Online, Microsoft SharePoint ve Microsoft OneDrive'ı azure hizmetlerinden Azure Rights Management kullanmak üzere yapılandırmanıza yardımcı olmak için aşağıdaki Azure Information Protection.

Exchange Online: IRM Yapılandırması

Exchange Online'ın Azure Rights Management hizmetiyle nasıl çalıştığını görmek için Office uygulamaları ve hizmetleri Azure Rights Management'i nasıl destekler? bölümündeki Exchange Online ve Exchange Server bölümüne bakın.

Exchange Online, Azure Rights Management hizmetini kullanmak için zaten Rights Management olabilir. Kontrol etmek için aşağıdaki komutları çalıştırın:

  1. Bilgisayarınızda Exchange Online için Windows PowerShell’i ilk defa kullanıyorsanız, Windows PowerShell’i imzalanmış komut dosyalarını çalıştırmak üzere yapılandırmanız gerekir. Yönetici olarak çalıştır seçeneğini kullanarak Windows PowerShell oturumunuzu başlatın ve ardından şunu yazın:

    Set-ExecutionPolicy RemoteSigned
    

    Onaylamak için Y tuşuna basın.

  2. Windows PowerShell oturumunuzda, uzak Kabuk erişimi için etkinleştirilmiş bir hesap kullanarak Exchange Online’a oturum açın. Varsayılan olarak, Exchange Online'da oluşturulan tüm hesaplar uzak Kabuk erişimi için etkinleştirilir, ancak Bu, Set-User < UserIdentity > -RemotePowerShellEnabled komutu kullanılarak devre dışı bırakılabilir (ve etkinleştirilebilir).

    Oturum açma için ilk olarak şunları yazın:

    $Cred = Get-Credential
    

    Ardından, kimlik Windows PowerShell iletişim kutusunda kullanıcı adı Microsoft 365 parolanızı girin.

  3. İlk olarak bir değişken ayarerek Exchange Online hizmetine bağlanabilirsiniz:

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

    Sonra şu komutu çalıştırın:

    Import-PSSession $Session
    
  4. Koruma hizmeti için Exchange Online yapılandırmanızı görüntülemek için Get-IRMConfiguration komutunu çalıştırın:

    Get-IRMConfiguration
    

    Çıktıdan AzureRMSLicensingEnabled değerini bulun:

    • AzureRMSLicensingEnabled true olarak ayarlanırsa, Exchange Online Azure Rights Management hizmeti için etkindir.

    • AzureRMSLicensingEnabled false olarak ayarlanırsa, Azure Rights Management hizmeti için Exchange Online'Rights Management çalıştırın: Set-IRMConfiguration -AzureRMSLicensingEnabled $true

  5. Exchange Online'ın başarıyla yapılandırıldığından emin olmak için aşağıdaki komutu çalıştırın:

    Test-IRMConfiguration -Sender <user email address>
    

    Örneğin: Test-IRMConfiguration -Sender adams @ contoso.com

    Bu komut, hizmete bağlantıyı doğrulamayı, yapılandırmayı almayı, URI’leri lisansları ve herhangi bir şablonu almayı içeren bir dizi denetim çalıştırır. Windows PowerShell oturumunda, her birinin sonucunu ve sonunda her şey bu denetimleri geçerse şunu görürsünüz: OVERALL RESULT: PASS

Exchange Online'ın Azure Rights Management hizmetini kullanması etkinleştirildiğinde, posta akışı kuralları, veri kaybı önleme (DLP)ilkeleri ve korumalı sesli posta (Birleşik Mesajlaşma) gibi bilgi korumasını otomatik olarak uygulayan özellikleri yapılandırabilirsiniz.

Microsoft 365 OneDrive'da SharePoint: IRM Yapılandırması

SharePoint IRM'nin Azure Rights Management hizmetiyle nasıl çalıştığını görmek için bu belgelerin Microsoft 365 ve SharePoint Server'da SharePoint Rights Management koruma bölümüne bakın.

Microsoft 365 ve OneDrive'da SharePoint'i Azure Rights Management hizmetini destekleyecek şekilde yapılandırmak için, önce SharePoint yönetim merkezini kullanarak SharePoint için bilgi hakları yönetimi (IRM) hizmetini etkinleştirmeniz gerekir. Ardından, site sahipleri SharePoint listelerini ve belge kitaplıklarını IRM ile koruyabilir ve kullanıcılar, buraya kaydedilen ve başkalarıyla paylaşılan belgelerin Azure Rights Management hizmeti tarafından otomatik olarak korunması için OneDrive kitaplıklarını IRM ile koruyabilir.

Not

Microsoft 365 ve OneDrive'da SharePoint için IRM korumalı kitaplıklar, yeni OneDrive eşitleme istemcisinin (OneDrive.exe) en son sürümünü ve Microsoft İndirme Merkezi'nden RMS istemcisinin sürümünü gerektirir. Rms istemcisinin bu sürümünü, Azure Information Protection yükleyin. Bu dağıtım senaryosu hakkında daha fazla bilgi için bkz. Yeni OneDrive eşitleme istemcisini kurumsal bir ortama dağıtma.

SharePoint için bilgi hakları yönetimi (IRM) hizmetini etkinleştirmek için Office belgelerinde aşağıdaki yönergelere bakın:

Bu yapılandırma yönetici tarafından Microsoft 365 yapılır.

IRM’yi kitaplıklar ve listeler için yapılandırma

SharePoint için IRM hizmetini etkinleştirdikten sonra, site sahipleri SharePoint belge kitaplıklarını ve listelerini IRM ile koruyabilir. Yönergeler için, Office web sitesinden aşağıdakilere bakın:

Bu yapılandırma, SharePoint site yöneticisi tarafından yapılır.

OneDrive için IRM'i yapılandırma

SharePoint için IRM hizmetini etkinleştirdikten sonra, kullanıcıların OneDrive belge kitaplığı veya tek tek klasörler daha sonra Rights Management yalıtabilirsiniz. Kullanıcılar, OneDrive web sitesini kullanarak bunu kendileri için yapılandırabilirsiniz. Yöneticiler SharePoint yönetim merkezini kullanarak bu korumayı onlar için yapılandıramasa da, bu korumayı Windows PowerShell.

Not

OneDrive'ı yapılandırma hakkında daha fazla bilgi için OneDrive belgelerine bakın.

Kullanıcılar için yapılandırma

Kullanıcılara OneDrive'larını iş dosyalarını korumak üzere yapılandırmaları için aşağıdaki yönergeleri uygulayın.

  1. İş veya Microsoft 365 hesabınızla oturum açın ve OneDrive web sitesine gidin.

  2. Gezinti bölmesinde, alttaki Klasik OneDrive'a geri dön'i seçin.

  3. Ayarlar simgesini seçin. Ayarlar bölmesinde, Şerit Kapalı olarak ayarlanmışsa şeridi açmak için bu ayarı seçin.

  4. Korunacak tüm OneDrive dosyalarını yapılandırmak için şeritten KITAPLıK sekmesini ve ardından Kitaplık Ayarları'ı seçin.

  5. Belgeler ve > Sayfasında, İzinler ve Yönetim bölümünde Bilgi ve Yönetim'i Rights Management.

  6. Information Rights Management Ayarlar sayfasında İndirmede bu kitaplıkta izinleri kısıtla onay kutusunu seçin. İzinler için ad ve açıklama seçiminizi belirtin ve isteğe bağlı olarak, isteğe bağlı olarak, isteğe bağlı yapılandırmaları yapılandırmak için SEÇENEKLERI GÖSTER'e tıklayın ve ardından Tamam'a tıklayın.

    Yapılandırma seçenekleri hakkında daha fazla bilgi için, Office belgelerindeki Bir liste veya kitaplığa Bilgi Hakları Yönetimi uygulama için deki yönergelere bakın.

Bu yapılandırma, OneDrive dosyalarını IRM ile korumak için yönetici yerine kullanıcılara bağlı olduğundan, kullanıcıları dosyalarını korumanın avantajları ve bunu nasıl yapacakları konusunda eğitin. Örneğin, OneDrive'dan bir belgeyi paylaşırken, dosya yeniden adlandırıldığında ve başka bir yere kopyalansa bile, yalnızca yetkilendiren kişilerin yapılandırmış olduğu kısıtlamalarla belgeye erişe olduğunu açıklayacaksınız.

Yöneticiler için yapılandırma

SharePoint yönetim merkezini kullanarak kullanıcıların OneDrive'ı için IRM'yi yapılandıramazsanız da, bu Windows PowerShell. Bu kitaplıklar için IRM’yi etkinleştirmek amacıyla aşağıdaki adımları izleyin:

  1. SharePoint İstemci Bileşenleri SDK'sı'sini indirin ve yükleyin.

  2. SharePoint Yönetim Kabuğu'sunu indirip yükleyin.

  3. Aşağıdaki komut dosyasının içeriğini kopyalayın ve dosyayı bilgisayarınızda Set- IRMOnOneDriveForBusiness.ps1 olarak adlandırın.

    **Bildirim**: Bu örnek betik, herhangi bir Microsoft standart destek programı veya hizmeti altında desteklenmez. Bu örnek betik, hiçbir garanti olmaksızın OLDUĞU GİBİ sunulmaktadır.

    # 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. Komut dosyasını gözden geçirin ve aşağıdaki değişiklikleri yapın:

    1. $sharepointAdminCenterUrl arayın ve örnek değeri kendi SharePoint yönetim merkezi URL’niz ile değiştirin.

      SharePoint yönetim merkezine gidip şu biçime sahip olduğunda bu değeri temel URL olarak bulabilirsiniz: https://< tenant_name >-admin.sharepoint.com

      Örneğin, kiracı adı "contoso" ise şunları belirtmeniz gerekir: https://contoso-admin.sharepoint.com

    2. Örnek değeri $tenantAdmin arayın ve daha fazla bilgi için kendi tam genel yönetici hesabınızla Microsoft 365.

      Bu değer, genel yönetici olarak Microsoft 365 yönetim merkezi için kullanabileceğiniz değerle aynıdır ve şu biçime sahip olur: kiracı etki alanı < > user_name@ .com

      Örneğin, "Microsoft 365" kiracı etki alanı için genel yönetici kullanıcı adı "contoso.com" ise şunları belirtmeniz gerekir: admin@contoso.com

    3. Örnek değerleri $webUrls arama ve kullanıcılarının OneDrive web URL'leriyle değiştirme, ihtiyacınız olan sayıda girdi ekleme veya silme.

      Alternatif olarak, yapılandırmanız gereken tüm URL’leri içeren bir .CSV dosyasını içeri aktararak bu dizinin nasıl değiştirileceğiyle ilgili, komut dosyasında yer alan yorumlara bakın. Bu .CSV dosyasını doldurmak üzere URL’leri otomatik olarak aramak ve ayıklamak için başka bir örnek komut dosyası sağladık. Bunu yapmaya hazırsanız, bu adımlardan hemen sonra tüm OneDrive URL'lerini bir .CSV için Ek betik kullanın.

      Kullanıcının OneDrive web URL'si şu biçimdedir: https://< kiracı > adı -my.sharepoint.com/personal/< > user_name _ < kiracı adı > _com

      Örneğin, contoso kiracısı kullanıcısı "rsimone" kullanıcı adına sahipse şunları belirtmeniz gerekir: https://contoso-my.sharepoint.com/personal/rsimone_contoso_com

    4. OneDrive'ı yapılandırmak için betiği kullanıyoruz, değişkenin Documents değerini $listTitle değiştirme.

    5. ADMIN INSTRUCTIONS arayın. Bu bölümde değişiklik yapmasanız, kullanıcının OneDrive'ı IRM için "Korumalı Dosyalar" ilke başlığı ve "Bu ilke yetkili kullanıcılara erişimi kısıtlar" açıklamasıyla yapılandırılır. Başka IRM seçeneği ayarlanmaz, bu muhtemelen çoğu ortam için uygundur. Ancak, önerilen ilke başlığını ve açıklamayı değiştirebilirsiniz ve ayrıca, ortamınız için uygun olan diğer herhangi bir IRM seçeneğini ekleyebilirsiniz. Set-IrmConfiguration komutunuz için kendi parametre kümenizi inşa etmenize yardımcı olması için, komut dosyasındaki yorum yapılan örneğe bakın.

  5. Komut dosyasını kaydedin ve imzalayın. Komut dosyasını imzalamazsanız (daha güvenli), Windows PowerShell, bilgisayarınızda, imzalanmamış komut dosyalarını çalıştırmak üzere yapılandırılmalıdır. Bunu yapmak için, Windows PowerShell oturumunu Yönetici Olarak Çalıştır seçeneğiyle çalıştırın ve şunu yazın: Set-ExecutionPolicy Unrestricted. Ancak, bu yapılandırma tüm imzalanmamış komut dosyalarının çalıştırılmasını sağlar (daha az güvenlidir).

    Windows PowerShell komut dosyalarını imzalama hakkında daha fazla bilgi için, bkz. PowerShell belge kitaplığında about_Signing.

  6. Betiği çalıştırın ve istenirse, yönetici hesabı için Microsoft 365 girin. Komut dosyasını değiştirirseniz ve aynı Windows PowerShell oturumunda çalıştırırsanız, kimlik bilgileri istenmez.

İpucu

SharePoint kitaplığı için IRM'yi yapılandırmak üzere de bu betiği kullanabilirsiniz. Bu yapılandırma için, kitaplığın yalnızca korunan belgeleri içermesini sağlamak amacıyla muhtemelen Kullanıcıların, IRM'yi desteklemeyen belgeleri karşıya yüklemesine izin verme ek seçeneğini etkinleştirmek isteyeceksiniz. Bunu yapmak için, komut dosyasındaki Set-IrmConfiguration komutuna -IrmReject parametresini ekleyin.

Ayrıca değişkeni $webUrls (örneğin, https: /contoso.sharepoint.com ) ve değişkeni / (örneğin, $listTitle $Reports) değiştirmeniz gerekir.

Kullanıcının OneDrive kitaplıkları için IRM'yi devre dışı bırakmanız gerekirse, OneDrive için IRM'yi devre dışı bırakma betiği bölümüne bakın.

Tüm OneDrive URL 'Lerinin .CSV dosyasına çıkışı için ek betik

Yukarıdaki 3. adımda, tüm kullanıcıların OneDrive kitaplıklarının URL 'Lerini ayıklamak için aşağıdaki Windows PowerShell betiğini kullanabilirsiniz. Bu, daha sonra denetleyebilir, gerekirse düzenleyebilir ve ardından ana betiğe içeri aktarabilirsiniz.

Bu betik Ayrıca SharePoint Istemci bileşenleri SDK 'sını ve SharePoint Yönetim Kabuğu'nu gerektirir. Aynı yönergeleri izleyerek onu kopyalayın ve yapıştırın, dosyayı yerel olarak kaydedin (örneğin, "Report-OneDriveForBusinessSiteInfo.ps1"), $sharepointAdminCenterUrl ve $tenantAdmin değerlerini önceki gibi değiştirin ve ardından komut dosyasını çalıştırın.

**Bildirim**: Bu örnek betik, herhangi bir Microsoft standart destek programı veya hizmeti altında desteklenmez. Bu örnek betik, hiçbir garanti olmaksızın OLDUĞU GİBİ sunulmaktadır.

# 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
OneDrive için ıRM 'yi devre dışı bırakma betiği

' OneDrive ' kullanıcıları için ıRM 'yi devre dışı bırakmanız gerekirse aşağıdaki örnek betiği kullanın.

Bu betik Ayrıca SharePoint Istemci bileşenleri SDK 'sını ve SharePoint Yönetim Kabuğu'nu gerektirir. İçeriği kopyalayın ve yapıştırın, dosyayı yerel olarak kaydedin (örneğin, "Disable-IRMOnOneDriveForBusiness.ps1") ve $sharepointAdminCenterUrl ile $tenantAdmin değerlerini değiştirin. OneDrive URL 'Leri el ile belirtin veya önceki bölümde betiği kullanarak bunları içeri aktarabilir ve ardından betiği çalıştırabilirsiniz.

**Bildirim**: Bu örnek betik, herhangi bir Microsoft standart destek programı veya hizmeti altında desteklenmez. Bu örnek betik, hiçbir garanti olmaksızın OLDUĞU GİBİ sunulmaktadır.

# 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