{"id":15681,"date":"2011-02-05T16:01:00","date_gmt":"2011-02-05T16:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2011\/02\/05\/create-a-custom-file-extension-by-using-powershell\/"},"modified":"2011-02-05T16:01:00","modified_gmt":"2011-02-05T16:01:00","slug":"create-a-custom-file-extension-by-using-powershell","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/create-a-custom-file-extension-by-using-powershell\/","title":{"rendered":"Create a Custom File Extension by Using PowerShell"},"content":{"rendered":"<p><b>Summary<\/b>: Learn how to use Windows PowerShell to create a custom file extension to store code snippets. <\/p>\n<h3>Weekend Scripter: Creating a .snip file type<\/h3>\n<p>Microsoft Scripting Guy, Ed Wilson, here. After I created the <b>Get-CodeSnippet<\/b> function <a target=\"_blank\" href=\"http:\/\/blogs.technet.com\/b\/heyscriptingguy\/archive\/2011\/02\/05\/use-code-snippets-to-simplify-writing-powershell-scripts.aspx\">yesterday<\/a>, I decided that it might be useful to have my own file extension to keep track of code snippets. <\/p>\n<p>The reason is that to make using code snippets truly useful, the code needs to be designed specifically to be added to my script. It can take the form of reusable functions, or it can even take the form of script block skeletons. Rather than weeding through a bunch of .ps1 or .psm1 files, I thought I would make my own extension. <\/p>\n<p>The New-SnipType.ps1 script adds a couple of registry keys as shown here. <\/p>\n<p><strong>New-SnipType.ps1<\/strong><\/p>\n<blockquote>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-PSDrive -Name HKCR -PSProvider registry -Root HKEY_CLASSES_ROOT | Out-Null<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">Push-Location<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">Set-Location -Path HKCR:<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-Item -Name .snip -ItemType String -Value snip_file | Out-Null<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-ItemProperty -Path HKCR:\\.snip -Name PerceivedType -Value Text `<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000\"><span><span style=\"font-size: 10pt\">&nbsp;&nbsp; <\/span><\/span><span style=\"font-size: 10pt\">-PropertyType String | Out-Null<\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-Item -Name snip_file -ItemType string | Out-Null<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-Item -Name shell -Path HKCR:\\snip_file -ItemType string | Out-Null<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-Item -Name edit -Path HKCR:\\snip_file\\shell -ItemType string | Out-Null<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-Item -Name command -Path HKCR:\\snip_file\\shell\\edit -ItemType ExpandString `<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000\"><span><span style=\"font-size: 10pt\">&nbsp;&nbsp; <\/span><\/span><span style=\"font-size: 10pt\">-Value &#8220;%SystemRoot%\\system32\\NOTEPAD.EXE %1&#8221; | Out-Null<\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-Item -Name open -Path HKCR:\\snip_file\\shell -ItemType string | Out-Null<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-Item -Name command -Path HKCR:\\snip_file\\shell\\open -ItemType ExpandString `<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000\"><span><span style=\"font-size: 10pt\">&nbsp;&nbsp; <\/span><\/span><span style=\"font-size: 10pt\">-Value &#8220;%SystemRoot%\\system32\\NOTEPAD.EXE %1&#8221; | Out-Null<\/span><\/span><\/span><span><span style=\"color: #000000;font-size: 10pt\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">Set-Location -Path HKCU:<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">$FEPath = &#8220;HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts&#8221;<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-Item -Name .snip -Path $FEPath | Out-Null<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-Item -Name OpenWithList -Path $FEPath\\.snip | Out-Null<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-ItemProperty -Name a -Path $FEPath\\.snip\\OpenWithList `<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000\"><span><span style=\"font-size: 10pt\">&nbsp;&nbsp; <\/span><\/span><span style=\"font-size: 10pt\">-value &#8220;Notepad.Exe&#8221; -PropertyType String | Out-Null<\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-ItemProperty -Name MRUList -Path $FEPath\\.snip\\OpenWithList `<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000\"><span><span style=\"font-size: 10pt\">&nbsp;&nbsp;&nbsp; <\/span><\/span><span style=\"font-size: 10pt\">-value a -PropertyType String | Out-Null<\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-Item -Name OpenWithProgids -Path $FEPath\\.snip | Out-Null<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-ItemProperty -Name snip_file -Path $FEPath\\.snip\\OpenWithProgids `<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000\"><span><span style=\"font-size: 10pt\">&nbsp;&nbsp;&nbsp; <\/span><\/span><span style=\"font-size: 10pt\">-value &#8220;(zero-length binary value)&#8221; -PropertyType Unknown | Out-Null<\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-Item -Name UserChoice -Path $FEPath\\.snip | Out-Null<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-ItemProperty -Name Progid -Path $FEPath\\.snip\\UserChoice `<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000\"><span><span style=\"font-size: 10pt\">&nbsp;&nbsp;&nbsp; <\/span><\/span><span style=\"font-size: 10pt\">-value &#8220;Applications\\Notepad.Exe&#8221; -PropertyType String | Out-Null<\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">Pop-Location<\/span><\/span><span><span style=\"color: #000000;font-size: 10pt\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">Remove-PSDrive -Name HKCR<\/span><\/span><\/p>\n<\/blockquote>\n<p>The first thing I do in the New-SnipType.ps1 script is create a new Windows PowerShell drive, by using the <b>New-PSDrive<\/b> cmdlet. I use the registry provider, and I specify the root as HKEY_CLASSES_ROOT. The reason for this is that, by default, the HKEY_CLASSES_ROOT registry hive is not exposed via a Windows PowerShell drive. Because the New-SnipType.ps1 script is working with the HKEY_CLASSES_ROOT hive, the script must be run with elevated rights. You might wish to add the <a href=\"http:\/\/blogs.technet.com\/b\/heyscriptingguy\/archive\/2010\/08\/19\/use-powershell-to-add-domain-users-to-a-local-group.aspx\">Test-IsAdministrator<\/a> function to ensure that the script has the appropriate rights. <\/p>\n<p>Next, I store the current drive location by using the <b>Push-Location<\/b> cmdlet, and I then change my working location to the <b>HKCR:<\/b> drive. Now I create several new registry keys and registry key properties. When I am finished on the <b>HKCR:<\/b> drive, I change to the HKCU (HKEY_CURRENT_USER) drive and create some more values. When I am finished on that drive, I change drives back to the original drive by using the <b>Pop-Location<\/b> cmdlet. I then use the <b>Remove-PSDrive<\/b> cmdlet to remove the newly created <b>HKCR:<\/b> drive. <\/p>\n<p>The type for a new registry key must be an instance of the Microsoft.Win32.RegistryValueKind .NET Framework enumeration class. Using my <b>Get-EnumValues<\/b> function that I have in my Windows PowerShell ISE startup profile, I obtain the following information about the <b>RegistryValueKind<\/b> as shown here.<\/p>\n<blockquote>\n<p class=\"CodeBlock\" style=\"line-height: 10pt;list-style-type: disc;margin: 4pt 0in 7pt\"><span><span style=\"color: #000000;font-size: 10pt\">PS C:\\Users\\ed.NWTRADERS&gt; get-enumValues Microsoft.Win32.RegistryValueKind<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"line-height: 10pt;list-style-type: disc;margin: 4pt 0in 7pt\"><span><span style=\"color: #000000;font-size: 10pt\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"line-height: 10pt;list-style-type: disc;margin: 4pt 0in 7pt\"><span><span style=\"color: #000000\"><span style=\"font-size: 10pt\">Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Value<\/span><span><span style=\"font-size: 10pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"line-height: 10pt;list-style-type: disc;margin: 4pt 0in 7pt\"><span><span style=\"color: #000000\"><span style=\"font-size: 10pt\">&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8211;<\/span><span><span style=\"font-size: 10pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"line-height: 10pt;list-style-type: disc;margin: 4pt 0in 7pt\"><span><span style=\"color: #000000\"><span style=\"font-size: 10pt\">MultiString<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>7<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><span><span style=\"font-size: 10pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"line-height: 10pt;list-style-type: disc;margin: 4pt 0in 7pt\"><span><span style=\"color: #000000\"><span style=\"font-size: 10pt\">QWord<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>11<\/span><span><span style=\"font-size: 10pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"line-height: 10pt;list-style-type: disc;margin: 4pt 0in 7pt\"><span><span style=\"color: #000000\"><span style=\"font-size: 10pt\">DWord<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>4<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><span><span style=\"font-size: 10pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"line-height: 10pt;list-style-type: disc;margin: 4pt 0in 7pt\"><span><span style=\"color: #000000\"><span style=\"font-size: 10pt\">Binary<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>3<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><span><span style=\"font-size: 10pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"line-height: 10pt;list-style-type: disc;margin: 4pt 0in 7pt\"><span><span style=\"color: #000000\"><span style=\"font-size: 10pt\">ExpandString&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<\/span><span><span style=\"font-size: 10pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"line-height: 10pt;list-style-type: disc;margin: 4pt 0in 7pt\"><span><span style=\"color: #000000\"><span style=\"font-size: 10pt\">String<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>1<\/span><span><span style=\"font-size: 10pt\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"line-height: 10pt;list-style-type: disc;margin: 4pt 0in 7pt\"><span><span style=\"color: #000000;font-size: 10pt\">Unknown<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>0<\/span><\/span><\/p>\n<\/blockquote>\n<blockquote><\/blockquote>\n<p>It is perhaps a bit unfortunate that the <b>EnumValues <\/b>do not match the data types (such as REG_SZ) that are displayed in the Registry Editor, but things such as REG_DWORD and REG_BINARY are close enough to DWord and Binary that one can figure them out. String values like MultiString (REG_MULTI_SZ) and ExpandString (REG_EXPAND_SZ) cause admins confusion.<\/p>\n<p>Because this is a special purpose, one-time use type of script, I did not add any error checking, or command line Help. After the script runs, the .snip file type will be recognized, and will open in Notepad when double-clicked. An <b>If_Else.snip<\/b> appears as shown in the following image.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/4846.WES-2-6-11-01_402761FB.jpg\"><img decoding=\"async\" height=\"339\" width=\"604\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/3617.WES-2-6-11-01_thumb_4B707638.jpg\" alt=\"WES-2-6-11-01\" border=\"0\" title=\"WES-2-6-11-01\" style=\"border-right-width: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px;padding-top: 0px\" \/><\/a><\/p>\n<p>If I add the .snip file extension to the <b>Open file<\/b> dialog box filter that I created yesterday, I can easily pull up a list of all of my code snippets. <\/p>\n<p>One other thing&mdash;I consider it to be bad form to write code that makes a bunch of changes to the registry without also writing code to clean up after those changes. That is a great advantage about using a Windows PowerShell script to make the changes in the first place. Here is the Remove-SnipType.ps1 script.<\/p>\n<p><strong>Remove-SnipType.ps1<\/strong><\/p>\n<blockquote>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">New-PSDrive -Name HKCR -PSProvider registry -Root HKEY_CLASSES_ROOT | Out-Null<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">Push-Location<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">Set-Location -Path HKCR:<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">Remove-Item -Path HKCR:\\.snip -Recurse<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">Remove-Item -Path HKCR:\\snip_file -Recurse<\/span><\/span><span><span style=\"color: #000000;font-size: 10pt\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">Set-Location -Path HKCU:<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">Remove-Item -Path HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.snip -Recurse&nbsp;<\/span><\/span><span><span style=\"color: #000000;font-size: 10pt\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">Pop-Location<\/span><\/span><span><span style=\"color: #000000;font-size: 10pt\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"color: #000000;font-size: 10pt\">Remove-PSDrive -Name HKCR<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"line-height: 10pt;list-style-type: disc;margin: 15pt 17.3pt 0.25in 0in;background: none transparent scroll repeat 0% 0%\"><span><span style=\"font-family: Segoe;color: #000000;font-size: x-small\"><\/span><\/span><\/p>\n<\/blockquote>\n<p>Well, that is all there is to creating a custom file extension in the registry. <\/p>\n<p>I invite you to follow me on <a target=\"_blank\" href=\"http:\/\/bit.ly\/scriptingguystwitter\">Twitter<\/a> and <a target=\"_blank\" href=\"http:\/\/bit.ly\/scriptingguysfacebook\">Facebook<\/a>. If you have any questions, send email to me at <a href=\"mailto:scripter@microsoft.com\">scripter@microsoft.com<\/a>, or post your questions on the <a target=\"_blank\" href=\"http:\/\/bit.ly\/scriptingforum\">Official Scripting Guys Forum<\/a>. See you tomorrow. Until then, peace.<\/p>\n<p>&nbsp;<\/p>\n<p><b>Ed Wilson, Microsoft Scripting Guy<\/b><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Summary: Learn how to use Windows PowerShell to create a custom file extension to store code snippets. Weekend Scripter: Creating a .snip file type Microsoft Scripting Guy, Ed Wilson, here. After I created the Get-CodeSnippet function yesterday, I decided that it might be useful to have my own file extension to keep track of code [&hellip;]<\/p>\n","protected":false},"author":595,"featured_media":87096,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[38,31,26,3,4,12,14,61,45],"class_list":["post-15681","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-files","tag-operating-system","tag-registry","tag-scripting-guy","tag-scripting-techniques","tag-storage","tag-text-files","tag-weekend-scripter","tag-windows-powershell"],"acf":[],"blog_post_summary":"<p>Summary: Learn how to use Windows PowerShell to create a custom file extension to store code snippets. Weekend Scripter: Creating a .snip file type Microsoft Scripting Guy, Ed Wilson, here. After I created the Get-CodeSnippet function yesterday, I decided that it might be useful to have my own file extension to keep track of code [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/15681","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/users\/595"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/comments?post=15681"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/15681\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media\/87096"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media?parent=15681"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=15681"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=15681"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}