Find-InFile.ps1

#Requires -version 3.0

Function Find-InFile {

[cmdletbinding()]
Param()

Set-StrictMode -Version Latest

Write-Verbose "Starting $($myinvocation.mycommand)"
#verify we are in the ISE
if ($host.name -match "ISE") {

    $Title = "Find in Files"

    #prompt for file types to search
    $Prompt = "Enter a path and file types to search. Leave blank to cancel"
    $Default = ".\*.ps1"
    $path = New-Inputbox -prompt $prompt -title $Title -default $Default
        
    if ($path) {
        #prompt for what to search for
        $Prompt = "What do you want to search for"
        $Default= $Null
        $find = New-Inputbox -prompt $prompt -title $Title -default $Default
        
        #execute search
        $results= Select-String -Pattern $find -Path $path | 
        Select Path,Filename,
        @{Name="Line";Expression={$_.Line.Trim()}},LineNumber |
        Out-Gridview -Title "Select one or more matching files" -OutputMode Multiple
    
        #open files and jump to matching line
        foreach ($item in $results) {
            Write-Verbose ($item | out-string)
            psedit $item.path
            #give file a chance to open
            start-sleep -Milliseconds 100
            #get current files
            $f = $psise.CurrentPowerShellTab.Files
            #select the last one
            $psise.CurrentPowerShellTab.Files.SelectedFile = $f[-1]
            #set the cursor
            $psise.CurrentPowerShellTab.files.SelectedFile.Editor.SetCaretPosition($item.linenumber,1)
        }
    }
}
else {
    Write-Warning "This version only works in the PowerShell ISE"
}
Write-Verbose "Ending $($myinvocation.mycommand)"

}