Posted in Editor, Powershell, Snippets, vscode

Distraction for Today – Snippets for VSCode

Current project for the PowerShell VSCode project is opening the Snippets up to the community and for the community. The was announced in the VSCode channel in the Slack group, a resource I strongly recommend.

I have taken the great base snippet file Keith Hill provided in the early days of using VSCode as my PowerShell editor and converted my ISE snippets from the XML file. I can’t complain as I had a useful collection of code snippets for ISE but looking at the format and capabilities that VSCode provided, I quickly started adding my snippets to the base collection Keith Hill provided.

I have one that I like to include in my End statement of a script. As it stood it was usable but was lacking. Watching the community post snippets I saw a chance to take this little nugget and make it better. The code simply starts a remove-variable so I can clean up variables before the script finishes and  then initiate a garbage collection via .Net. Below is what the snippet looked like when I used in my code:

 END {
    Remove-Variable -Name varA, varB, anotherVar
    [System.GC]::Collect()
}

I call the snippet and the code is added, including the tabs and carriage returns. The text area after the Name parameter is where the cursor goes because of  ${1:variablestoberemoved} but that is far as the Snippet automation would go. So I created an empty JSON file and started with the snippet as I had entered it. Then I progressed with fixing and adding some pieces to the snippet. I would then take the new version of just that snippet and replaced the one in the PowerShell.json file, then in a blank script file I would use the prefix and check the progress.

// Original
“Initiate Garbage Collection – Original”: {
            “prefix”: “freememory”,
            “body”:[
                “Remove-Variable -Name \\$variablestoberemoved\r”,
                “[System.GC]::Collect()\r”
            ],
            “description”: “Free up memory when script completes”
    },
    // Now let’s write that with a “tabable”
    “Initiate Garbage Collection – Next”: {
            “prefix”: “freememory”,
            “body”:[
                “Remove-Variable -Name \\${1:variablestoberemoved}\r”,
                “[System.GC]::Collect()\r”
            ],
            “description”: “Free up memory when script completes”
    // That sort of worked but after I enter the variables I want to table
    // tap out of the code because this is done
    },
    // What I finally came up with
    “Initiate Garbage Collection”: {
        “prefix”: “freememory”,
        “body”:[
            “Remove-Variable -Name ${1:variablestoberemoved}\r”,
            “[System.GC]::Collect()\r”,
            “$0”
        ],
        “description”: “Free up memory when script completes”
    }
}
So through the progression testing, I can call the snippet, it will take me to the “variablestoberemoved” enter the variables, comma seperated, that I know will still exist, then I can hit tab will take me to the line after my snippet text. Looks like:
2018-04-26_09-23-33
Quick use of a PowerShell snippet in Visual Studio Code
Posted in Editor, Powershell

PoSH–vscode analyzer and parameters

The more I work with Visual Studio code the more I like it, especially for PowerShell. The Integrated Terminal just gets better and better. It just makes working with scripts much easier and makes me better at crossing the t’s and dotting the i’s.

One thing I came across recently was how the ScriptAnalyzer (a tool not just for vscode ) and Visual Studio Code work together. I was working with some colleagues on taking some code for a project and assembling it into a script. Of course that meant adding advanced functionality.  I wanted to provide parameters for the input that is needed. I started adding a password parameter. While it isn’t a formal credential but rather a simple string applied to a step within the script I used the word password in the parameter name. Then I noticed green squiggly lines for the complete parameter statement. Understanding that this was just a recommendation I messed around with it a little. As soon as I changed the parameter name to something other than “password” the warning/suggestion indicator disappeared. Since I want the operator to understand what the parameter is I kept the name and will live with the green squiggly lines but I just thought that was a nice implementation.

param-detection