How to Configure Storage Reports with FSRM on Windows Server 2025

File Server Resource Manager (FSRM) is one of the most practical built-in tools available on Windows Server 2025 for understanding how storage is being consumed across your file server infrastructure. While quotas and file screening get most of the attention, FSRM’s storage reporting engine is what turns raw disk usage data into actionable intelligence. Whether you are trying to identify which users are consuming the most space, locate large dormant files that have not been touched in years, or audit duplicate files wasting capacity, FSRM reports give you scheduled, automated visibility into all of it. This guide walks through installing FSRM, configuring each major report type, scheduling automated delivery, and integrating report output with PowerShell for deeper capacity planning analysis.

Prerequisites

  • Windows Server 2025 with the File Server role installed
  • FSRM feature installed (covered in the first step below)
  • At least one NTFS volume with data to report on
  • SMTP relay or Exchange server for email delivery of reports (optional but recommended)
  • PowerShell 5.1 or later, run as Administrator
  • Sufficient disk space on the report output directory (reports can be several MB each)

Step 1: Install FSRM on Windows Server 2025

FSRM is not installed by default. Use Server Manager or PowerShell to add the feature. The PowerShell method is faster for scripted deployments and remote installations.

# Install FSRM feature including management tools
Install-WindowsFeature -Name FS-Resource-Manager -IncludeManagementTools

# Verify installation
Get-WindowsFeature -Name FS-Resource-Manager

# Start and configure the FSRM service
Set-Service -Name srmsvc -StartupType Automatic
Start-Service -Name srmsvc
Get-Service -Name srmsvc

After installation, the FsrmStorageReport PowerShell module becomes available. Verify you can access the FSRM cmdlets before proceeding.

# Verify FSRM cmdlets are available
Get-Command -Module FileServerResourceManager | Where-Object { $_.Name -like '*StorageReport*' }

# Check FSRM current settings
Get-FsrmSetting

Step 2: Configure FSRM Global Settings and Email Delivery

Before creating reports, configure FSRM’s global settings including the SMTP server for automated email delivery and the default report output location. These settings apply to all reports on the server.

# Configure FSRM global settings
Set-FsrmSetting `
    -SmtpServer "smtp.contoso.local" `
    -AdminEmailAddress "[email protected]" `
    -FromEmailAddress "[email protected]" `
    -MailTo "[Admin Email]" `
    -ReportLocationIncident "C:StorageReportsIncident" `
    -ReportLocationScheduled "C:StorageReportsScheduled" `
    -ReportLocationOnDemand "C:StorageReportsOnDemand"

# Create report output directories if they do not exist
$reportPaths = @(
    "C:StorageReportsIncident",
    "C:StorageReportsScheduled",
    "C:StorageReportsOnDemand"
)
foreach ($path in $reportPaths) {
    if (-not (Test-Path $path)) {
        New-Item -Path $path -ItemType Directory -Force
    }
}

# Test email delivery
Send-FsrmTestEmail -ToEmailAddress "[email protected]"

Step 3: Create a Large Files Storage Report

The Large Files report is one of the most commonly requested reports by storage administrators. It scans a namespace and returns files exceeding a specified size threshold, which is invaluable for identifying archive candidates and enforcing data governance policies.

# Create a scheduled Large Files report
New-FsrmStorageReport `
    -Name "Large Files Weekly Report" `
    -Namespace @("D:SharesUserData", "D:SharesDepartments") `
    -ReportType @("LargeFiles") `
    -LargeFileMinimum 104857600 `
    -Schedule (New-FsrmScheduledTask -Time "02:00" -Weekly @("Sunday")) `
    -MailTo "[email protected]" `
    -ReportFormat @("Html", "Csv") `
    -Description "Weekly large files scan - files over 100MB"

# Verify the report was created
Get-FsrmStorageReport -Name "Large Files Weekly Report"

The -LargeFileMinimum parameter is specified in bytes. 104857600 equals 100 MB. Adjust this threshold based on your environment’s data profile — a media production share would use a much larger threshold than a general document library.

Step 4: Create Files by Owner and Quota Usage Reports

The Files by Owner report is particularly useful for identifying which Active Directory users are consuming the most storage. Combined with the Quota Usage report, it gives management-ready data for chargeback conversations or policy enforcement.

# Files by Owner report - identify top storage consumers
New-FsrmStorageReport `
    -Name "Files By Owner Monthly" `
    -Namespace @("D:Shares") `
    -ReportType @("FilesByOwner") `
    -Owner @("Contoso*") `
    -Schedule (New-FsrmScheduledTask -Time "01:00" -Monthly @(1)) `
    -MailTo "[email protected]" `
    -ReportFormat @("Html", "Xml") `
    -Description "Monthly ownership breakdown for capacity planning"

# Quota Usage report - see who is near or over quota
New-FsrmStorageReport `
    -Name "Quota Usage Weekly" `
    -Namespace @("D:SharesUserData") `
    -ReportType @("QuotaUsage") `
    -Schedule (New-FsrmScheduledTask -Time "03:00" -Weekly @("Monday")) `
    -MailTo "[email protected];[email protected]" `
    -ReportFormat @("Html", "Dhtml") `
    -Description "Weekly quota utilization - flags users above 85 percent"

