Previously I blogged about a recursive select-string function.  Recently I've extended it a bit.  I found the function to be very useful but when I encountered problems searching large directories that contained binary files.  Namely searching them usually returned a result of sorts and printing out the contents of a binary file caused my console to beep in a rather annoying fashion.  To fix this I added a new parameter that will perform a slightly smarter search by filtering out binary files.

function Select-StringRecurse()
{
    param ( [string]$text = $(throw "Need text to search for"),
            [string[]]$include = "*",
            [switch]$smart = $false)

    $smartRegex = "^\.(lib|exe|obj|bin|tlb|pdb)$"
    gci -re -in $include |
        ? { -not $_.PSIsContainer } |
        ? { (-not ($smart)) -or (-not ($_.Extension -match $smartRegex)) } |
        % { write-debug "Considering: $($_.FullName)"; ss $text $_.FullName }
}