Public/Find-MsOfficeFile.ps1
|
function Find-MsOfficeFile { <# .SYNOPSIS Finds Microsoft Office files in a specified path. .DESCRIPTION The Find-MsOfficeFile function searches for Microsoft Office files (Word, Excel, PowerPoint, Access, etc.) in a specified directory and optionally in its subdirectories. It supports both legacy and modern Office formats. .PARAMETER Path The path to search for Microsoft Office files. Defaults to the current directory. .PARAMETER Recurse If specified, searches subdirectories recursively. .PARAMETER IncludeLegacy If specified, includes legacy Office formats (.doc, .xls, .ppt) in addition to modern formats. .EXAMPLE Find-MsOfficeFile Finds all modern Microsoft Office files in the current directory. .EXAMPLE Find-MsOfficeFile -Path "C:\Documents" -Recurse Finds all modern Microsoft Office files in C:\Documents and its subdirectories. .EXAMPLE Find-MsOfficeFile -Path "C:\Documents" -Recurse -IncludeLegacy Finds all Microsoft Office files (both modern and legacy formats) in C:\Documents and its subdirectories. .OUTPUTS System.IO.FileInfo .INPUTS System.String .NOTES Author: gdelfavero #> [CmdletBinding()] param ( [Parameter(Mandatory = $false, Position = 0, ValueFromPipeline = $true)] [string]$Path = (Get-Location).Path, [Parameter(Mandatory = $false)] [switch]$Recurse, [Parameter(Mandatory = $false)] [switch]$IncludeLegacy ) begin { # Modern Office file extensions (Office 2007+) $modernExtensions = @( '*.docx', # Word Document '*.docm', # Word Macro-Enabled Document '*.dotx', # Word Template '*.dotm', # Word Macro-Enabled Template '*.xlsx', # Excel Workbook '*.xlsm', # Excel Macro-Enabled Workbook '*.xltx', # Excel Template '*.xltm', # Excel Macro-Enabled Template '*.xlsb', # Excel Binary Workbook '*.pptx', # PowerPoint Presentation '*.pptm', # PowerPoint Macro-Enabled Presentation '*.potx', # PowerPoint Template '*.potm', # PowerPoint Macro-Enabled Template '*.ppsx', # PowerPoint Show '*.ppsm', # PowerPoint Macro-Enabled Show '*.accdb', # Access Database '*.accde' # Access Execute Only Database ) # Legacy Office file extensions (Office 97-2003) $legacyExtensions = @( '*.doc', # Word Document '*.dot', # Word Template '*.xls', # Excel Workbook '*.xlt', # Excel Template '*.ppt', # PowerPoint Presentation '*.pot', # PowerPoint Template '*.pps', # PowerPoint Show '*.mdb' # Access Database ) # Determine which extensions to use $extensions = $modernExtensions if ($IncludeLegacy) { $extensions += $legacyExtensions } } process { try { $resolvedPath = Resolve-Path -LiteralPath $Path -ErrorAction Stop } catch { Write-Error "The specified path '$Path' does not exist." -ErrorAction Stop return } try { foreach ($extension in $extensions) { $searchParams = @{ LiteralPath = $resolvedPath Filter = $extension File = $true ErrorAction = 'SilentlyContinue' } if ($Recurse) { $searchParams['Recurse'] = $true } Get-ChildItem @searchParams } } catch { Write-Error "An error occurred while searching for files: $_" } } } |