Skip to content
Rishan Solutions
Rishan Solutions
  • PowerApps
  • SharePoint online
    • Uncategorized
    • Uncategorized
  • PowerAutomate
Rishan Solutions
Latest Posts
  • Agentic AI: The Dawn of Autonomous Intelligence Revolutionizing 2025 June 24, 2025
  • Recursive Queries in T-SQL May 7, 2025
  • Generating Test Data with CROSS JOIN May 7, 2025
  • Working with Hierarchical Data May 7, 2025
  • Using TRY_CAST vs CAST May 7, 2025
  • Dynamic SQL Execution with sp_executesql May 7, 2025

Enforcing Compliance Policies using PnP PowerShell

Posted on March 18, 2025March 18, 2025 by Rishan Solutions

Loading

1. Introduction

Enforcing compliance policies in SharePoint Online ensures data protection, governance, and regulatory adherence. Using PnP PowerShell, organizations can:

Restrict external sharing
Apply retention policies to prevent data loss
Assign sensitivity labels for data classification
Audit compliance settings
Automate policy enforcement


2. Prerequisites

Before enforcing compliance policies, ensure:

  • PnP PowerShell is installed Install-Module -Name PnP.PowerShell -Scope CurrentUser -Force
  • You have SharePoint Admin or Global Admin permissions
  • You have the SharePoint Admin Center URL of your tenant

3. Connecting to SharePoint Online

Before configuring compliance policies, connect to SharePoint Online:

$AdminURL = "https://yourtenant-admin.sharepoint.com"
Connect-PnPOnline -Url $AdminURL -Interactive
  • Replace "yourtenant" with your actual SharePoint tenant name.
  • This prompts you to log in using Microsoft 365 credentials.

4. Setting Up Compliance Policies

A. Enforcing External Sharing Restrictions

To prevent unauthorized external sharing, disable external sharing on all SharePoint sites:

$Sites = Get-PnPTenantSite | Where-Object { $_.SharingCapability -ne "Disabled" }

foreach ($Site in $Sites) {
Set-PnPTenantSite -Url $Site.Url -SharingCapability Disabled
Write-Host "External Sharing Disabled for $($Site.Url)"
}

This script disables external sharing for all SharePoint sites.

Allow External Sharing Only for Specific Sites

If external sharing is needed for specific sites, allow it only for existing external users:

$SiteURL = "https://yourtenant.sharepoint.com/sites/ExternalCollaboration"
Set-PnPTenantSite -Url $SiteURL -SharingCapability ExistingExternalUserSharingOnly
Write-Host "External sharing restricted to existing external users for $SiteURL"

Now, only pre-approved external users can access shared files.


B. Applying Retention Policies

Retention policies prevent accidental or malicious data deletion. Apply a 7-year retention policy to SharePoint libraries:

$SiteURL = "https://yourtenant.sharepoint.com/sites/Compliance"
Connect-PnPOnline -Url $SiteURL -Interactive

$List = Get-PnPList -Identity "Documents"
Set-PnPList -Identity $List.Id -EnableVersioning $true -EnableModeration $true -RetentionEnabled $true -RetentionPeriod 2555
Write-Host "Retention policy applied for 7 years on $($List.Title)"

Key Configurations:

  • Enables versioning and approval workflows.
  • Ensures files are retained for 7 years (2555 days) before deletion.

C. Configuring Sensitivity Labels

Sensitivity labels classify content based on confidentiality. Assign a sensitivity label to a document library:

$SiteURL = "https://yourtenant.sharepoint.com/sites/Security"
Connect-PnPOnline -Url $SiteURL -Interactive

$LibraryName = "ConfidentialDocs"
Set-PnPList -Identity $LibraryName -Classification "Highly Confidential"
Write-Host "Sensitivity label 'Highly Confidential' applied to $LibraryName"

This helps in restricting file sharing and enforcing encryption.


D. Restricting Access Based on Location

Prevent users from accessing SharePoint from untrusted locations:

Set-PnPTenant -IPAllowList @("192.168.1.0/24", "203.0.113.0/24") -BlockAllIPRangesExceptAllowed $true
Write-Host "Access restricted to approved IP addresses"

