{"id":9251,"date":"2006-11-23T12:20:00","date_gmt":"2006-11-23T12:20:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/powershell\/2006\/11\/23\/lets-do-a-deep-drill-into-select-string\/"},"modified":"2019-02-18T13:21:08","modified_gmt":"2019-02-18T20:21:08","slug":"lets-do-a-deep-drill-into-select-string","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/powershell\/lets-do-a-deep-drill-into-select-string\/","title":{"rendered":"Let&#039;s do a deep drill into Select-String"},"content":{"rendered":"<p><!--\n \/* Font Definitions *\/\n @font-face\n\t{font-family:\"Cambria Math\";\n\tpanose-1:2 4 5 3 5 4 6 3 2 4;\n\tmso-font-charset:1;\n\tmso-generic-font-family:roman;\n\tmso-font-format:other;\n\tmso-font-pitch:variable;\n\tmso-font-signature:0 0 0 0 0 0;}\n@font-face\n\t{font-family:Cambria;\n\tpanose-1:2 4 5 3 5 4 6 3 2 4;\n\tmso-font-charset:0;\n\tmso-generic-font-family:roman;\n\tmso-font-pitch:variable;\n\tmso-font-signature:-1610611985 1073741899 0 0 159 0;}\n@font-face\n\t{font-family:Calibri;\n\tpanose-1:2 15 5 2 2 2 4 3 2 4;\n\tmso-font-charset:0;\n\tmso-generic-font-family:swiss;\n\tmso-font-pitch:variable;\n\tmso-font-signature:-1610611985 1073750139 0 0 159 0;}\n@font-face\n\t{font-family:\"Lucida Console\";\n\tpanose-1:2 11 6 9 4 5 4 2 2 4;\n\tmso-font-charset:0;\n\tmso-generic-font-family:modern;\n\tmso-font-pitch:fixed;\n\tmso-font-signature:-2147482993 6144 0 0 31 0;}\n \/* Style Definitions *\/\n p.MsoNormal, li.MsoNormal, div.MsoNormal\n\t{mso-style-unhide:no;\n\tmso-style-qformat:yes;\n\tmso-style-parent:\"\";\n\tmargin-top:0in;\n\tmargin-right:0in;\n\tmargin-bottom:10.0pt;\n\tmargin-left:.75in;\n\tline-height:115%;\n\tmso-pagination:widow-orphan;\n\tfont-size:11.0pt;\n\tfont-family:\"Calibri\",\"sans-serif\";\n\tmso-fareast-font-family:\"Times New Roman\";\n\tmso-fareast-theme-font:minor-fareast;\n\tmso-bidi-font-family:\"Times New Roman\";}\nh2\n\t{mso-style-priority:9;\n\tmso-style-unhide:no;\n\tmso-style-qformat:yes;\n\tmso-style-link:\"Heading 2 Char\";\n\tmargin-top:10.0pt;\n\tmargin-right:0in;\n\tmargin-bottom:0in;\n\tmargin-left:.75in;\n\tmargin-bottom:.0001pt;\n\tline-height:115%;\n\tmso-pagination:widow-orphan;\n\tpage-break-after:avoid;\n\tmso-outline-level:2;\n\tfont-size:13.0pt;\n\tfont-family:\"Cambria\",\"serif\";\n\tmso-fareast-font-family:\"Times New Roman\";\n\tmso-fareast-theme-font:minor-fareast;\n\tcolor:#4F81BD;\n\tfont-weight:bold;}\na:link, span.MsoHyperlink\n\t{mso-style-noshow:yes;\n\tmso-style-priority:99;\n\tcolor:blue;\n\ttext-decoration:underline;\n\ttext-underline:single;}\na:visited, span.MsoHyperlinkFollowed\n\t{mso-style-noshow:yes;\n\tmso-style-priority:99;\n\tcolor:purple;\n\ttext-decoration:underline;\n\ttext-underline:single;}\np\n\t{mso-style-noshow:yes;\n\tmso-style-priority:99;\n\tmso-margin-top-alt:auto;\n\tmargin-right:0in;\n\tmso-margin-bottom-alt:auto;\n\tmargin-left:0in;\n\tmso-pagination:widow-orphan;\n\tfont-size:12.0pt;\n\tfont-family:\"Times New Roman\",\"serif\";\n\tmso-fareast-font-family:\"Times New Roman\";\n\tmso-fareast-theme-font:minor-fareast;}\np.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph\n\t{mso-style-priority:34;\n\tmso-style-unhide:no;\n\tmso-style-qformat:yes;\n\tmargin-top:0in;\n\tmargin-right:0in;\n\tmargin-bottom:10.0pt;\n\tmargin-left:.5in;\n\tline-height:115%;\n\tmso-pagination:widow-orphan;\n\tfont-size:11.0pt;\n\tfont-family:\"Calibri\",\"sans-serif\";\n\tmso-fareast-font-family:\"Times New Roman\";\n\tmso-fareast-theme-font:minor-fareast;\n\tmso-bidi-font-family:\"Times New Roman\";}\nspan.Heading2Char\n\t{mso-style-name:\"Heading 2 Char\";\n\tmso-style-noshow:yes;\n\tmso-style-priority:9;\n\tmso-style-unhide:no;\n\tmso-style-locked:yes;\n\tmso-style-link:\"Heading 2\";\n\tfont-family:\"Cambria\",\"serif\";\n\tmso-ascii-font-family:Cambria;\n\tmso-hansi-font-family:Cambria;\n\tcolor:#4F81BD;\n\tfont-weight:bold;}\np.msolistparagraphcxspfirst, li.msolistparagraphcxspfirst, div.msolistparagraphcxspfirst\n\t{mso-style-name:msolistparagraphcxspfirst;\n\tmso-style-unhide:no;\n\tmargin-top:0in;\n\tmargin-right:0in;\n\tmargin-bottom:0in;\n\tmargin-left:.5in;\n\tmargin-bottom:.0001pt;\n\tline-height:115%;\n\tmso-pagination:widow-orphan;\n\tfont-size:11.0pt;\n\tfont-family:\"Calibri\",\"sans-serif\";\n\tmso-fareast-font-family:\"Times New Roman\";\n\tmso-fareast-theme-font:minor-fareast;\n\tmso-bidi-font-family:\"Times New Roman\";}\np.msolistparagraphcxspmiddle, li.msolistparagraphcxspmiddle, div.msolistparagraphcxspmiddle\n\t{mso-style-name:msolistparagraphcxspmiddle;\n\tmso-style-unhide:no;\n\tmargin-top:0in;\n\tmargin-right:0in;\n\tmargin-bottom:0in;\n\tmargin-left:.5in;\n\tmargin-bottom:.0001pt;\n\tline-height:115%;\n\tmso-pagination:widow-orphan;\n\tfont-size:11.0pt;\n\tfont-family:\"Calibri\",\"sans-serif\";\n\tmso-fareast-font-family:\"Times New Roman\";\n\tmso-fareast-theme-font:minor-fareast;\n\tmso-bidi-font-family:\"Times New Roman\";}\np.msolistparagraphcxsplast, li.msolistparagraphcxsplast, div.msolistparagraphcxsplast\n\t{mso-style-name:msolistparagraphcxsplast;\n\tmso-style-unhide:no;\n\tmargin-top:0in;\n\tmargin-right:0in;\n\tmargin-bottom:10.0pt;\n\tmargin-left:.5in;\n\tline-height:115%;\n\tmso-pagination:widow-orphan;\n\tfont-size:11.0pt;\n\tfont-family:\"Calibri\",\"sans-serif\";\n\tmso-fareast-font-family:\"Times New Roman\";\n\tmso-fareast-theme-font:minor-fareast;\n\tmso-bidi-font-family:\"Times New Roman\";}\nspan.CodeChar\n\t{mso-style-name:\"Code Char\";\n\tmso-style-unhide:no;\n\tmso-style-locked:yes;\n\tmso-style-link:Code;\n\tmso-ansi-font-size:8.0pt;\n\tmso-bidi-font-size:8.0pt;\n\tfont-family:\"Lucida Console\";\n\tmso-ascii-font-family:\"Lucida Console\";\n\tmso-fareast-font-family:\"Times New Roman\";\n\tmso-fareast-theme-font:minor-fareast;\n\tmso-hansi-font-family:\"Lucida Console\";\n\tcolor:#EEEDF0;\n\tbackground:#012456;}\np.Code, li.Code, div.Code\n\t{mso-style-name:Code;\n\tmso-style-unhide:no;\n\tmso-style-link:\"Code Char\";\n\tmargin-top:0in;\n\tmargin-right:0in;\n\tmargin-bottom:12.0pt;\n\tmargin-left:.75in;\n\tline-height:115%;\n\tmso-pagination:widow-orphan;\n\tbackground:#012456;\n\tfont-size:8.0pt;\n\tfont-family:\"Lucida Console\";\n\tmso-fareast-font-family:\"Times New Roman\";\n\tmso-fareast-theme-font:minor-fareast;\n\tmso-bidi-font-family:\"Times New Roman\";\n\tcolor:#EEEDF0;}\np.msopapdefault, li.msopapdefault, div.msopapdefault\n\t{mso-style-name:msopapdefault;\n\tmso-style-unhide:no;\n\tmargin-top:0in;\n\tmargin-right:0in;\n\tmargin-bottom:10.0pt;\n\tmargin-left:.75in;\n\tline-height:115%;\n\tmso-pagination:widow-orphan;\n\tfont-size:12.0pt;\n\tfont-family:\"Times New Roman\",\"serif\";\n\tmso-fareast-font-family:\"Times New Roman\";\n\tmso-fareast-theme-font:minor-fareast;}\nspan.SpellE\n\t{mso-style-name:\"\";\n\tmso-spl-e:yes;}\nspan.GramE\n\t{mso-style-name:\"\";\n\tmso-gram-e:yes;}\n.MsoChpDefault\n\t{mso-style-type:export-only;\n\tmso-default-props:yes;\n\tfont-size:10.0pt;\n\tmso-ansi-font-size:10.0pt;\n\tmso-bidi-font-size:10.0pt;}\n.MsoPapDefault\n\t{mso-style-type:export-only;\n\tmargin-top:0in;\n\tmargin-right:0in;\n\tmargin-bottom:10.0pt;\n\tmargin-left:.75in;\n\tline-height:115%;}\n@page Section1\n\t{size:8.5in 11.0in;\n\tmargin:1.0in 1.0in 1.0in 1.0in;\n\tmso-header-margin:.5in;\n\tmso-footer-margin:.5in;\n\tmso-paper-source:0;}\ndiv.Section1\n\t{page:Section1;}\n--><\/p>\n<div class=\"Section1\">\n<p class=\"MsoNormal\"><span>In my blog post Processing .EML files using Select-String and <span class=\"SpellE\"><span class=\"GramE\">SetCreationTIme<\/span><\/span><span class=\"GramE\">(<\/span>) (<a href=\"http:\/\/blogs.msdn.com\/powershell\/archive\/2006\/11\/23\/processing-eml-files-with-select-string-and-setcreationtime.aspx\">http:\/\/blogs.msdn.com\/powershell\/archive\/2006\/11\/23\/processing-eml-files-with-select-string-and-setcreationtime.aspx<\/a> ), I showed you could do some incredibly powerful stuff using 2 lines of PowerShell Script.&nbsp; The reason you can do this is because of the design of Select-String.&nbsp; Select-String is a very cool utility and can make you very productive so let\u2019s drill into it.&nbsp; Note \u2013 I had a bug in that script which I\u2019ll correct at the end.<\/span><\/p>\n<p class=\"MsoNormal\"><span>I think you are going to enjoy this one but you\u2019ll probably want to grab a cup of coffee before starting \u2013 you want to be alert and you don\u2019t want to rush this.&nbsp; While this is a deep drill into Select-String, it is more than that as well.&nbsp; It is a drill-into the mindset and the patterns of Windows PowerShell.&nbsp; That is a lesson worth learning because you\u2019ll use the lessons thousands of times in the future.<\/span><\/p>\n<p class=\"MsoNormal\"><span>You&#8217;ve probably already realized that Select-String is an awesome tool.&nbsp; You&#8217;ve probably realized that you can specify a string and a&nbsp;<span class=\"SpellE\">wildcarded<\/span> list of files to search for things.&nbsp; Let&#8217;s use create some common text so that we are on searching against the same stuff.&nbsp; Here is a chewy little one-liner which dumps all of your aliases into a set of files.&nbsp; Note that in these examples, I\u2019ll be using the ALIAS <span class=\"SpellE\">ss<\/span> for Select-String. <span class=\"GramE\">Also not that my aliases may be different than your aliases so your results may be different.<\/span><\/span><\/p>\n<p class=\"Code\">PS&gt; <span class=\"SpellE\">cd<\/span> c:\\sstest<br \/>PS&gt; [<span class=\"SpellE\">int<\/span><span class=\"GramE\">][<\/span>char]&#8221;a&#8221;..[<span class=\"SpellE\"><span class=\"GramE\">int<\/span><\/span>][char]&#8221;z&#8221; |<br \/>&gt;&gt; %{$c=[char]$_; gal ($c + &#8220;*&#8221;) &gt; ($c + &#8220;-alias.txt&#8221;)}<br \/>&gt;&gt;<br \/>PS&gt; dir<\/p>\n<p>&nbsp;&nbsp;&nbsp; Directory: <span class=\"SpellE\">Microsoft.PowerShell.Core<\/span>\\<span class=\"SpellE\">FileSystem<\/span>::C:\\SSTest<\/p>\n<p>Mode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<span class=\"SpellE\">LastWriteTime<\/span>&nbsp;&nbsp;&nbsp;&nbsp; Length Name<br \/>&#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;-&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212; &#8212;-<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 930 a-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2162 b-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3086 c-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 776 d-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1084 e-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1084 f-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4164 g-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 622 h-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1238 i-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 j-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 468 k-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 776 l-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1392 m-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1238 n-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 468 o-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 930 p-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 q-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2624 r-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3394 s-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 776 t-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 468 u-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 v-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 622 w-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 x-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 y-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:14 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 z-alias.txt<\/p>\n<h2><span><br \/>Select-String accepts arrays of wildcards to specify Files<\/span><\/h2>\n<p class=\"MsoNormal\">Now let\u2019s find a string.&nbsp; First we\u2019ll look for all files then I\u2019ll show you how you can specify which files you want to look for.&nbsp; You can do this by specifying a wildcard or a set of wildcards:<\/p>\n<p class=\"Code\">PS&gt; <span class=\"SpellE\">ss<\/span> drive *<\/p>\n<p>g-alias.txt:8:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">gdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-<span class=\"SpellE\">PSDrive<\/span><br \/>m-alias.txt:6:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New-<span class=\"SpellE\">PSDrive<\/span><br \/>n-alias.txt:5:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">ndr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New-<span class=\"SpellE\">PSDrive<\/span><br \/>r-alias.txt:4:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">rdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remove-<span class=\"SpellE\">PSDrive<\/span><\/p>\n<p>PS&gt; <span class=\"SpellE\">ss<\/span> drive g*<\/p>\n<p><span class=\"GramE\">g-alias.txt:<\/span>8:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">gdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-<span class=\"SpellE\">PSDrive<\/span><\/p>\n<p>PS&gt; <span class=\"SpellE\">ss<\/span> drive [a-m]*<\/p>\n<p>g-alias.txt:8:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">gdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-<span class=\"SpellE\">PSDrive<\/span><br \/>m-alias.txt:6:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New-<span class=\"SpellE\">PSDrive<\/span><\/p>\n<p>PS&gt; <span class=\"SpellE\">ss<\/span> drive g*,r*<\/p>\n<p>g-alias.txt:8:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">gdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-<span class=\"SpellE\">PSDrive<\/span><br \/>r-alias.txt:4:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">rdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remove-<span class=\"SpellE\">PSDrive<\/span><\/p>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n<h2><span>Select-String accepts arrays of regular expressions to specify STRINGS<\/span><\/h2>\n<p class=\"MsoNormal\">In that example, we were looking for a string but you can specify a regular expression or set of regular expressions:<\/p>\n<p class=\"Code\">PS&gt; <span class=\"SpellE\">ss<\/span> &#8221; [a-r]<span class=\"SpellE\">dr<\/span>&#8221; *<\/p>\n<p>g-alias.txt:8:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">gdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-<span class=\"SpellE\">PSDrive<\/span><br \/>n-alias.txt:5:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">ndr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New-<span class=\"SpellE\">PSDrive<\/span><br \/>r-alias.txt:4:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">rdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remove-<span class=\"SpellE\">PSDrive<\/span><\/p>\n<p>PS&gt; <span class=\"SpellE\">ss<\/span> &#8221; [a-r]<span class=\"SpellE\">dr|mount<\/span>&#8221; *<\/p>\n<p>g-alias.txt:8:Alias&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"SpellE\">gdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-<span class=\"SpellE\">PSDrive<\/span><br \/>m-alias.txt:6:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New-<span class=\"SpellE\">PSDrive<\/span><br \/>n-alias.txt:5:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">ndr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New-<span class=\"SpellE\">PSDrive<\/span><br \/>r-alias.txt:4:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">rdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remove-<span class=\"SpellE\">PSDrive<\/span><\/p>\n<p>PS&gt; <span class=\"SpellE\">ss<\/span> &#8221; [a-n]<span class=\"SpellE\">dr<\/span>&#8220;,&#8221; [m-z]<span class=\"SpellE\">dr<\/span>&#8221; *<\/p>\n<p>g-alias.txt:8:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">gdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-<span class=\"SpellE\">PSDrive<\/span><br \/>n-alias.txt:5:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">ndr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New-<span class=\"SpellE\">PSDrive<\/span><br \/>r-alias.txt:4:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">rdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remove-<span class=\"SpellE\">PSDrive<\/span><\/p>\n<p class=\"MsoNormal\">NOTE: If you don\u2019t want to select-string to interpret the search string as a regular expression, you merely have to add the switch \u2013<span class=\"SpellE\">SimpleMatch<\/span> and we\u2019ll use the string as a literal.<\/p>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n<h2><span>Select-String accepts \u2013Include and \u2013Exclude to tweak which files it operates on<\/span><\/h2>\n<p class=\"MsoNormal\">It is probably pretty obvious that you can control which files you search against by specifying the correct wildcard in the file specification but did you also realize that you can tweak this with \u2013INCLUDE and \u2013EXCLUDE?&nbsp;&nbsp; These parameters take a wildcard expression or set of wildcard expressions and operate AFTER the <span class=\"SpellE\">filepath<\/span> is resolved.&nbsp; Here is an example of exclude:<\/p>\n<p class=\"Code\">PS&gt; <span class=\"SpellE\">ss<\/span> drive * -exclude *[<span class=\"SpellE\">mn<\/span>]-al*<\/p>\n<p>g-alias.txt:8<span class=\"GramE\">:Alias<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">gdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get-<span class=\"SpellE\">PSDrive<\/span><br \/>r-alias.txt:4:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">rdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remove-<span class=\"SpellE\">PSDrive<\/span><\/p>\n<p>PS&gt; <span class=\"SpellE\">ss<\/span> drive * -exclude [<span class=\"SpellE\">mn<\/span>]-al*<\/p>\n<p>g-alias.txt:8:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">gdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-<span class=\"SpellE\">PSDrive<\/span><br \/>m-alias.txt:6:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New-<span class=\"SpellE\">PSDrive<\/span><br \/>n-alias.txt:5:Alias&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"SpellE\">ndr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New-<span class=\"SpellE\">PSDrive<\/span><br \/>r-alias.txt:4:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">rdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remove-<span class=\"SpellE\">PSDrive<\/span><\/p>\n<p class=\"MsoNormal\">Now take a second and examine the differences between those two and ask yourself the question, why didn\u2019t the second request exclude the files that started with M or N?<\/p>\n<p class=\"MsoNormal\">The answer is that \u2013Exclude and \u2013Include work against the FULL PATHNAME (C:\\sstest\\m-alias.txt) not the <span class=\"SpellE\">ChildName<\/span><span class=\"GramE\">.(<\/span>m-alias.txt).<\/p>\n<p class=\"MsoNormal\">The benefits of this become clearer when you begin to explore the pipeline scenarios.&nbsp; Select-String can accept pipeline data from any command that <\/p>\n<p class=\"MsoListParagraph\">1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Produces objects that have a PATH property.<\/p>\n<p class=\"MsoListParagraph\">2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Produce <span class=\"SpellE\">FileInfo<\/span> or <span class=\"SpellE\">MatchInfo<\/span> Objects<\/p>\n<p class=\"MsoListParagraph\">a.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Actually it will accept any object from the pipeline but it is only going to actually do work when the object is one of these.&nbsp; Now as a side note, you might ask why we accept any object.&nbsp; There is a long answer that I won\u2019t go into but let me tease you with a feature that we might add in the future and then you can connect the dots. &nbsp;Imagine the following command<span class=\"GramE\">:<\/span><\/p>\n<p>PS&gt; Get-Process |Select-String&nbsp; Office \u2013Property Description<br \/>where this would create MATCHINFO record for the equivalent:<br \/>PS&gt; Get-Process |Select Description |where {$_ -match \u201c*Description*\u201d<\/p>\n<h2><span>&nbsp;<\/span><\/h2>\n<h2><span>You can pipe anything that produces <span class=\"SpellE\">FileInfo<\/span> objects into Select-String.<\/span><\/h2>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n<p class=\"Code\">PS&gt; dir [g-r]*<br \/>&nbsp;&nbsp;&nbsp; Directory: <span class=\"SpellE\">Microsoft.PowerShell.Core<\/span>\\<span class=\"SpellE\">FileSystem<\/span>::C:\\SSTest<\/p>\n<p>Mode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">LastWriteTime<\/span>&nbsp;&nbsp;&nbsp;&nbsp; Length Name<br \/>&#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;-&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212; &#8212;-<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2760 g-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 414 h-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 822 i-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 j-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 312 k-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 516 l-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 924 m-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 822 n-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 312 o-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 618 p-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 q-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1740 r-alias.txt<\/p>\n<p>PS&gt; dir [g-r]* |<span class=\"SpellE\">ss<\/span> drive<br \/>g-alias.txt:8:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<span class=\"SpellE\">gdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-<span class=\"SpellE\">PSDrive<\/span><br \/>m-alias.txt:6:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New-<span class=\"SpellE\">PSDrive<\/span><br \/>n-alias.txt:5:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">ndr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New-<span class=\"SpellE\">PSDrive<\/span><br \/>r-alias.txt:4:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">rdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remove-<span class=\"SpellE\">PSDrive<\/span><\/p>\n<p>PS&gt; ([<span class=\"SpellE\">System.IO.DirectoryInfo<\/span>]&#8221;c:\\sstest&#8221;).<span class=\"SpellE\">GetFileSystemInfos<\/span>()<br \/>Mode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">LastWriteTime<\/span>&nbsp;&nbsp;&nbsp;&nbsp; Length Name<br \/>&#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;-&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212; &#8212;-<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 618 a-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1434 b-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2046 c-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 516 d-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 720 e-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 720 f-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2760 g-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 414 h-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 822 i-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 j-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 312 k-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 516 l-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 924 m-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 822 n-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 312 o-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 618 p-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 q-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1740 r-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2250 s-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 516 t-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 312 u-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 v-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 414 w-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 x-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 y-alias.txt<br \/>-a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11\/23\/2006&nbsp;&nbsp; 6:26 AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 z-alias.txt<\/p>\n<p>PS&gt; ([<span class=\"SpellE\">System.IO.DirectoryInfo<\/span>]&#8221;c:\\sstest&#8221;).<span class=\"SpellE\">GetFileSystemInfos<\/span>() |<br \/>&gt;&gt; <span class=\"SpellE\">ss<\/span> drive<br \/>&gt;&gt;<br \/>c:\\sstest\\g-alias.txt:8:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">gdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-<span class=\"SpellE\">PSDrive<\/span><br \/>c:\\sstest\\m-alias.txt:6:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New-<span class=\"SpellE\">PSDrive<\/span><br \/>c:\\sstest\\n-alias.txt:5:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">ndr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New-<span class=\"SpellE\">PSDrive<\/span><br \/>c:\\sstest\\r-alias.txt:4:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;nbsp\n;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">rdr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remove-<span class=\"SpellE\">PSDrive<\/span><\/p>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n<h2><span>&nbsp;<\/span><\/h2>\n<h2><span>You can pipe anything that produces <span class=\"SpellE\">MatchInfo<\/span> objects into Select-String.<\/span><\/h2>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n<p class=\"MsoNormal\">Here is where it gets fun!&nbsp; While the above statement is true, at this point the only command that produces these is Select-String.&nbsp; Let&#8217;s do a manual text substitution and restate the heading:<\/p>\n<p class=\"MsoNormal\">You can pipe the output of Select-String into Select-String<\/p>\n<p class=\"MsoNormal\">Yes \u2013 that\u2019s exactly correct and the implications are awesome.&nbsp; First it means that you can avoid some really hairy\/scary regular expressions for certain things.&nbsp; The regularity of the data we are working with doesn\u2019t allow a very interesting example but here is one:<\/p>\n<p class=\"Code\">PS&gt; <span class=\"SpellE\">ss<\/span> get *|<span class=\"SpellE\">ss<\/span> item<\/p>\n<p>d-alias.txt:6<span class=\"GramE\">:Alias<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-<span class=\"SpellE\">ChildItem<\/span><br \/>g-alias.txt:6:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">gci<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-<span class=\"SpellE\">ChildItem<\/span><br \/>g-alias.txt:10:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">gi<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-Item<br \/>g-alias.txt:13:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">gp<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-<span class=\"SpellE\">ItemProperty<\/span><br \/>l-alias.txt:5:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">ls<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-<span class=\"SpellE\">ChildItem<\/span><\/p>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n<p class=\"MsoNormal\">What is so cool about this is that the second Select-String is ONLY searching the results of the first Select-String (i.e. it is not reprocessing the file itself).&nbsp; This is great because it allows you to store the results of one long and expensive Select-String and then do a set of very quick and cheap searches against those results.&nbsp;&nbsp; In the example below I search all the txt files underneath the Windows Directory and store the results in a global variable.&nbsp; I then use that global variable to search for the same term a second time and show that it is 31 times faster to do it the second time.&nbsp; Of course the point would be that you\u2019d be looking for other things.&nbsp; This makes it easy to iterate through a series of investigations.&nbsp; We want you to explore you system so making it cheap to do so is important to us. <\/p>\n<p class=\"Code\">PS&gt; (Measure-Command { <br \/>&gt;&gt; $<span class=\"SpellE\">global:x<\/span> = dir c:\\windows *.txt &#8211;<span class=\"SpellE\">recurse<\/span> -ea <span class=\"SpellE\">SilentlyContinue<\/span> |<br \/>&gt;&gt; <span class=\"SpellE\">ss<\/span> PowerShell<br \/>&gt;&gt; }<br \/>&gt;&gt; ).<span class=\"SpellE\">TotalMilliseconds<\/span><br \/>&gt;&gt;<br \/>Select-String : The file <span class=\"SpellE\">can not<\/span> be read: C:\\windows\\Tasks\\SCHEDLGU.TXT<br \/>At line:3 char:3<br \/>+ <span class=\"SpellE\">ss<\/span>&nbsp; &lt;&lt;&lt;&lt; PowerShell<br \/>5111.9712<br \/>PS&gt; (Measure-Command {<br \/>&gt;&gt; $<span class=\"SpellE\">global:x<\/span> |<br \/>&gt;&gt; <span class=\"SpellE\">ss<\/span> PowerShell<br \/>&gt;&gt; }<br \/>&gt;&gt; ).<span class=\"SpellE\">TotalMilliseconds<\/span><br \/>&gt;&gt;<br \/>166.9715<br \/>PS&gt; [<span class=\"SpellE\">int<\/span>](5111\/166)<br \/>31<span class=\"CodeChar\"><br \/><\/span>&nbsp;<\/p>\n<h2><span>Select-String outputs <span class=\"SpellE\">MatchInfo<\/span> objects not Strings<\/span><\/h2>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n<p class=\"MsoNormal\">As with most <span class=\"SpellE\">Cmdlets<\/span>, the output of Select-String looks like texts but is actually a stream of objects with a text rendering.&nbsp; This is great because then you can party with the object.<\/p>\n<p class=\"Code\">PS&gt; <span class=\"SpellE\">ss<\/span> stop *<\/p>\n<p>k-alias.txt:4:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kill&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stop-Process<br \/>s-alias.txt:13:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">spps<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stop-Process<br \/>s-alias.txt:14:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">spsv<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stop-Service<\/p>\n<p>PS&gt; <span class=\"SpellE\">ss<\/span> Stop * |get-Member &#8211;<span class=\"SpellE\">MemberType<\/span> Property<\/p>\n<p>&nbsp;&nbsp; <span class=\"SpellE\">TypeName<\/span>: <span class=\"SpellE\">Microsoft.PowerShell.Commands.MatchInfo<\/span><\/p>\n<p>Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">MemberType<\/span> Definition<br \/>&#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br \/>Filename&nbsp;&nbsp; Property&nbsp; &nbsp;<span class=\"SpellE\">System.String<\/span> Filename {get;}<br \/><span class=\"SpellE\">IgnoreCase<\/span> Property&nbsp;&nbsp; <span class=\"SpellE\">System.Boolean<\/span> <span class=\"SpellE\">IgnoreCase<\/span> {<span class=\"SpellE\">get;set<\/span>;}<br \/>Line&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; <span class=\"SpellE\">System.String<\/span> Line {<span class=\"SpellE\">get;set<\/span>;}<br \/><span class=\"SpellE\">LineNumber<\/span> Property&nbsp;&nbsp; System.Int32 <span class=\"SpellE\">LineNumber<\/span> {<span class=\"SpellE\">get;set<\/span>;}<br \/>Path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; <span class=\"SpellE\">System.String<\/span> Path {<span class=\"SpellE\">get;set<\/span>;}<br \/>Pattern&nbsp;&nbsp;&nbsp; Property&nbsp;&nbsp; <span class=\"SpellE\">System.String<\/span> Pattern {<span class=\"SpellE\">get;set<\/span>;}<\/p>\n<p>PS&gt; <span class=\"SpellE\">ss<\/span> &#8220;<span class=\"SpellE\">stop&#8221;,&#8221;new<\/span>.*<span class=\"SpellE\">ve<\/span>&#8221; *|fl *<\/p>\n<p><span class=\"SpellE\">IgnoreCase<\/span> : True<br \/><span class=\"SpellE\">LineNumber<\/span> : 4<br \/>Line&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kill&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stop-Process<br \/>Filename&nbsp;&nbsp; : k-alias.txt<br \/>Path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : C:\\SSTest\\k-alias.txt<br \/>Pattern&nbsp;&nbsp;&nbsp; : stop<\/p>\n<p><span class=\"SpellE\">IgnoreCase<\/span> : True<br \/><span class=\"SpellE\">LineNumber<\/span> : 6<br \/>Line&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New-<span class=\"SpellE\">PSDrive<\/span><br \/>Filename&nbsp;&nbsp; : m-alias.txt<br \/>Path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : C:\\SSTest\\m-alias.txt<br \/>Pattern&nbsp;&nbsp;&nbsp; : new.*ve<\/p>\n<p><span class=\"SpellE\">IgnoreCase<\/span> : True<br \/><span class=\"SpellE\">LineNumber<\/span> : 5<br \/>Line&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">ndr<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; New-<span class=\"SpellE\">PSDrive<\/span><br \/>Filename&nbsp;&nbsp; : n-alias.txt<br \/>Path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : C:\\SSTest\\n-alias.txt<br \/>Pattern&nbsp;&nbsp;&nbsp; : new.*ve<\/p>\n<p><span class=\"SpellE\">IgnoreCase<\/span> : True<br \/><span class=\"SpellE\">LineNumber<\/span> : 13<br \/>Line&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">spps<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stop-Process<br \/>Filename&nbsp;&nbsp; : s-alias.txt<br \/>Path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : C:\\SSTest\\s-alias.txt<br \/>Pattern&nbsp;&nbsp;&nbsp; : stop<\/p>\n<p><span class=\"SpellE\">IgnoreCase<\/span> : True<br \/><span class=\"SpellE\">LineNumber<\/span> : 14<br \/>Line&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">spsv<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stop-Service<br \/>Filename&nbsp;&nbsp; : s-alias.txt<br \/>Path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : C:\\SSTest\\s-alias.txt<br \/>Pattern&nbsp;&nbsp;&nbsp; : stop<\/p>\n<p>PS&gt; <span class=\"SpellE\">ss<\/span> &#8220;<span class=\"SpellE\">stop&#8221;,&#8221;new<\/span>.*<span class=\"SpellE\">ve<\/span>&#8221; *|group Pattern<\/p>\n<p>Count Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Group<br \/>&#8212;&#8211; &#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8211;<br \/>&nbsp;&nbsp;&nbsp; 3 stop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {k-alias.txt, s-alias.txt, s-alias.txt}<br \/>&nbsp;&nbsp;&nbsp; 2 new.*ve&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {m-alias.txt, n-alias.txt}<\/p>\n<p class=\"MsoNormal\">So yes you can party with the objects but it\u2019s not about partying is it?&nbsp;&nbsp; It\u2019s about being incredibly productive.&nbsp;&nbsp; <\/p>\n<h2><span>Sometimes you just want the first match in a file<\/span><\/h2>\n<p class=\"MsoNormal\">In my blog <a href=\"http:\/\/blogs.msdn.com\/powershell\/archive\/2006\/11\/23\/processing-eml-files-with-select-string-and-setcreationtime.aspx\">http:\/\/blogs.msdn.com\/powershell\/archive\/2006\/11\/23\/processing-eml-files-with-select-string-and-setcreationtime.aspx<\/a> we did the following:<\/p>\n<p class=\"Code\"><span class=\"SpellE\"><span class=\"GramE\"><span lang=\"EN\">foreach<\/span><\/span><\/span><span lang=\"EN\"> ($record in Select-String ^Date: *.eml) {<br \/>&nbsp; [<span class=\"SpellE\">System.IO.File<\/span>]::<span class=\"SpellE\">SetCreationTime<\/span>($<span class=\"SpellE\">Record.Path<\/span>, [<span class=\"SpellE\">datetime<\/span>]($<span class=\"SpellE\">record.line.substring<\/span>(6)))<br \/>}<\/span><\/p>\n<p class=\"MsoNormal\">While this works \u2013 there is a potential bug here.&nbsp; Image the case that a particular file has multiple lines that match \u201c^Date:<span class=\"GramE\">\u201d.<\/span>&nbsp; The <span class=\"SpellE\">scripte<\/span> would set the <span class=\"SpellE\">CreateTime<\/span> of the file for each of the lines.&nbsp; What we want is just the very first match.&nbsp; That is exactly what the switch -List does.<\/p>\n<p class=\"Code\">PS&gt; <span class=\"SpellE\">ss<\/span> item r*<\/p>\n<p>r-alias.txt:5:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">ri<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remove-Item<br \/>r-alias.txt:6:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">rni<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Rename-Item<br \/>r-alias.txt:7:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">rnp<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Rename-<span class=\"SpellE\">ItemPr<\/span>&#8230;<br \/>r-alias.txt:8:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">rp<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remove-<span class=\"SpellE\">ItemPr<\/span>&#8230;<br \/>r-alias.txt:13:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">rm<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remove-Item<br \/>r-alias.txt:14:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">rmdir<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remove-Item<br \/>r-alias.txt:15:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remove-Item<br \/>r-alias.txt:16:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">ren<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Rename-Item<\/p>\n<p>PS&gt; <span class=\"SpellE\">ss<\/span> item r* -list<\/p>\n<p>r-alias.txt:5:Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"SpellE\">ri<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remove-Item<\/p>\n<p class=\"MsoNormal\">So the correct script should have been:<\/p>\n<p class=\"Code\"><span class=\"SpellE\"><span class=\"GramE\"><span lang=\"EN\">foreach<\/span><\/span><\/span><span lang=\"EN\"> ($record in Select-String ^Date: *.eml <\/span><b><span lang=\"EN\">-List<\/span><\/b><span lang=\"EN\">) {<br \/>&nbsp; [<span class=\"SpellE\">System.IO.File<\/span>]::<span class=\"SpellE\">SetCreationTime<\/span>($<span class=\"SpellE\">Record.Path<\/span>, [<span class=\"SpellE\">datetime<\/span>]($<span class=\"SpellE\">record.line.substring<\/span>(6)))<br \/>}<\/span><\/p>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n<p class=\"MsoNormal\">Enjoy<span class=\"GramE\">&nbsp; and<\/span> have a good Thanksgiving.<\/p>\n<p class=\"MsoNormal\">Jeffrey <span class=\"SpellE\">Snover<\/span> [MSFT<span class=\"GramE\">]<\/span><br \/>Windows PowerShell\/MMC Architect<br \/>Visit the Windows PowerShell Team blog at:&nbsp;&nbsp;&nbsp; http:\/\/blogs.msdn.com\/PowerShell<br \/>Visit the Windows PowerShell <span class=\"SpellE\">ScriptCenter<\/span> at:&nbsp; http:\/\/www.microsoft.com\/technet\/scriptcenter\/hubs\/msh.mspx<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In my blog post Processing .EML files using Select-String and SetCreationTIme() (http:\/\/blogs.msdn.com\/powershell\/archive\/2006\/11\/23\/processing-eml-files-with-select-string-and-setcreationtime.aspx ), I showed you could do some incredibly powerful stuff using 2 lines of PowerShell Script.&nbsp; The reason you can do this is because of the design of Select-String.&nbsp; Select-String is a very cool utility and can make you very productive so let\u2019s [&hellip;]<\/p>\n","protected":false},"author":600,"featured_media":13641,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-9251","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powershell"],"acf":[],"blog_post_summary":"<p>In my blog post Processing .EML files using Select-String and SetCreationTIme() (http:\/\/blogs.msdn.com\/powershell\/archive\/2006\/11\/23\/processing-eml-files-with-select-string-and-setcreationtime.aspx ), I showed you could do some incredibly powerful stuff using 2 lines of PowerShell Script.&nbsp; The reason you can do this is because of the design of Select-String.&nbsp; Select-String is a very cool utility and can make you very productive so let\u2019s [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/9251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/users\/600"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/comments?post=9251"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/9251\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media\/13641"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media?parent=9251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/categories?post=9251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/tags?post=9251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}