# List all configured storage reports
Get-FsrmStorageReport | Select-Object Name, ReportType, Schedule, Enabled

Step 5: Configure Duplicate Files and Stale Files Reports

Duplicate files and stale (unused) files represent two of the biggest sources of recoverable storage waste. The Duplicate Files report uses file size and last-modified timestamp heuristics to surface candidates, while the Stale Files report finds files not accessed within a configurable number of days.

# Duplicate Files report
New-FsrmStorageReport `
    -Name "Duplicate Files Scan" `
    -Namespace @("D:Shares") `
    -ReportType @("DuplicateFiles") `
    -Schedule (New-FsrmScheduledTask -Time "04:00" -Monthly @(15)) `
    -MailTo "[email protected]" `
    -ReportFormat @("Html", "Csv") `
    -Description "Mid-month duplicate file scan"

# Stale Files report - files not accessed in 180 days
New-FsrmStorageReport `
    -Name "Stale Files 180 Days" `
    -Namespace @("D:SharesArchive", "D:SharesDepartments") `
    -ReportType @("StaleFiles") `
    -StaleFileMinimumAge 180 `
    -Schedule (New-FsrmScheduledTask -Time "05:00" -Weekly @("Saturday")) `
    -MailTo "[email protected]" `
    -ReportFormat @("Html", "Csv") `
    -Description "Weekly stale file report - files idle over 180 days"

# Files by File Group report - identify media, executables, etc.
New-FsrmStorageReport `
    -Name "Files By Type Weekly" `
    -Namespace @("D:Shares") `
    -ReportType @("FilesByFileGroup") `
    -Schedule (New-FsrmScheduledTask -Time "02:30" -Weekly @("Sunday")) `
    -MailTo "[email protected]" `
    -ReportFormat @("Html") `
    -Description "Weekly breakdown by file type category"

Step 6: Generate On-Demand Reports

Scheduled reports run automatically but you will often need an immediate report for an incident or audit. FSRM supports on-demand report generation that runs synchronously or as a background job.

# Run a report on demand (synchronous - waits for completion)
Start-FsrmStorageReport -Name "Large Files Weekly Report" -Wait

# Run multiple report types on demand against a specific path
# This creates a temporary on-demand session, not a named report
$reportParams = @{
    Namespace   = @("D:SharesUserData")
    ReportType  = @("LargeFiles", "FilesByOwner", "QuotaUsage")
    LargeFileMinimum = 52428800  # 50MB
    ReportFormat     = @("Html", "Csv")
}
Start-FsrmStorageReport @reportParams -Wait