This ensures only users from trusted networks can access SharePoint.


5. Auditing Compliance Policies

A. Check External Sharing Settings for All Sites

To verify external sharing settings:

$SharingSettings = Get-PnPTenantSite | Select-Object Url, SharingCapability
$SharingSettings | Format-Table -AutoSize

This lists all SharePoint sites and their external sharing status.


B. Generate Compliance Report

To audit compliance settings and export them to CSV:

$ComplianceReport = @()
$Sites = Get-PnPTenantSite

foreach ($Site in $Sites) {
$ComplianceReport += [PSCustomObject]@{
SiteURL = $Site.Url
SharingStatus = $Site.SharingCapability
Sensitivity = (Get-PnPList -Identity "Documents").Classification
Retention = (Get-PnPList -Identity "Documents").RetentionEnabled
}
}

$ComplianceReport | Export-Csv -Path "C:\Reports\ComplianceReport.csv" -NoTypeInformation
Write-Host "Compliance Report Exported Successfully!"

The report includes:
External sharing status
Sensitivity label assigned
Retention policy enabled


6. Automating Compliance Policy Enforcement

To automate compliance enforcement, create a script (Enforce-Compliance.ps1) and schedule it using Task Scheduler.

Save the Script

$Sites = Get-PnPTenantSite

foreach ($Site in $Sites) {
# Disable external sharing
Set-PnPTenantSite -Url $Site.Url -SharingCapability Disabled

# Apply sensitivity label
Set-PnPList -Identity "Documents" -Classification "Confidential"

# Enable retention policy
Set-PnPList -Identity "Documents" -RetentionEnabled $true -RetentionPeriod 2555
}

Write-Host "Compliance Policies Enforced Successfully!"

Schedule the Task

  1. Open Task Scheduler.
  2. Click Create Basic Task.
  3. Choose a Trigger (e.g., weekly).
  4. Select Action > Start a Program.
  5. Set Program/Script to powershell.exe.
  6. In Add Arguments, enter: -File "C:\Path\To\Enforce-Compliance.ps1"
  7. Click Finish to enable automation.

Now, compliance policies are automatically enforced!

Posted Under PNP PowerShellaccess control Compliance Policies data governance external sharing Microsoft 365 PNP PowerShell Retention Policies Security Compliance Sensitivity Labels SharePoint online

Post navigation

Microsoft.Extensions.DependencyInjection.Abstractions.ServiceProvider – Unable to resolve service
System.InvalidOperationException – Cannot create an instance of abstract class

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Agentic AI: The Dawn of Autonomous Intelligence Revolutionizing 2025
  • Recursive Queries in T-SQL
  • Generating Test Data with CROSS JOIN
  • Working with Hierarchical Data
  • Using TRY_CAST vs CAST

Recent Comments

  1. Michael Francis on Search , Filter and Lookup in power apps
  2. A WordPress Commenter on Hello world!

Archives

  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • March 2024
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • June 2023
  • May 2023
  • April 2023
  • February 2023
  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • January 2022

Categories

  • Active Directory
  • AI
  • AngularJS
  • Blockchain
  • Button
  • Buttons
  • Choice Column
  • Cloud
  • Cloud Computing
  • Data Science
  • Distribution List
  • DotNet
  • Dynamics365
  • Excel Desktop
  • Extended Reality (XR) – AR, VR, MR
  • Gallery
  • Icons
  • IoT
  • Java
  • Java Script
  • jQuery
  • Microsoft Teams
  • ML
  • MS Excel
  • MS Office 365
  • MS Word
  • Office 365
  • Outlook
  • PDF File
  • PNP PowerShell
  • Power BI
  • Power Pages
  • Power Platform
  • Power Virtual Agent
  • PowerApps
  • PowerAutomate
  • PowerPoint Desktop
  • PVA
  • Python
  • Quantum Computing
  • Radio button
  • ReactJS
  • Security Groups
  • SharePoint Document library
  • SharePoint online
  • SharePoint onpremise
  • SQL
  • SQL Server
  • Template
  • Uncategorized
  • Variable
  • Visio
  • Visual Studio code
  • Windows
© Rishan Solutions 2025 | Designed by PixaHive.com.
  • Rishan Solutions