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

Exchange Online, Microsoft SharePoint ve Microsoft OneDrive Azure Rights Management hizmetini Azure Information Protection kullanacak şekilde yapılandırmanıza yardımcı olması için aşağıdaki bölümleri kullanın.

Exchange Online: IRM Yapılandırması

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

Exchange Online, Azure Rights Management hizmetini kullanmak için zaten etkinleştirilmiş olabilir. Denetlemek 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'de oluşturulan tüm hesaplar uzaktan Kabuk erişimi için etkinleştirilir, ancak bu özellik Set-User <UserIdentity> -RemotePowerShellEnabled komutu kullanılarak devre dışı bırakılabilir (ve etkinleştirilebilir).

    Oturum açmak için önce şunu yazın:

    Connect-Exchange Online
    

    Ardından, Windows PowerShell kimlik bilgisi isteği iletişim kutusunda Microsoft 365 kullanıcı adınızı ve parolanızı girin.

  3. 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 ayarlandıysa, Azure Rights Management hizmeti için Exchange Online zaten etkindir.

    • AzureRMSLicensingEnabled false olarak ayarlandıysa, Azure Rights Management hizmeti için Exchange Online etkinleştirmek üzere aşağıdaki komutu çalıştırın:Set-IRMConfiguration -AzureRMSLicensingEnabled $true

  4. Exchange Online başarıyla yapılandırıldığını test etmek 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

azure Rights Management hizmetini kullanmak için Exchange Online etkinleştirildiğinde aşağıdaki özellikleri yapılandırabilirsiniz:

Microsoft 365 ve OneDrive SharePoint: IRM Yapılandırması

SharePoint IRM'nin Azure Rights Management hizmetiyle nasıl çalıştığı hakkında bilgi için, bunun Rights Management koruma bölümünde Microsoft 365 ve SharePoint Server'da SharePoint bölümüne bakın Belge.

Microsoft 365 ve OneDrive SharePoint 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. Daha sonra, site sahipleri SharePoint listelerini ve belge kitaplıklarını IRM ile koruyabilir ve kullanıcılar OneDrive kitaplıklarını IRM ile koruyabilir, böylece oraya kaydedilen ve başkalarıyla paylaşılan belgeler Azure Rights Management hizmeti tarafından otomatik olarak korunur.

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. Azure Information Protection istemcisini yüklemiş olsanız bile RMS istemcisinin bu sürümünü yükleyin. Bu dağıtım senaryosu hakkında daha fazla bilgi için bkz. Yeni OneDrive eşitleme istemcisini kurumsal bir ortamda 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 Microsoft 365 yöneticisi tarafından gerçekleştirilir.

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'yi yapılandırma

IRM hizmetini SharePoint için etkinleştirdikten sonra, kullanıcıların OneDrive belge kitaplığı veya tek tek klasörleri Rights Management koruma için yapılandırılabilir. Kullanıcılar OneDrive web sitelerini kullanarak bunu kendileri için yapılandırabilir. Yöneticiler SharePoint yönetim merkezini kullanarak bu korumayı kendileri için yapılandıramasa da, bunu Windows PowerShell kullanarak yapabilirsiniz.

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, iş dosyalarını korumak için OneDrive yapılandırabilmeleri için aşağıdaki yönergeleri verin.

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

  2. Gezinti bölmesinde, alt kısımda Klasik OneDrive dön'e tıklayın.

  3. Ayarlar simgesini seçin. Ayarlar bölmesinde ŞeritKapalı olarak ayarlandıysa, şeridi açmak için bu ayarı seçin.

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

  5. Belgeler > Ayarlar sayfasının İzinler ve Yönetim bölümünde Bilgi Rights Management'ni seçin.

  6. Bilgi 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ı yapılandırmaları yapılandırmak için SEÇENEKLERİ 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 bunun nasıl gerçekleştirildiği hakkında eğitir. Örneğin, OneDrive bir belgeyi paylaştıklarında, dosya yeniden adlandırılıp başka bir yere kopyalanmış olsa bile, yalnızca yetki verdikleri kişilerin yapılandırdıkları kısıtlamalarla bu belgeye erişebileceğini açıklayın.

Yöneticiler için yapılandırma

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

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

  2. SharePoint Management Shell'i 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.

    **Yasal Uyarı**: 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.

      bu değeri, SharePoint yönetim merkezine gittiğiniz zaman temel URL olarak bulursunuz ve şu biçimdedir: https:// <tenant_name-admin.sharepoint.com>

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

    2. örnek değerini arayın $tenantAdmin ve Microsoft 365 için kendi tam genel yönetici hesabınızla değiştirin.

      Bu değer, Microsoft 365 yönetim merkezi genel yönetici olarak oturum açmak için kullandığınız değerle aynıdır ve şu biçimdedir: user_name@<tenant etki alanı adı.com>

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

    3. Örnek değerleri arayın $webUrls ve kullanıcılarınızın OneDrive web URL'leriyle değiştirin; ihtiyacınız olan sayıda girdi ekleyin veya silin.

      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ır olduğunuzda, tüm OneDrive URL'lerini bu adımlardan hemen sonra bir .CSV dosyasına çıkarmak için Ek betiği kullanın.

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

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

    4. OneDrive yapılandırmak için betiği kullandığımız için değişkenin Documents değerini değiştirmeyin$listTitle.

    5. ADMIN INSTRUCTIONS arayın. Bu bölümde değişiklik yapmazsanız, kullanıcının OneDrive IRM için ilke başlığı "Korumalı Dosyalar" 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 Microsoft 365 yönetici hesabının parolasını sağlayın. Komut dosyasını değiştirirseniz ve aynı Windows PowerShell oturumunda çalıştırırsanız, kimlik bilgileri istenmez.

İpucu

IRM'yi bir SharePoint kitaplığı için yapılandırmak için 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şkenini $webUrls (örneğin, https://contoso.sharepoint.com) ve $listTitle değişkeni (örneğin , $Reports) değiştirmeniz gerekir.

Kullanıcının OneDrive kitaplıkları için IRM'yi devre dışı bırakmanız gerekiyorsa, OneDrive için IRM'yi devre dışı bırakmak için betik bölümüne bakın.

Tüm OneDrive URL'lerini bir .CSV dosyasına çıkarmak için ek betik

Yukarıdaki 4c adımında, 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 url'yi daha sonra denetleyebilir, gerekirse düzenleyebilir ve ardından ana betikte içeri aktarabilirsiniz.

Bu betik ayrıca SharePoint İstemci Bileşenleri SDK'sı ve SharePoint Yönetim Kabuğu gerektirir. Kopyalayıp yapıştırmak için aynı yönergeleri izleyin, dosyayı yerel olarak kaydedin (örneğin, "Report-OneDriveForBusinessSiteInfo.ps1"), ve $tenantAdmin değerlerini daha önce olduğu gibi değiştirin $sharepointAdminCenterUrl ve betiği çalıştırın.

**Yasal Uyarı**: 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 IRM'yi devre dışı bırakmak için betik

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

Bu betik ayrıca SharePoint İstemci Bileşenleri SDK'sı ve SharePoint Yönetim Kabuğu 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'lerini el ile belirtin veya önceki bölümdeki betiği kullanarak bunları içeri aktarabilir ve ardından betiği çalıştırabilirsiniz.

**Yasal Uyarı**: 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