# Check report status
Get-FsrmStorageReport | Select-Object Name, LastRun, LastRunStatus, LastError

# View where on-demand reports were saved
$fsrmSettings = Get-FsrmSetting
explorer $fsrmSettings.ReportLocationOnDemand

Step 7: Integrate FSRM Report Output with PowerShell for Capacity Planning

FSRM’s CSV output format makes it straightforward to consume report data in PowerShell pipelines for aggregation, trending, and automated alerting beyond what the built-in email notifications support.

# Parse the latest CSV from a Files by Owner report for top 10 consumers
$reportDir = "C:StorageReportsScheduled"
$latestCsv = Get-ChildItem -Path $reportDir -Filter "*.csv" |
    Where-Object { $_.Name -like "*ByOwner*" } |
    Sort-Object LastWriteTime -Descending |
    Select-Object -First 1

if ($latestCsv) {
    $data = Import-Csv -Path $latestCsv.FullName
    $topConsumers = $data |
        Group-Object -Property Owner |
        ForEach-Object {
            [PSCustomObject]@{
                Owner     = $_.Name
                TotalSizeGB = [math]::Round(
                    ($_.Group | Measure-Object -Property "File Size (Bytes)" -Sum).Sum / 1GB, 2)
                FileCount = $_.Count
            }
        } |
        Sort-Object TotalSizeGB -Descending |
        Select-Object -First 10

    $topConsumers | Format-Table -AutoSize
}

# Alert if any user exceeds a capacity threshold
$threshold = 50  # GB
$overThreshold = $topConsumers | Where-Object { $_.TotalSizeGB -gt $threshold }
if ($overThreshold) {
    $body = $overThreshold | ConvertTo-Html -Fragment | Out-String
    Send-MailMessage `
        -To "[email protected]" `
        -From "[email protected]" `
        -Subject "Storage Alert: Users Exceeding ${threshold}GB" `
        -Body $body `
        -BodyAsHtml `
        -SmtpServer "smtp.contoso.local"
}

Step 8: Manage and Audit Configured Reports

Over time you will accumulate many reports. Periodically audit which reports are running, how long they take, and whether they are still relevant. FSRM provides cmdlets to modify, enable, disable, and remove reports without losing their configuration.

# List all reports with schedule and last run info
Get-FsrmStorageReport | Format-Table Name, Enabled, LastRun, LastRunStatus -AutoSize

# Disable a report temporarily (maintenance window)
Set-FsrmStorageReport -Name "Duplicate Files Scan" -Enabled $false

# Re-enable it
Set-FsrmStorageReport -Name "Duplicate Files Scan" -Enabled $true

# Update an existing report's namespace
$currentReport = Get-FsrmStorageReport -Name "Large Files Weekly Report"
Set-FsrmStorageReport -Name "Large Files Weekly Report" `
    -Namespace @("D:SharesUserData", "D:SharesDepartments", "E:Archive")

# Remove a report that is no longer needed
Remove-FsrmStorageReport -Name "Files By Type Weekly" -Confirm:$false

# Export all report configurations for documentation
Get-FsrmStorageReport | Export-Clixml -Path "C:StorageReportsReportConfig-$(Get-Date -Format 'yyyyMMdd').xml"

Conclusion

FSRM’s storage reporting engine on Windows Server 2025 transforms anecdotal complaints about disk space into data-driven conversations with concrete numbers attached to users, file types, and age categories. By combining scheduled reports across all six major types — large files, files by owner, duplicate files, files by file group, stale files, and quota usage — you build a comprehensive picture of how storage is consumed and where it is being wasted. Delivering those reports automatically via email and supplementing them with PowerShell analysis pipelines creates a storage intelligence workflow that scales from a handful of shares to dozens of file servers. Revisit your report schedules and thresholds quarterly as data volumes grow and your organization’s definition of “large” or “stale” evolves with the business.