How to Configure Storage Reports with FSRM on Windows Server 2012 R2
File Server Resource Manager (FSRM) on Windows Server 2012 R2 includes a powerful storage reporting engine that generates detailed analysis reports covering disk usage patterns, file ownership, duplicate files, file age distribution, and quota usage. These reports are essential for storage capacity planning, identifying users or applications consuming disproportionate disk space, locating stale data that can be archived or deleted, and demonstrating storage utilisation trends to management. This guide covers configuring and scheduling all available FSRM storage report types, customising report parameters, and distributing reports automatically via email.
Prerequisites
The File Server Resource Manager role service must be installed (Install-WindowsFeature FS-Resource-Manager). SMTP server connectivity is required if email delivery of reports is needed. Administrator privileges are required. The FSRM service (srmsvc) must be running. Designate a report output directory with sufficient space — reports can be several hundred MB for large volumes with many files.
Step 1: Configure FSRM Global Report Settings
Configure the default output location and email settings for all storage reports:
Import-Module FileServerResourceManager
# Configure SMTP and email settings
Set-FsrmSetting -SmtpServer "smtp.yourdomain.com" -AdminEmailAddress "[email protected]" -FromEmailAddress "[email protected]"
# Set report output location (use a dedicated reports volume)
Set-FsrmSetting -ReportLocationOnDemand "D:StorageReportsOnDemand" -ReportLocationScheduled "D:StorageReportsScheduled" -ReportLocationIncident "D:StorageReportsIncidents"
# Create report directories
New-Item -ItemType Directory -Path "D:StorageReportsOnDemand" -Force | Out-Null
New-Item -ItemType Directory -Path "D:StorageReportsScheduled" -Force | Out-Null
New-Item -ItemType Directory -Path "D:StorageReportsIncidents" -Force | Out-Null
Step 2: Understand Available Report Types
FSRM provides the following storage report types, each addressing a specific storage management need:
Duplicate Files: Identifies files with identical content using hash comparison. LargeFiles: Lists files exceeding a specified size threshold. LeastRecentlyAccessed: Files not accessed for a configurable number of days (useful for identifying archivable data). MostRecentlyAccessed: Most recently accessed files. FilesbyOwner: Disk usage broken down by file owner/user. FilesbyProperty: Usage based on custom file classification properties. Quota Usage: Summary of quota limits and current usage across all configured quotas. FileScreenAudit: Log of file screening events (blocked file uploads).
Step 3: Create a Comprehensive Weekly Storage Report
Create a scheduled report task that generates multiple report types on a weekly basis:
# Create a scheduled weekly storage report
$schedule = New-FsrmScheduledTask -Weekly -DaysOfWeek @("Sunday") -Time "06:00"
New-FsrmStorageReport -Name "Weekly Comprehensive Storage Analysis" `
-Namespace @("D:", "E:") `
-ReportType @("LargeFiles", "LeastRecentlyAccessed", "FilesbyOwner", "DuplicateFiles", "QuotaUsage") `
-Schedule $schedule `
-MailTo "[email protected]" `
-Format @("HTML", "CSV") `
-Description "Weekly storage analysis covering large files, old files, owner breakdown, duplicates and quota status"
Step 4: Configure Report-Specific Parameters
Customise parameters for each report type. For the LargeFiles report, set the minimum file size threshold:
# Set minimum file size for LargeFiles report to 100 MB
Set-FsrmStorageReport -Name "Weekly Comprehensive Storage Analysis" -LargeFileMinimum 104857600
# For LeastRecentlyAccessed report, set minimum file age to 90 days
Set-FsrmStorageReport -Name "Weekly Comprehensive Storage Analysis" -FileAccessAgeMin 90
# Limit report output to top 500 results per report type
Set-FsrmStorageReport -Name "Weekly Comprehensive Storage Analysis" -MaximumReportResults 500
Step 5: Run On-Demand Storage Reports
Generate storage reports immediately without waiting for the scheduled run:
# Start an immediate on-demand storage report
Start-FsrmStorageReport -Name "Weekly Comprehensive Storage Analysis" -Queue
# Monitor report generation status
Get-FsrmStorageReport -Name "Weekly Comprehensive Storage Analysis" | Select-Object Name, Status
# Wait for report completion
do {
$status = (Get-FsrmStorageReport -Name "Weekly Comprehensive Storage Analysis").Status
Write-Host "Report status: $status"
Start-Sleep -Seconds 10
} while ($status -eq "Queued" -or $status -eq "Running")
Write-Host "Report complete!"
Get-FsrmStorageReport -Name "Weekly Comprehensive Storage Analysis" | Select-Object Name, LastGeneratedReportPath
Run a quick ad-hoc report for a specific namespace and report type:
# Quick LargeFiles report on D: drive, output to temp location
New-FsrmStorageReport -Name "AdHoc LargeFiles" -Namespace @("D:") -ReportType @("LargeFiles") -LargeFileMinimum 52428800 -Format @("HTML") -MailTo "[email protected]"
Start-FsrmStorageReport -Name "AdHoc LargeFiles" -Queue
Step 6: Analyse Storage Reports via CSV Export
CSV format reports can be imported into PowerShell for further analysis and custom reporting:
# Find and import the latest CSV report for files by owner
$reportDir = "D:StorageReportsScheduled"
$latestReport = Get-ChildItem -Path $reportDir -Recurse -Filter "*FilesbyOwner*.csv" | Sort-Object LastWriteTime -Descending | Select-Object -First 1
if ($latestReport) {
$data = Import-Csv -Path $latestReport.FullName
# Top 10 owners by total file size
$data | Group-Object Owner | ForEach-Object {
$totalSize = ($_.Group | Measure-Object -Property "Size (KB)" -Sum).Sum
[PSCustomObject]@{
Owner = $_.Name
FileCount = $_.Count
TotalSizeMB = [math]::Round($totalSize / 1024, 2)
}
} | Sort-Object TotalSizeMB -Descending | Select-Object -First 10 | Format-Table -AutoSize
}
Step 7: Create an Incident Report Trigger
Configure FSRM to generate automatic reports when quota thresholds are breached. Add a report action to a quota threshold notification:
# Get existing quota template and add report action at 90% threshold
$thresholdAction = New-FsrmAction -Type Report -ReportTypes @("QuotaUsage", "FilesbyOwner") -MailTo "[email protected]" -RunLimitInterval 60
$threshold = New-FsrmQuotaThreshold -Percentage 90 -Action @($thresholdAction)
# Apply to a quota template
New-FsrmQuotaTemplate -Name "100GB with Incident Report" -Size 100GB -Threshold @($threshold)
Step 8: Review Historical Report Data
Maintain a history of storage reports to identify trends over time. Create a script that summarises report data into a trend log:
$trendLog = "D:StorageReportsStorageTrend.csv"
$volumes = @("D:", "E:")
$trend = foreach ($vol in $volumes) {
$disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='$vol'"
[PSCustomObject]@{
Date = (Get-Date -Format "yyyy-MM-dd")
Volume = $vol
TotalGB = [math]::Round($disk.Size/1GB, 2)
FreeGB = [math]::Round($disk.FreeSpace/1GB, 2)
UsedGB = [math]::Round(($disk.Size - $disk.FreeSpace)/1GB, 2)
PercentUsed = [math]::Round((($disk.Size - $disk.FreeSpace) / $disk.Size) * 100, 1)
}
}
$trend | Export-Csv -Path $trendLog -Append -NoTypeInformation
Write-Host "Storage trend recorded."
Summary
FSRM storage reports on Windows Server 2012 R2 provide actionable intelligence about how your file server storage is being used, by whom, and whether it is growing sustainably. Regular scheduled reports identifying large files, old files, duplicate data, and quota usage give administrators the data needed to make informed decisions about storage allocation, archival policies, and quota adjustments. CSV export enables trend analysis over time, while HTML reports provide stakeholder-friendly summaries that communicate storage health without requiring direct access to server management tools.