{"id":2287,"date":"2012-05-11T09:37:07","date_gmt":"2012-05-11T13:37:07","guid":{"rendered":"http:\/\/jdhitsolutions.com\/blog\/?p=2287"},"modified":"2012-05-11T09:40:28","modified_gmt":"2012-05-11T13:40:28","slug":"friday-fun-powershell-ise-function-finder","status":"publish","type":"post","link":"https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/","title":{"rendered":"Friday Fun: PowerShell ISE Function Finder"},"content":{"rendered":"<p>At the PowerShell Deep Dive in San Diego, I did a lightning session showing off something I had been working on. Sometimes I don't know what possesses me, but I felt the need for a better way to navigate my PowerShell scripts files that had many functions. Some files, especially modules, can get quite long and contain a number of functions. When using the PowerShell ISE I wanted a faster way to jump to a function. The problem is I don't always remember what I called a function or where it is in the file. It is very easy to jump to a particular line in the ISE using the Ctrl+G shortcut. <\/p>\n<p>So I started with some basics.<\/p>\n<p><code lang=\"PowerShell\"><br \/>\n$Path=$psise.CurrentFile.FullPath<br \/>\n<\/code><\/p>\n<p>I decided I'd use a regular expression pattern to find my functions. I write my functions like this:<\/p>\n<p><code lang=\"PowerShell\"><br \/>\nFunction Get-Foo {<\/p>\n<p>Param()<br \/>\n...<br \/>\n<\/code><\/p>\n<p>So I came up with a regex pattern to match the first line and to include the Filter keyword as well.<\/p>\n<p><code lang=\"PowerShell\"><br \/>\n[regex]$r=\"^(Function|Filter)\\s\\S+\\s{\"<br \/>\n<\/code><\/p>\n<p>I first thought of searching the content of the current file, but that won't give me a line number. Then I thought of Select-String. With my regex pattern, I can get the content of the current file and pipe it to Select-String. The match object that comes out the other end of the pipeline includes a line number property (awesome) and the matching line. I decided to do a little string parsing on the later to drop off the trailing curly brace.<\/p>\n<p><code lang=\"PowerShell\"><br \/>\n$list=get-content $path |<br \/>\n select-string $r | Select LineNumber,<br \/>\n @{Name=\"Function\";Expression={$_.Line.Split()[1]}}<br \/>\n<\/code><\/p>\n<p>Because I'm in the ISE I felt the need to stay graphical, so my first thought was to pipe the results to Out-Gridview.<\/p>\n<p><code lang=\"Powershell\"><br \/>\n$list | out-gridview -Title $psise.CurrentFile.FullPath<br \/>\n<\/code><\/p>\n<p>Here's a sample result.<\/p>\n<p><a href=\"http:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/05\/functionlist-gridview.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/05\/functionlist-gridview-252x300.png\" alt=\"\" title=\"functionlist-gridview\" width=\"252\" height=\"300\" class=\"aligncenter size-medium wp-image-2288\" srcset=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/05\/functionlist-gridview-252x300.png 252w, https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/05\/functionlist-gridview.png 346w\" sizes=\"auto, (max-width: 252px) 100vw, 252px\" \/><\/a><\/p>\n<p>Now I can see the function name and line number. In the ISE I can do Ctrl+G and jump to the function. Of course, if I modify the file and line numbers change I need to close the grid and re-run my command.  But wait, there's more....<\/p>\n<p>I've never done much with the WPF and figured this would be a great opportunity to do something with the <a href=\"http:\/\/showui.codeplex.com\/\" title=\"Get the module from CodePlex\" target=\"_blank\">ShowUI<\/a> module. I already had the data. All I had to do was create a form with ShowUI. This is what I ended up with.<\/p>\n<p><code lang=\"PowerShell\"><br \/>\n[string]$n=$psise.CurrentFile.DisplayName<br \/>\nScrollViewer -ControlName $n -CanContentScroll  -tag $psise.CurrentFile.FullPath -content {<br \/>\n     StackPanel  -MinWidth 300 -MaxHeight 250  `<br \/>\n     -orientation Vertical -Children {<br \/>\n        #get longest number if more than one function is found<br \/>\n        if ($count -eq 1) {<br \/>\n            [string]$i=$list.Linenumber<br \/>\n        }<br \/>\n        else {<br \/>\n            [string]$i=$list[-1].Linenumber<br \/>\n        }<br \/>\n        $l=$i.length<br \/>\n        foreach ($item in $list) {<\/p>\n<p>            [string]$text=\"{0:d$l}    {1}\" -f $item.linenumber,$item.function<\/p>\n<p>            Button $text -HorizontalContentAlignment Left -On_Click {<br \/>\n                #get the line number<br \/>\n                [regex]$num=\"^\\d+\"<br \/>\n                #parse out the line number<br \/>\n                $goto = $num.match($this.content).value<br \/>\n                #grab the file name from the tab value of the parent control<br \/>\n                [string]$f= $parent | get-uivalue<br \/>\n                #Open the file in the editor<br \/>\n                psedit $f<br \/>\n                #goto the selected line<br \/>\n                $psise.CurrentFile.Editor.SetCaretPosition($goto,1)<br \/>\n               #close the control<br \/>\n               Get-ParentControl | Set-UIValue -PassThru |Close-Control<br \/>\n            } #onclick<br \/>\n        } #foreach<br \/>\n     }<br \/>\n     } -show<br \/>\n<\/code><\/p>\n<p>The result is a stack panel of buttons in a scroll control. The button shows the line number and function name.<\/p>\n<p><a href=\"http:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/05\/functionlist-showui.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/05\/functionlist-showui-300x259.png\" alt=\"\" title=\"functionlist-showui\" width=\"300\" height=\"259\" class=\"aligncenter size-medium wp-image-2290\" srcset=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/05\/functionlist-showui-300x259.png 300w, https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/05\/functionlist-showui.png 333w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>When a button is clicked, the function gets the line number and automatically jumps to it. Originally I was leaving the control open, but this means the function is still running. And if I change the script the line numbers are off so I simply close the form after jumping to the function. <\/p>\n<p>In the end, I packaged all of this as a script file that adds a menu choice. If ShowUI is available, the function will use it. Otherwise the function defaults to Out-GridView.<\/p>\n<p><code lang=\"PowerShell\"><br \/>\nFunction Get-ISEFunction {<\/p>\n<p>[cmdletbinding()]<br \/>\nParam([string]$Path=$psise.CurrentFile.FullPath)<\/p>\n<p>#import ShowUI if found and use it later in the functoin<br \/>\nif (Get-module -name ShowUI -listavailable) {<br \/>\n    Import-Module ShowUI<br \/>\n    $showui=$True<br \/>\n}<br \/>\nelse {<br \/>\n    Write-Verbose \"Using Out-GridView\"<br \/>\n    $showui=$False<br \/>\n}<\/p>\n<p>#define a regex to find \"function | filter NAME {\"<br \/>\n[regex]$r=\"^(Function|Filter)\\s\\S+\\s{\"<\/p>\n<p>$list=get-content $path |<br \/>\n select-string $r | Select LineNumber,<br \/>\n @{Name=\"Function\";Expression={$_.Line.Split()[1]}}<\/p>\n<p>#were any functions found?<br \/>\nif ($list) {<br \/>\n    $count=$list | measure-object | Select-object -ExpandProperty Count<br \/>\n    Write-Verbose \"Found $count functions\"<br \/>\n    if ($showui) {<br \/>\n     <#\n        display function list with a WPF Form from ShowUI\n        Include file name so the right tab can get selected\n     #><\/p>\n<p>    [string]$n=$psise.CurrentFile.DisplayName<br \/>\n    Write-Verbose \"Building list for $n\"<\/p>\n<p>    ScrollViewer -ControlName $n -CanContentScroll  -tag $psise.CurrentFile.FullPath -content {<br \/>\n     StackPanel  -MinWidth 300 -MaxHeight 250  `<br \/>\n     -orientation Vertical -Children {<br \/>\n        #get longest number if more than one function is found<br \/>\n        if ($count -eq 1) {<br \/>\n            [string]$i=$list.Linenumber<br \/>\n        }<br \/>\n        else {<br \/>\n            [string]$i=$list[-1].Linenumber<br \/>\n        }<br \/>\n        $l=$i.length<br \/>\n        foreach ($item in $list) {<\/p>\n<p>            [string]$text=\"{0:d$l}    {1}\" -f $item.linenumber,$item.function<br \/>\n            Write-Verbose $text<br \/>\n            Button $text -HorizontalContentAlignment Left -On_Click {<br \/>\n                #get the line number<br \/>\n                [regex]$num=\"^\\d+\"<br \/>\n                #parse out the line number<br \/>\n                $goto = $num.match($this.content).value<br \/>\n                #grab the file name from the tab value of the parent control<br \/>\n                [string]$f= $parent | get-uivalue<br \/>\n                #Open the file in the editor<br \/>\n                psedit $f<br \/>\n                #goto the selected line<br \/>\n                $psise.CurrentFile.Editor.SetCaretPosition($goto,1)<br \/>\n               #close the control<br \/>\n               Get-ParentControl | Set-UIValue -PassThru |Close-Control<br \/>\n            } #onclick<br \/>\n        } #foreach<br \/>\n     }<br \/>\n     } -show <\/p>\n<p>    } #if $showui<br \/>\n    else {<br \/>\n        #no ShowUI module so use Out-GridView<br \/>\n        $list | out-gridview -Title $psise.CurrentFile.FullPath<br \/>\n    }<br \/>\n }<br \/>\nelse {<br \/>\n Write-Host \"No functions found in $($psise.CurrentFile.FullPath)\" -ForegroundColor Magenta<br \/>\n}<\/p>\n<p>} #close function<\/p>\n<p>#Add to the Add-ons menu<br \/>\n$PSISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add(\"List Functions\",{Get-ISEFunction},$null)<\/p>\n<p>#optional alias<br \/>\nset-alias gif get-isefunction<br \/>\n<\/code><\/p>\n<p>Now, I can click the List Functions menu choice and I'll get a graphical list of any functions in the current file. I'm sure the regex could be tweaked. I'm also sure there are improvements I could make to the ShowUI code, but it works.<\/p>\n<p>Download <a href='http:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/05\/Get-ISEFunction.txt' target='_blank'>Get-ISEFunction<\/a> and let me know what you think.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>At the PowerShell Deep Dive in San Diego, I did a lightning session showing off something I had been working on. Sometimes I don&#8217;t know what possesses me, but I felt the need for a better way to navigate my PowerShell scripts files that had many functions. Some files, especially modules, can get quite long&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[271,4,231,8],"tags":[568,232,365,534,540,378,379],"class_list":["post-2287","post","type-post","status-publish","format-standard","hentry","category-friday-fun","category-powershell","category-powershell-ise","category-scripting","tag-friday-fun","tag-ise","tag-out-gridview","tag-powershell","tag-scripting","tag-showui","tag-wpf"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Friday Fun: PowerShell ISE Function Finder &#8226; The Lonely Administrator<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Friday Fun: PowerShell ISE Function Finder &#8226; The Lonely Administrator\" \/>\n<meta property=\"og:description\" content=\"At the PowerShell Deep Dive in San Diego, I did a lightning session showing off something I had been working on. Sometimes I don&#039;t know what possesses me, but I felt the need for a better way to navigate my PowerShell scripts files that had many functions. Some files, especially modules, can get quite long...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/\" \/>\n<meta property=\"og:site_name\" content=\"The Lonely Administrator\" \/>\n<meta property=\"article:published_time\" content=\"2012-05-11T13:37:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-05-11T13:40:28+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/05\/functionlist-gridview-252x300.png\" \/>\n<meta name=\"author\" content=\"Jeffery Hicks\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@JeffHicks\" \/>\n<meta name=\"twitter:site\" content=\"@JeffHicks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeffery Hicks\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/2287\\\/friday-fun-powershell-ise-function-finder\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/2287\\\/friday-fun-powershell-ise-function-finder\\\/\"},\"author\":{\"name\":\"Jeffery Hicks\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/d0258030b41f07fd745f4078bdf5b6c9\"},\"headline\":\"Friday Fun: PowerShell ISE Function Finder\",\"datePublished\":\"2012-05-11T13:37:07+00:00\",\"dateModified\":\"2012-05-11T13:40:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/2287\\\/friday-fun-powershell-ise-function-finder\\\/\"},\"wordCount\":537,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/d0258030b41f07fd745f4078bdf5b6c9\"},\"image\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/2287\\\/friday-fun-powershell-ise-function-finder\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/jdhitsolutions.com\\\/blog\\\/wp-content\\\/uploads\\\/2012\\\/05\\\/functionlist-gridview-252x300.png\",\"keywords\":[\"Friday Fun\",\"ISE\",\"Out-Gridview\",\"PowerShell\",\"Scripting\",\"ShowUI\",\"WPF\"],\"articleSection\":[\"Friday Fun\",\"PowerShell\",\"PowerShell ISE\",\"Scripting\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/2287\\\/friday-fun-powershell-ise-function-finder\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/2287\\\/friday-fun-powershell-ise-function-finder\\\/\",\"url\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/2287\\\/friday-fun-powershell-ise-function-finder\\\/\",\"name\":\"Friday Fun: PowerShell ISE Function Finder &#8226; The Lonely Administrator\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/2287\\\/friday-fun-powershell-ise-function-finder\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/2287\\\/friday-fun-powershell-ise-function-finder\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/jdhitsolutions.com\\\/blog\\\/wp-content\\\/uploads\\\/2012\\\/05\\\/functionlist-gridview-252x300.png\",\"datePublished\":\"2012-05-11T13:37:07+00:00\",\"dateModified\":\"2012-05-11T13:40:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/2287\\\/friday-fun-powershell-ise-function-finder\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/2287\\\/friday-fun-powershell-ise-function-finder\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/2287\\\/friday-fun-powershell-ise-function-finder\\\/#primaryimage\",\"url\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/wp-content\\\/uploads\\\/2012\\\/05\\\/functionlist-gridview.png\",\"contentUrl\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/wp-content\\\/uploads\\\/2012\\\/05\\\/functionlist-gridview.png\",\"width\":\"346\",\"height\":\"411\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/2287\\\/friday-fun-powershell-ise-function-finder\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Friday Fun\",\"item\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/category\\\/friday-fun\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Friday Fun: PowerShell ISE Function Finder\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/\",\"name\":\"The Lonely Administrator\",\"description\":\"Practical Advice for the Automating IT Pro\",\"publisher\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/d0258030b41f07fd745f4078bdf5b6c9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/d0258030b41f07fd745f4078bdf5b6c9\",\"name\":\"Jeffery Hicks\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg\",\"caption\":\"Jeffery Hicks\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Friday Fun: PowerShell ISE Function Finder &#8226; The Lonely Administrator","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/","og_locale":"en_US","og_type":"article","og_title":"Friday Fun: PowerShell ISE Function Finder &#8226; The Lonely Administrator","og_description":"At the PowerShell Deep Dive in San Diego, I did a lightning session showing off something I had been working on. Sometimes I don't know what possesses me, but I felt the need for a better way to navigate my PowerShell scripts files that had many functions. Some files, especially modules, can get quite long...","og_url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/","og_site_name":"The Lonely Administrator","article_published_time":"2012-05-11T13:37:07+00:00","article_modified_time":"2012-05-11T13:40:28+00:00","og_image":[{"url":"http:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/05\/functionlist-gridview-252x300.png","type":"","width":"","height":""}],"author":"Jeffery Hicks","twitter_card":"summary_large_image","twitter_creator":"@JeffHicks","twitter_site":"@JeffHicks","twitter_misc":{"Written by":"Jeffery Hicks","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/#article","isPartOf":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/"},"author":{"name":"Jeffery Hicks","@id":"https:\/\/jdhitsolutions.com\/blog\/#\/schema\/person\/d0258030b41f07fd745f4078bdf5b6c9"},"headline":"Friday Fun: PowerShell ISE Function Finder","datePublished":"2012-05-11T13:37:07+00:00","dateModified":"2012-05-11T13:40:28+00:00","mainEntityOfPage":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/"},"wordCount":537,"commentCount":1,"publisher":{"@id":"https:\/\/jdhitsolutions.com\/blog\/#\/schema\/person\/d0258030b41f07fd745f4078bdf5b6c9"},"image":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/#primaryimage"},"thumbnailUrl":"http:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/05\/functionlist-gridview-252x300.png","keywords":["Friday Fun","ISE","Out-Gridview","PowerShell","Scripting","ShowUI","WPF"],"articleSection":["Friday Fun","PowerShell","PowerShell ISE","Scripting"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/","url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/","name":"Friday Fun: PowerShell ISE Function Finder &#8226; The Lonely Administrator","isPartOf":{"@id":"https:\/\/jdhitsolutions.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/#primaryimage"},"image":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/#primaryimage"},"thumbnailUrl":"http:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/05\/functionlist-gridview-252x300.png","datePublished":"2012-05-11T13:37:07+00:00","dateModified":"2012-05-11T13:40:28+00:00","breadcrumb":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/#primaryimage","url":"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/05\/functionlist-gridview.png","contentUrl":"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/05\/functionlist-gridview.png","width":"346","height":"411"},{"@type":"BreadcrumbList","@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/2287\/friday-fun-powershell-ise-function-finder\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Friday Fun","item":"https:\/\/jdhitsolutions.com\/blog\/category\/friday-fun\/"},{"@type":"ListItem","position":2,"name":"Friday Fun: PowerShell ISE Function Finder"}]},{"@type":"WebSite","@id":"https:\/\/jdhitsolutions.com\/blog\/#website","url":"https:\/\/jdhitsolutions.com\/blog\/","name":"The Lonely Administrator","description":"Practical Advice for the Automating IT Pro","publisher":{"@id":"https:\/\/jdhitsolutions.com\/blog\/#\/schema\/person\/d0258030b41f07fd745f4078bdf5b6c9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jdhitsolutions.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/jdhitsolutions.com\/blog\/#\/schema\/person\/d0258030b41f07fd745f4078bdf5b6c9","name":"Jeffery Hicks","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg","caption":"Jeffery Hicks"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg"}}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":4169,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/4169\/friday-fun-updated-ise-scripting-geek-module\/","url_meta":{"origin":2287,"position":0},"title":"Friday Fun: Updated ISE Scripting Geek Module","author":"Jeffery Hicks","date":"January 9, 2015","format":false,"excerpt":"A few years ago I published a module with a number of functions and enhancements for the PowerShell ISE. This ISEScriptingGeek module has remained popular over the last few years. But I wrote it for PowerShell v2. I have also come up with a number of new additions to the\u2026","rel":"","context":"In &quot;Friday Fun&quot;","block_context":{"text":"Friday Fun","link":"https:\/\/jdhitsolutions.com\/blog\/category\/friday-fun\/"},"img":{"alt_text":"geek","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2015\/01\/geek-150x150.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":2673,"url":"https:\/\/jdhitsolutions.com\/blog\/scripting\/2673\/friday-fun-edit-recent-file\/","url_meta":{"origin":2287,"position":1},"title":"Friday Fun: Edit Recent File","author":"Jeffery Hicks","date":"January 4, 2013","format":false,"excerpt":"As you might imagine I work on a lot of PowerShell projects at the same time. Sometimes I'll start something at the beginning of the week and then need to come back to it at the end of the week. The problem is that I can't always remembered what I\u2026","rel":"","context":"In &quot;Powershell 3.0&quot;","block_context":{"text":"Powershell 3.0","link":"https:\/\/jdhitsolutions.com\/blog\/category\/powershell-3-0\/"},"img":{"alt_text":"Edit-RecentFile","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2013\/01\/Edit-RecentFile-300x209.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":933,"url":"https:\/\/jdhitsolutions.com\/blog\/scripting\/933\/powershell-ise-new-function\/","url_meta":{"origin":2287,"position":2},"title":"PowerShell ISE New Function","author":"Jeffery Hicks","date":"September 16, 2010","format":false,"excerpt":"Yesterday I showed how to add a menu choice to the PowerShell ISE to insert the current date and time. Today I have something even better. At least it's something I've needed for awhile. I write a lot of advanced functions in PowerShell. I'm often cutting and pasting from previous\u2026","rel":"","context":"In &quot;PowerShell ISE&quot;","block_context":{"text":"PowerShell ISE","link":"https:\/\/jdhitsolutions.com\/blog\/category\/powershell-ise\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2010\/09\/ise-addons.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1233,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/1233\/friday-fun-convertto-text-file\/","url_meta":{"origin":2287,"position":3},"title":"Friday Fun ConvertTo Text File","author":"Jeffery Hicks","date":"March 18, 2011","format":false,"excerpt":"When I'm working on simple PowerShell scripts, I find myself using the PowerShell ISE. When I need to share those scripts on my blog I inevitably need to save the script as a text file so I can post it. I finally realized that instead of the few manual steps,\u2026","rel":"","context":"In &quot;Friday Fun&quot;","block_context":{"text":"Friday Fun","link":"https:\/\/jdhitsolutions.com\/blog\/category\/friday-fun\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4923,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell-ise\/4923\/friday-fun-tweaking-the-powershell-ise\/","url_meta":{"origin":2287,"position":4},"title":"Friday Fun: Tweaking the PowerShell ISE","author":"Jeffery Hicks","date":"February 19, 2016","format":false,"excerpt":"Today's fun is still PowerShell related, but instead of something in the console, we'll have some fun with the PowerShell ISE. One of the things I love about the PowerShell ISE is that you can customize it and extend it.\u00a0 My ISE Scripting Geek project is an example.\u00a0 But today\u2026","rel":"","context":"In &quot;Friday Fun&quot;","block_context":{"text":"Friday Fun","link":"https:\/\/jdhitsolutions.com\/blog\/category\/friday-fun\/"},"img":{"alt_text":"image","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2016\/02\/image_thumb-12.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":2330,"url":"https:\/\/jdhitsolutions.com\/blog\/scripting\/2330\/friday-fun-get-latest-powershell-scripts\/","url_meta":{"origin":2287,"position":5},"title":"Friday Fun: Get Latest PowerShell Scripts","author":"Jeffery Hicks","date":"May 18, 2012","format":false,"excerpt":"Probably like many of you I keep almost all of my scripts in a single location. I'm also usually working on multiple items at the same time. Some times I have difficult remembering the name of a script I might have been working on a few days ago that I\u2026","rel":"","context":"In &quot;Friday Fun&quot;","block_context":{"text":"Friday Fun","link":"https:\/\/jdhitsolutions.com\/blog\/category\/friday-fun\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2012\/05\/get-latestscript-300x133.png?resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/2287","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/comments?post=2287"}],"version-history":[{"count":0,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/2287\/revisions"}],"wp:attachment":[{"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/media?parent=2287"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/categories?post=2287"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/tags?post=2287"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}