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

Validating SharePoint Online Migration Integrity using PnP PowerShell

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

Loading

Migrating data to SharePoint Online requires ensuring that all files, metadata, and permissions are correctly transferred. PnP PowerShell allows you to validate migration integrity by comparing file sizes, metadata, permissions, and version history before and after the migration.


Key Aspects of Migration Validation

✔ File Integrity – Ensure files are not corrupted or missing after migration.
✔ Metadata Validation – Verify metadata such as created date, modified date, author, and version history.
✔ Permissions Check – Confirm that user access rights remain unchanged.
✔ Site Structure Comparison – Validate that document libraries, lists, and folders match the source.
✔ Audit Logs & Reporting – Generate reports to track validation progress.


Step 1: Connect to SharePoint Online

Before validating migration integrity, establish a connection to both the source and destination SharePoint Online sites.

$sourceSite = "https://oldtenant.sharepoint.com/sites/SourceSite"
$destSite = "https://newtenant.sharepoint.com/sites/DestinationSite"

# Connect to Source SharePoint
Connect-PnPOnline -Url $sourceSite -Interactive

# Connect to Destination SharePoint
Connect-PnPOnline -Url $destSite -Interactive

✔ Ensures access to both old and new environments.


Step 2: Validate File Count in Document Libraries

Compare the number of files in Source and Destination document libraries.

$sourceLibrary = "Documents"
$destLibrary = "Documents"

# Get file count from source
$sourceFiles = Get-PnPListItem -List $sourceLibrary
$sourceCount = $sourceFiles.Count

# Get file count from destination
$destFiles = Get-PnPListItem -List $destLibrary
$destCount = $destFiles.Count

if ($sourceCount -eq $destCount) {
Write-Host " File Count Matches: $sourceCount files"
} else {
Write-Host " File Count Mismatch! Source: $sourceCount, Destination: $destCount"
}

✔ Ensures that no files are missing after migration.


Step 3: Validate File Size and Hash Checksums

Compare file sizes to detect incomplete or corrupted files.

function Get-FileHashValue {
param ($fileUrl)
$file = Get-PnPFile -Url $fileUrl -AsFile -Path "C:\Temp\FileCheck.tmp" -Force
return (Get-FileHash -Path "C:\Temp\FileCheck.tmp").Hash
}

$sourceFileUrl = "/sites/SourceSite/Shared Documents/Report.pdf"
$destFileUrl = "/sites/DestinationSite/Shared Documents/Report.pdf"

$sourceHash = Get-FileHashValue -fileUrl $sourceFileUrl
$destHash = Get-FileHashValue -fileUrl $destFileUrl

if ($sourceHash -eq $destHash) {
Write-Host " File Integrity Verified: Report.pdf"
} else {
Write-Host " File Integrity Issue Detected: Report.pdf"
}

✔ Ensures files match exactly using a hash comparison.


Step 4: Validate Metadata Integrity

Compare metadata such as Created By, Modified By, and timestamps.

$sourceFile = Get-PnPListItem -List "Documents" -Id 1
$destFile = Get-PnPListItem -List "Documents" -Id 1

if ($sourceFile["Author"].Email -eq $destFile["Author"].Email -and
$sourceFile["Modified"].ToString() -eq $destFile["Modified"].ToString()) {
Write-Host " Metadata Integrity Verified"
} else {
Write-Host " Metadata Mismatch Detected!"
}

✔ Ensures metadata integrity is maintained.


Step 5: Validate Permissions After Migration

Check if user permissions on a document remain unchanged.

$sourcePermissions = Get-PnPListItemPermission -List "Documents" -Identity 1
$destPermissions = Get-PnPListItemPermission -List "Documents" -Identity 1

if ($sourcePermissions -eq $destPermissions) {
Write-Host " Permissions Match"
} else {
Write-Host " Permissions Mismatch Detected!"
}

✔ Prevents unintentional access changes.


Step 6: Validate Version History

Ensure document versions are retained after migration.

$sourceVersions = (Get-PnPFileVersion -Url "/sites/SourceSite/Shared Documents/Report.pdf").Count
$destVersions = (Get-PnPFileVersion -Url "/sites/DestinationSite/Shared Documents/Report.pdf").Count

if ($sourceVersions -eq $destVersions) {
Write-Host "✅ Version History Matches"
} else {
Write-Host " Version History Discrepancy!"
}

✔ Ensures version control is preserved.


Step 7: Generate a Validation Report

Export migration validation results to a CSV report.

$report = @()
$report += [PSCustomObject]@{
File_Name = "Report.pdf"
File_Integrity = if ($sourceHash -eq $destHash) {"Pass"} else {"Fail"}
Metadata_Integrity = if ($sourceFile["Author"].Email -eq $destFile["Author"].Email) {"Pass"} else {"Fail"}
Permission_Integrity = if ($sourcePermissions -eq $destPermissions) {"Pass"} else {"Fail"}
Version_History = if ($sourceVersions -eq $destVersions) {"Pass"} else {"Fail"}
}

$report | Export-Csv -Path "C:\MigrationValidationReport.csv" -NoTypeInformation
Write-Host " Validation Report Generated: C:\MigrationValidationReport.csv"

✔ Saves a detailed migration validation report for audit purposes.

Posted Under PNP PowerShellFile Integrity Metadata Validation Microsoft 365 Migration Validation Permissions Check PNP PowerShell SharePoint online Version History

Post navigation

Java Load Balancing with Ribbon and Spring Cloud
Java Cloud Development with AWS Lambda

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