Complete Tool Manual

Full reference for every screen and feature in the SPO Version Management Windows GUI application (v2.4.0).

New here? Start with the Quick Start Guide first.


The application sidebar contains these main sections:

Section Purpose
Home Overview dashboard with tenant stats, quick actions, storage trend
Pre reqs System prerequisites validation
Config Tenant connection, Entra ID apps, dashboard settings, directories, telemetry
HTTP Server Local web dashboard server controls
Retention Retention policy management (Purview)
Sites Site catalog, scope, archiving (5 sub-screens)
Execution All operational workflows (6 sub-screens)
Task Scheduler Unattended scheduled runs
History Full execution audit trail
Updates Version management and auto-update

Home

Home — Overview Dashboard

The Home screen is your at-a-glance operational view of the tenant. It shows:

Session Summary

Card Description
Auth Status Current authentication state (Interactive or App-Only)
Last Sync Date/time of last data synchronization
Last Run Result Result of last execution (Completed, InProgress, Failed)

Quick Actions

Shortcut buttons to the most common screens:

Tenant Storage

Metric Description
Storage Quota Total tenant storage allocation
Storage Used Current consumption
Available / Over Remaining quota (green = available, red = over quota)
Total Sites Number of SharePoint sites in tenant
% Used Percentage of quota consumed
Extra Cost / Year Projected annual cost if over quota
Freed (Session) Storage freed in the current/last session
Versions Deleted Number of versions removed in last session

Storage Trend (Monthly)

A chart showing monthly storage evolution over time. Updated by Data Sync.

Worldwide Impact

Shows aggregated anonymous statistics from the community telemetry backend (total storage freed by all participants globally).

Recent Executions

Quick view of the last 2-3 execution runs with timestamp, status, and site count.

Actions:

PowerShell equivalent:

# Open the web dashboard
.\Start-Dashboard.ps1
# Opens http://localhost:8080

Pre reqs

Pre reqs — Validate environment

The Prerequisites screen validates your entire environment before you can run the tool. Click Run Checks to validate all dependencies.

Validation Grid

Module What it checks
Configuration write access Can write to config folder
Admin URL configured SharePoint admin URL is set
Entra App config Client ID, Tenant ID, Certificate are configured
PowerShell 5.1 (powershell.exe) Available for CSOM/SPO Management Shell/Graph
PowerShell 7.4+ (pwsh) Required for PnP.PowerShell
SPO Mgmt Shell (PS 5.1) Microsoft.Online.SharePoint.PowerShell module installed
Microsoft.Graph (PS 5.1) Microsoft.Graph.Reports module for usage data
PnP.PowerShell (PS 7+) Required for file archive operations

Each row shows: Status (OK / FAIL), Version, Required For, and Action (Install button if missing).

The summary bar shows: ✓ N passed | ✗ N failed

JWT Debug

Click JWT Debug to decode and inspect the access token claims from your certificate authentication. Useful for troubleshooting permission issues.

Debug Output

Bottom panel shows verbose output from prerequisite checks for troubleshooting.

PowerShell equivalent:

# Check PS7
pwsh --version

# Check SPO module
Get-Module -ListAvailable Microsoft.Online.SharePoint.PowerShell

# Check Graph module
Get-Module -ListAvailable Microsoft.Graph.Reports

# Check PnP module (PS7 only)
pwsh -Command "Get-Module -ListAvailable PnP.PowerShell"

Config

The Configuration screen is split into multiple sections. Scroll down to see all options.

Part 1 — Connection & Authentication

Configuration — Connection & Auth

Tenant Connection

