Commands / Get-sqmOrphanedFiles
Get-sqmOrphanedFiles
Filesystem sqmSQLTool v1.8.2+ · Diagnostics
Finds MDF/LDF/NDF database files on the file system that are not registered in sys.master_files. Searches directories from instance configuration (DefaultData/DefaultLog) and optional custom paths.

Returns summary (scanned count, registered count, orphaned count, total size) plus detailed orphaned file list with paths and last-modified dates. Useful for cleanup after database removals or migrations.

Parameters

ParameterTypeRequiredDefaultNotes
-SqlInstancestringOptional$env:COMPUTERNAMETarget SQL Server instance.
-SqlCredentialPSCredentialOptionalCredentials for the connection.
-SearchPathstring[]OptionalDefault + registry pathsCustom directories to scan (e.g., UNC paths for remote instances).
-FileExtensionstring[]Optional.mdf, .ldf, .ndfFile extensions to search for.
-RecurseswitchOptional$falseRecursively search subdirectories.
-EnableExceptionswitchOptional$falseRe-throw exceptions instead of logging.

Execution Flow

START Query sys.master_files → get all registered file paths Build HashSet of registered paths (case-insensitive) Build directory list: -SearchPath provided → use custom dirs Or extract dirs from registered files + registry (DefaultData, DefaultLog) Skip unreachable directories (log WARNING) foreach $dir in $dirsToSearch Get-ChildItem -Path $dir (with -Recurse if specified) Filter by FileExtension (.mdf, .ldf, .ndf) Per file: check if FullName in $registeredPaths If NOT found → add to $orphaned list (FilePath, FileName, Size, LastModified) Return [PSCustomObject] summary + orphaned file list SqlInstance, ScannedFiles, RegisteredFiles, OrphanedFiles, TotalOrphanedMB, Files[] If no orphaned files found: log INFO DONE

Examples

Scan default directories for orphaned files on local instance
Get-sqmOrphanedFiles -SqlInstance "SQL01"
Search custom paths with recursion on remote instance
Get-sqmOrphanedFiles -SqlInstance "SQL01" -SearchPath "D:\SQLData","E:\SQLLog" -Recurse