This blog post applies to the Windows PowerShell Integrated Scripting Environment (ISE) in Windows 8 and Windows Server 2012. The ISE is also fully supported and available when Server 2012 is deployed using the Minimal Server Interface. To start ISE, type ise in a PowerShell console and press Enter
Snippets provide a convenient way to paste arbitrary text into the ISE console and script editor, right where you need it. The idea is to provide improved productivity, discoverability, and usability:
- To save you from typing repetitive or long text (or hunting for the script to copy-and-paste from)
- To save you a trip to Get-Help (think about all the attributes on script cmdlets)
- Beginners may insert an if statement as a means of learning PowerShell syntax
For those of you who are familiar with Visual Studioâ€™s Snippets, the ISE version uses the same shortcut key, but it will surely feel like a â€œpoor manâ€™s versionâ€ :-), lacking the ability to tab between fields, among other things.
You can list available Snippets by pressing Ctrl+J or selecting â€œStart Snippetsâ€ from the â€œEditâ€ menu. Notice that a tooltip displays the actual text which will be inserted, as you move over the selections in the Snippets drop-down. Hereâ€™s what it looks like:
There are 3 types of snippets:
- Default snippets, which ship with PowerShell ISE 3.0
- User-defined snippets
- Module-based snippets
Consider these to be the â€œstarter setâ€ of snippets: PowerShell code that is either frequently used, or hard to discover. Press Ctrl+J to start Snippets and look through the various default snippets.
For those of who may have developed a specific coding style over the years, and feel very strongly about whether the curly braces belong on the same line or on the next line :-), youâ€™ll be pleased to know that you can hide the default snippets, either through the Options dialog (at the bottom of the â€œGeneral Settingsâ€ tab), or directly through the ISE object model at the command line:
You can create your own snippets and add them to the snippets drop-down list using the New-IseSnippet cmdlet. Hereâ€™s the cmdlet syntax, using one of my favorite new features: Show-Command:
Hereâ€™s an example: I often find myself wanting to show the definition (body) of a function. for that, I would have to type Get-Command, followed by the function name, wrap the whole thing in parentheses, and then append .Definition. A snippet comes in handy:
New-IseSnippet -Title "Show Definition" -Description "Shows command definition" -Text "(Get-Command ).Definition" -CaretOffset 13
This example adds a â€œShow Definitionâ€ snippet to the snippets list, and inserts the following text when selected: (Get-Command ).Definition
- The caret is placed 13 characters after the start of the snippet text (ready for you to enter the command name). This is what the â€“CaretOffset parameter is for
- Example usage: (Get-Command prompt).Definition
- To see all user-defined snippets, type: Get-IseSnippet
- To remove a snippet, go to the folder which contains all user-defined snippets (available from Get-IseSnippet) and delete the corresponding snippet file.
If you prefer to hand-craft your snippets instead of using the cmdlet, just create an XML file like the one below, and copy it to the snippets â€œhomeâ€ folder, which you can get using one of the following methods:
- Join-Path (Split-Path $profile.CurrentUserCurrentHost) "Snippets"
- Type Get-IseSnippet and copy the displayed path ïŠ
Any snippets in the snippets home folder will be loaded automatically by the ISE when it starts. If you donâ€™t want to place your snippets in the home folder, you can place them anywhere (C:\temp for example), but then you must load them explicitly in your ISE profile using: Import-IseSnippet -Path 'C:\Temp'
Snippets files have an extension of .snippets.ps1xml and have the following structure:
<?xml version='1.0' encoding='utf-8' ?>
<Description>Shows command definition</Description>
<Script Language='PowerShell' CaretOffset='13'>
- Title: The name which appears in the snippets drop-down list
- Description: The description which appears in the snippet tooltip
- Cdata: The tag which contains the actual snippet text
To load all module-based snippets (which only works for modules which have already been imported using Import-Module), use: Import-IseSnippet -Module Xyz
If youâ€™re shipping a module with snippets, place your snippet files into a â€œSnippetsâ€ folder, directly under the module folder.
I hope that this quick walk-through will encourage you to use snippets, create your own, and share them with the community.
Program Manager, Windows Server Manageability