Field Description
Admin URL Your SharePoint admin center URL (e.g., https://contoso-admin.sharepoint.com)

Entra ID App Registration

Field Description
Tenant ID Azure AD / Entra ID tenant identifier
Client ID Application (client) ID from your app registration
Certificate Thumbprint Certificate uploaded to the Entra ID app (for app-only auth)

Important: Without Entra ID app registration, you’ll need to log in interactively every time. See the Entra ID App Setup Guide for step-by-step instructions.

Purview App (Optional)

Required only if you want to manage retention policies:

Field Description
Client ID Separate app registration for Purview/Compliance
Certificate Thumbprint Certificate for the Purview app
Organization Your tenant domain (e.g., contoso.onmicrosoft.com)

Dashboard Settings

Field Description
Language Dashboard language: en, es, pt, de, fr, ja
Currency Symbol Display symbol (e.g., $, R$, €)
Code ISO currency code (e.g., USD, BRL, EUR)
Cost per TB/Year (USD) Your Microsoft 365 extra storage cost (default: 13000.00)
Date Format Display format: dd/MM/yyyy, MM/dd/yyyy, yyyy-MM-dd
Dashboard Port Local web server port (default: 8080)
Dashboard Launch Launch mode: App HTTP Server, External Browser, etc.

Part 2 — Directories, Auto-Update & Telemetry

Configuration — Directories & Telemetry

Execution Directories

Field Description
Root Directory Base installation path (leave empty for auto-detect)
Application Folder Main application folder name (default: SPOVersionManagement)
Logs Subfolder Where execution logs are saved (default: Logs)
Backup Subfolder Backup location for logs (default: Logs\Backup)
Config Folder JSON configuration database folder (default: config)
Web Folder Dashboard HTML files (default: web)
App Folder GUI application binary (default: app)

The Calculated Full Paths panel below shows the resolved absolute paths for each directory.

Auto-Update

Field Description
GitHub Repository Source repository for updates (default: ivanoliv/SPOVersionManagement)

Anonymous Telemetry

Telemetry is opt-in and collects only aggregate, non-identifying metrics to help improve the tool.

Example payload sent to backend:

{
  "tenantHash": "a1b2c3d4e5f6...",
  "appVersion": "2.4.0.0",
  "sessionId": "20260504_191530_2f180393",
  "sitesProcessed": 1517,
  "versionsDeleted": 42850,
  "storageFreedBytes": 8589934592,
  "duration": "00:45:12",
  "status": "Completed",
  "mode": "DeleteOnly",
  "majorVersionLimit": 5
}

What IS sent (anonymous, aggregate only):

What is NEVER sent:

Why your participation matters: Telemetry powers the community statistics on the project website showing global impact (total TB freed, sessions run, tenants participating). This anonymous data helps:

Your participation is completely anonymous and directly helps improve the tool for everyone.


Actions (top toolbar)

Button Description
✓ Save Save all configuration changes to disk
Cancel Discard unsaved changes
Backup Create a full backup of all config files
Reset Local DB Reset all local JSON databases to defaults (⚠️ destructive)

PowerShell equivalent:

# All config is stored in config\AppPaths.json
# View current config:
Get-Content .\config\AppPaths.json | ConvertFrom-Json

# Edit directly or use the GUI

HTTP Server

HTTP Server Configuration

Starts a local web server to host the interactive HTML Dashboard.

Server Status

Shows current state: ● Stopped (red) or ● Running (green) with the active URL.

Settings

Field Description
Port Local port number (default: 8080)
Launch Mode App (Recommended) — uses built-in HTTP server; or External
Dashboard Source HTML file to serve (default: Dashboard.html). Click Browse… to select a different file.

Server Controls

Button Description
Start (green) Launch the HTTP server
Stop (red) Stop the server
Restart (yellow) Restart the server

Server Logs

Real-time log output from the HTTP server. Toggle Auto-scroll logs to follow new entries.

After starting, open http://localhost:8080 in your browser to view the full interactive dashboard with charts, site lists, and analytics.

PowerShell equivalent:

.\Start-Dashboard.ps1
# Starts server and opens http://localhost:8080

Retention

Retention Policy Management

Manage Microsoft Purview retention policies that may block version deletion. When a site is under a retention hold, SharePoint prevents version deletion — this screen lets you handle that.

Summary Cards

Card Description
Total Policies Number of retention policies found in tenant
Current Exceptions Sites currently excluded from policies
Suspended By Us Policies this tool has temporarily suspended
Capacity Available Available exception capacity

Tabs

Tab Description
Policies View all retention policies with: Policy Name, Mode, Status, Inclusion Type, Included Sites, Exceptions, Exception Capacity, Created, Modified
Exception Sites View sites that are excluded from retention policies

Actions

Requires: Purview app registration (configured in Config → Purview App section). See Entra ID App Setup — Purview App.

PowerShell equivalent:

.\Start-SPOVersionManagement.ps1 -AdminUrl "https://contoso-admin.sharepoint.com" `
    -MajorVersionLimit 5 -ManageRetentionPolicy

Sites

Site Catalog

Site Catalog

The full inventory of all SharePoint sites in your tenant. This data comes from the Data Sync operation.

Stats Banner (top)

Summary Cards

Card Description
Total de Sites Total number of sites
Storage Total Combined storage across all sites
Versões Total Total number of file versions

Filters

Grid Columns

Column Description
Selection checkbox
🔍 Click magnifier to open Site Detail popup
Title Site display name + group
URL Full site URL
Storage Total storage consumed
Versions Number of file versions
Ver. Size Storage consumed by versions (with percentage bar)
Status Active / Inactive / Locked
Archive NotArchived / Archived
Lock Unlock / ReadOnly / NoAccess

Actions (top-right)

Button Description
Refresh Reload data from cache
Export CSV Export the current view to CSV
Details Open detail popup for selected site
Select All Select all visible sites
Add to Skip (red) Add selected sites to the exclusion (skip) list
Add to Archive (blue) Queue selected sites for archiving

Site Detail Popup

Site Detail — Storage & Execution History

Click the magnifier icon (🔍) on any row in the Site Catalog to open the detail popup. This shows comprehensive information about a single site:

Storage Overview

Metric Description
Size at First Execution Site size when tool first processed it (N/A if never processed)
Current Size Current total storage
Current Versions Current version storage consumption
% Versions of Total How much of the site is file versions

Execution Summary

Version Retention Impact

Metric Description
Version Limit Current version limit configured for this site
Versions Kept (latest) Versions retained per the policy
Versions Before Version storage before last cleanup
Versions After Version storage after last cleanup

Execution History Table

Full log of all operations on this site:

Column Description
Date/Time Execution timestamp
Type BatchDelete or SyncListPolicy
Status CompleteSuccess, Failed, InProgress
Duration How long the job took
Size Before Site size before operation
Files Number of files affected
Versions Versions processed
Deleted Versions actually deleted
Released Storage freed
Cumulative Running total of space freed

PowerShell equivalent:

# Get site details
Get-SPOSite -Identity "https://contoso.sharepoint.com/sites/teamsite1" -Detailed

# Check version deletion job progress
Get-SPOSiteFileVersionBatchDeleteJobProgress -Identity "https://contoso.sharepoint.com/sites/teamsite1"

Execution Scope

Execution Scope — Target and Skip Sites

Define exactly which sites to process during execution.

Warning Banner

⚠️ If Target Sites is empty, all sites in the tenant will be processed (minus Skip Sites).

Two Panels

Panel Purpose
TARGET SITES (left, blue border) Process only these sites. If empty, all tenant sites are in scope.
SKIP SITES (right, red border) Never process these sites, regardless of other criteria.

Each panel shows: Site URL and Reason / Notes columns.

Actions (toolbar)

Button Description
Import Target Load target sites from CSV file
Save Target (green) Save current target list to CSV
Import Skip Load skip sites from CSV file
Save Skip (green) Save current skip list to CSV
Export CSV Export combined scope to CSV
+ Target (green) Manually add a site URL to target list
+ Skip (blue) Manually add a site URL to skip list
✏ Edit Edit selected entry
✗ Remove (red) Remove selected entries

PowerShell equivalent:

# Use CSV files for scope control
.\Start-SPOVersionManagement.ps1 -AdminUrl "https://contoso-admin.sharepoint.com" `
    -MajorVersionLimit 5 `
    -IncludeSitesCSV "C:\path\to\IncludeSites.csv" `
    -ExcludeSitesCSV "C:\path\to\ExcludeSites.csv"

Archive Candidates

Archive Candidates from SAM

Sites identified as candidates for archiving. These come from the SharePoint Advanced Management (SAM) inactive site report that you import.

The grid shows the same columns as Site Catalog (Title, URL, Storage, Versions, Ver. Size, Status, Archive, Lock).

How to Export the SAM Report

You have two options to get the inactive sites report from SharePoint Admin Center:


Option A — From Advanced Management Overview:

SAM Advanced Management Overview

  1. Go to SharePoint Admin Center → scroll down in left nav
  2. Click Advanced management (PRO badge)
  3. Under “Content management assessment”, find Site lifecycle → “Site Inactivity”
  4. Click View recommendations
  5. In the “Site inactivity” panel that opens on the right, click Download a report
  6. Save the CSV file

Option B — From Site Lifecycle Management:

SAM Site Lifecycle Management

  1. Go to PoliciesSite lifecycle management
  2. You’ll see your inactive site policies listed

SAM Inactive Site Policy — Download

  1. Click on Inactive site policies → Open
  2. Find your policy in the list and click ⬇ Download on the Report column
  3. Save the CSV file

Using the SAM report in the tool:

Actions

Button Description
Refresh Reload data
Export CSV Export candidates to CSV
Details View site detail popup
Select All Select all visible sites
Add to Skip (red) Exclude from processing
Add to Archive (blue) Move to the Archive Queue for archival

Archived Sites

Archived Sites

Sites that have already been archived. Shows the same grid as Site Catalog with archive state confirmed. Use this view to verify archival operations completed successfully.

Actions

Button Description
Refresh Reload archive states
Export CSV Export archived sites list
Details View site detail popup

PowerShell equivalent:

# Check archive status
Get-SPOSite -Identity "https://contoso.sharepoint.com/sites/oldsite" | Select-Object Url, LockState, Status

# List all archived sites
Get-SPOSite -Limit All | Where-Object { $_.ArchiveStatus -eq 'Archived' }

Archive Queue

Archive Queue

Sites queued for archiving. You add sites here from the Site Catalog or Archive Candidates screens using the “Add to Archive” button.

The grid shows: Title, URL, Storage, Versions, Ver. Size, Status, Archive, Lock.

The bottom status bar shows: Queue source: ArchiveQueue.json | Rows in file: N | Valid rows (SiteUrl): N | Visible rows: N | Last updated: <timestamp>

Actions

Button Description
Refresh Reload the queue
Export CSV Export queue to CSV
Details View site detail
Remove (red) Remove selected sites from queue
Run Archive (blue) Execute the archive operation for all queued sites

When you click Run Archive, the tool opens a PowerShell window and executes the SharePoint archive command for each site in the queue.

PowerShell equivalent:

# Archive a site (lock access)
Set-SPOSite -Identity "https://contoso.sharepoint.com/sites/oldsite" -LockState NoAccess

# Full archive with SAM license (Microsoft official):
Set-SPOSiteArchiveState -Identity "https://contoso.sharepoint.com/sites/oldsite" -ArchiveState Archived

# Reactivate an archived site:
Set-SPOSiteArchiveState -Identity "https://contoso.sharepoint.com/sites/oldsite" -ArchiveState Active

Execution

Clean Versions

Execution — Clean Versions

The main execution screen for version cleanup operations. This is where you configure and launch the version deletion process.

Session Control (top bar)

Control Description
Session dropdown Shows current/previous session with ID, timestamp, and status
Rename Rename a session for easier identification
Load Session (green) Resume a previous interrupted session from where it stopped
Start Over Create a new blank session (⚠️ a new session will be created on Execute)
Delete All (red) Remove all session history

Tip: Sessions auto-save on interruption. You can always resume exactly where you left off.

Version Policy (left panel)

Setting Description Default
Concurrent Jobs Number of parallel batch operations 100
Check Batch Size How many jobs to check status at once 10
Zero Version Action What to do with sites that have 0 versions: skip or process skip
Batch Delay (s) Seconds between batch submissions (throttle control) 2
Re-execution Days Skip sites processed within N days 60

Delete Mode

Mode Description
● Delete by version count Keep Major N + Minor M versions, delete the rest
○ Delete by age Delete versions older than Days N

Operation Mode (right panel)

Option API Used Description
Sync Version Policy New-SPOSiteManageVersionPolicyJob Push version limits to all sites and their document libraries
☑️ Delete Excess Versions New-SPOSiteFileVersionBatchDeleteJob Delete versions exceeding the configured limit
Manage Retention Policies Security & Compliance Temporarily suspend retention holds before deletion
Skip Graph Don’t call Graph API; use manual CSV instead

Input Files (bottom panel)

Field Description
Include Sites (CSV) Only process these sites (same as Target Sites in Execution Scope)
Exclude Sites (CSV) Never process these sites (same as Skip Sites)
Graph Report (CSV) Manual SharePoint Site Usage Storage report (how to export)
Sync Job List (CSV) External BatchDeleteJobProgress to sync from other admins
SAM Report (CSV) Content Management Assessment from SharePoint Advanced Management (see how to export SAM report)
Use AllSites.json cache Skip Get-SPOSite and use cached data (faster for large tenants)

Execution Controls (top-right)

Button Description
▶ Execute (green) Start the version cleanup
■ Abort Stop the current execution gracefully

Output Panels (bottom)

PowerShell equivalent:

# Full execution with all options
.\Start-SPOVersionManagement.ps1 `
    -AdminUrl "https://contoso-admin.sharepoint.com" `
    -MajorVersionLimit 5 `
    -MinorVersionLimit 0 `
    -MaxConcurrentJobs 100 `
    -ReexecutionDays 60 `
    -IncludeSitesCSV "IncludeSites.csv" `
    -ExcludeSitesCSV "ExcludeSites.csv" `
    -SkipGraph `
    -GraphReportCSV "SharePointSiteUsageStorage.csv" `
    -ManageRetentionPolicy `
    -Unattended

Data Sync

Data Synchronization

Synchronize tenant data for the dashboard, analytics, and execution history.

Sync Options

Option Description
☑️ Export All Sites (Get-SPOSite) Full site inventory → AllSites.json
☑️ Graph API Report (usage/activity) Site usage storage report via Microsoft Graph → usage metrics for dashboard
☑️ Archive Analysis (pre-process) Builds lightweight ArchiveAnalysis.json for dashboard archive views
☑️ Tenant Storage Timeline Updates TenantStorageTimeline.json for trend charts

Input Files (optional)

Load data from local CSV files instead of calling APIs. Useful when you already have reports downloaded or when running offline.

Field Description
Graph Report (CSV) SharePoint Site Usage Storage report — skips the Graph API call and imports directly
SAM Report (CSV) Content Management Assessment or Inactive Site Policy export from SharePoint Admin Center — used by Archive Analysis

Leave empty to use the default API-based data retrieval.

Click ▶ Run Sync to execute all checked options. Click ■ Abort to stop.

Telemetry Sync

If you upgraded from a previous version and have execution history that was never synced to the community backend, click ↑ Sync History to Telemetry to upload anonymized past results. This is a one-time manual sync for pre-existing data.

External Job Sync

Checks SharePoint for version management jobs completed outside this tool — by other admins, scripts, or scheduled tasks.

Field Description
Look Back How many days to search (default: 60)
↻ Sync External Jobs (purple) Queries all sites for BatchDeleteJobProgress and updates local execution history

This ensures your Dashboard and re-execution rules (Re-execution Days) reflect the real state, even if other people ran cleanup jobs on the same tenant.

PowerShell equivalent:

# Sync only (no version deletion)
.\Start-SPOVersionManagement.ps1 -AdminUrl "https://contoso-admin.sharepoint.com" -SyncOnly

# Then open the dashboard to see updated data
.\Start-Dashboard.ps1

Archive Sites

Archive Sites

Execute the archive operation for sites in the Archive Queue. This screen shows the same Archive Queue grid and lets you trigger the archival.

When you click Run Archive, the tool opens a new PowerShell window and processes each site sequentially using the Microsoft SharePoint archive command.

The bottom status bar shows queue source and row counts.

PowerShell equivalent:

.\Start-ArchiveWebsites.ps1

# Or archive individual sites:
Set-SPOSiteArchiveState -Identity "https://contoso.sharepoint.com/sites/oldsite" -ArchiveState Archived

File Archive Explorer

File Archive Explorer

Search for files by extension across a specific SharePoint site using the Graph Search API. This lets you find large or unnecessary files to archive at the file level (not site level).

Management is per site — select one site at a time to scan.

Target Site

Field Description
Site URL The site to scan
Pick Site Browse and select from your site catalog
Summary only (count, no details) Just count files without downloading individual file metadata

Authentication

Option Description
● Interactive (browser) Login via browser popup
● App credentials (EntraID) Use certificate-based app authentication
Region Your Microsoft 365 data region (e.g., BRA, NAM, EUR) for search endpoint routing

Extension Groups

Create and manage groups of file extensions to search for. The tool uses the SharePoint search index to find matching files.

Default Group Extensions
Office Documents (14 ext) .docx, .doc, .xlsx, .xls, .pptx, .ppt, .vsdx, .vsd, .one, .onetoc2, .mpp, .pub, .pdf, .xps
Text & Markup (13 ext) .txt, .rtf, .csv, .xml, .html, .htm, .md, .json, .msg, .eml, .odt, .ods, .odp
Videos (12 ext) .mp4, .mov, .wmv, .avi, .mkv, .m4v, .mpg, .mpeg, .3gp, .3g2, .mts, .m2ts

Extension Group Actions:

Results Grid

After scanning, results show:

Column Description
Site URL Source site
Files Number of matching files found
Last Scanned When the scan ran
Duration How long the scan took
Categories Which extension groups had matches

Actions:

Select files from results and add them to the File Archive Queue for archival.

Requires: PnP.PowerShell module (PS 7+).


File Archive Queue

File Archive Queue

Track and execute file-level archive operations for files found via the File Archive Explorer.

Column Description
Site URL Source site
File URL Individual file path
Category Extension group
Ext File extension
Size MB File size
Queued At When added to queue
Status Pending / Archived / Failed

Actions:


Session Manager

Session Manager

Browse, inspect, and resume past execution sessions. State is auto-saved on interruption so you never lose progress.

Session Grid

Column Description
Status Completed (green) / InProgress (yellow) / Failed (red)
Session ID Unique session identifier (timestamp-based)
Started Start timestamp
Last Updated Last activity
Progress Sites processed / total (e.g., “0/1517”)
Mode Delete Only / Sync+Delete / etc.

Actions (toolbar)

Button Description
↻ Refresh Reload session list
▶ Resume (green) Continue an interrupted session from where it stopped
📋 View Log See full session configuration in the detail panel
✗ Delete (red) Remove a session record

Session Detail Panel (bottom)

When you select a session, the detail panel shows the full configuration used:

This is useful for auditing and understanding what parameters were used in each execution.


Task Scheduler

Task Scheduler

Schedule unattended executions via Windows Task Scheduler.

⚠️ Administrator privileges required. Click Run as Admin to elevate the application.

Action Description
+ New Task Create a new scheduled task
Enable / Disable Toggle a task on/off
Run Now Execute immediately
Delete Remove a scheduled task

The grid shows: enabled state, task name, schedule (cron), last run, result, and next run.

Important: Scheduled tasks run unattended and require Entra ID app registration with certificate authentication. Interactive login cannot work without a user present. See the Entra ID App Setup Guide.

PowerShell equivalent:

# The task scheduler creates a Windows scheduled task that runs:
.\Start-SPOVersionManagement.ps1 `
    -AdminUrl "https://contoso-admin.sharepoint.com" `
    -MajorVersionLimit 5 `
    -Unattended

History

Execution History

Full execution audit trail. Browse and filter every job ever executed by the tool.

Filters:

Grid Columns:

Column Description
Timestamp Exact execution time (ISO 8601)
Site Site name processed
Job Type BatchDelete or SyncListPolicy
Status CompleteSuccess, Failed, InProgress
Duration (min) How long the job took
Versions Deleted Number of versions removed

Actions:

PowerShell equivalent:

# History is stored in config\SiteExecutionHistory.json
# Export to CSV for analysis:
$history = Get-Content .\config\SiteExecutionHistory.json | ConvertFrom-Json
$history.Sites | Export-Csv -Path "ExecutionHistory.csv" -NoTypeInformation

Updates

Updates

Check for new versions, download, and install updates automatically.

Features:

The update process:

  1. Downloads the latest release ZIP from GitHub
  2. Extracts files, overwriting only application files
  3. Preserves: config/ folder, Logs/ folder, all JSON databases
  4. Shows release notes after completion

Status Bar

The bottom status bar (always visible) shows real-time system state:

Indicator Meaning
🟢 Cache: Ready AllSites.json is loaded and available
🟡 Graph: Offline Graph API not connected (normal if using Skip Graph mode)
✓ N passed Prerequisites that passed
✗ N failed Prerequisites that need attention
Session: YYYYMMDD Current active session ID
You are up to date App is on the latest version

Need Help?

Can't find what you're looking for? Open an issue on GitHub.

Get Support