Finding PowerShell Functions

by Sep 24, 2014

PowerShell 3.0 and later

To quickly scan your PowerShell script repository and find all files that have a given function in them, try this filter:

filter Find-Function
{
   $path = $_.FullName
   $lastwrite = $_.LastWriteTime
   $text = Get-Content -Path $path
   
   if ($text.Length -gt 0)
   {
      
      $token = $null
      $errors = $null
      $ast = [System.Management.Automation.Language.Parser]::ParseInput($text, [ref] $token, [ref] $errors)
      $ast.FindAll({ $args[0] -is [System.Management.Automation.Language.FunctionDefinitionAst] }, $true) |
      Select-Object -Property Name, Path, LastWriteTime |
      ForEach-Object {
         $_.Path = $path
         $_.LastWriteTime = $lastwrite
         $_
      }
   }
} 

And this is how you’d scan your user profile for all PowerShell scripts that define functions:

PS> dir $home -Filter *.ps1 -Recurse -Exclude *.ps1xml | Find-Function
Name Path LastWriteTime ---- ---- ------------- Inject-LogonCredentials C:\Users\Tobias\Desktop... 06.01.2014 02:43:00 Test-Command C:\Users\Tobias\Desktop... 06.03.2014 10:17:02 Test C:\Users\Tobias\Desktop... 30.01.2014 09:32:20 Get-WebPictureOriginal C:\Users\Tobias\Desktop... 11.12.2013 11:37:53 Get-ConnectionString C:\Users\Tobias\Documen... 23.05.2014 10:49:09 Convert-SID2User C:\Users\Tobias\Documen... 23.05.2014 15:33:06 Lock-Screen C:\Users\Tobias\Documen... 19.03.2014 12:51:54 Show-OpenFileDialog C:\Users\Tobias\Documen... 16.05.2014 13:42:16 Show-UniversalData C:\Users\Tobias\Documen... 16.05.2014 13:23:20 Start-TimebombMemory C:\Users\Tobias\Documen... 23.05.2014 09:12:28 Stop-TimebombMemory C:\Users\Tobias\Documen... 23.05.2014 09:12:28 (...)

Simply pipe the result to Out-GridView to get the full and uncut information.

Twitter This Tip! ReTweet this Tip!