Public/Misc/Search-StringInFiles.ps1

function Search-StringInFiles {
    <#
    .SYNOPSIS
        Searches for a string pattern across files in a directory.
 
    .DESCRIPTION
        Scans all files in the specified directory for lines matching the given search string.
        Results are displayed using Select-String, with each file's name printed as a header.
        Use the -Recurse switch to search subdirectories as well.
 
    .PARAMETER SearchString
        The string or regex pattern to search for within file contents.
 
    .PARAMETER Directory
        The directory to search. Defaults to the current working directory.
 
    .PARAMETER Recurse
        When specified, searches all subdirectories recursively.
 
    .EXAMPLE
        Search-StringInFiles -SearchString "error"
 
        Searches for the word "error" in all files in the current directory.
 
    .EXAMPLE
        Search-StringInFiles -SearchString "TODO" -Directory "C:\Projects\MyApp" -Recurse
 
        Recursively searches all files under C:\Projects\MyApp for lines containing "TODO".
    #>

    param (
        [Parameter(Mandatory = $true)]
        [string]
        $SearchString,

        [Parameter(Mandatory = $false)]
        [string]
        $Directory = "$(Get-Location)",

        [Parameter(Mandatory = $false)]
        [switch]
        $Recurse
    )

    $Files = Get-ChildItem -Path $Directory -File -Recurse:$Recurse

    foreach ($file in $Files) {
        Write-Host "#### $($File.Name) ######" -ForegroundColor Cyan
        try {
            Select-String -Path $File.FullName -Pattern $SearchString -ErrorAction Stop
        }
        catch {
            Write-Warning "Could not read file: $($file.FullName). Error: $_"
        }
    }
}