12

I'm using Visual Studio Code to write my PowerShell Scripts.

I've installed the ms-vscode.powershell PowerShell Extension for Visual Studio Code.

Whenever I use an Alias in my Script, the PSScriptAnalyzer tells me to use the full CmdLet Name. This is kind of annoying because it also marks all aliases with a green curvy line.

How can I disable this?

see_screenshot_of_the_problem

1
17

There's three ways to do that.

Option 1 - Use the search function

  1. Hit F1 in Visual Studio Code to make the search bar appear
  2. Write >PowerShell: Select PS then choose PowerShell: Select PSScriptAnalyzer Rules
  3. remove the checkmark on PSAvoidUsingCmdletAliases
  4. Click on Confirm

Picture:

enter image description here

Option 2 - completely disable ScriptAnalysis

  1. Click the gear Icon in the bottom left corner in Visual Studio Code
  2. Click on Settings
  3. Click the {} Symbol on the top right corner
  4. Add "powershell.scriptAnalysis.enable": false to your user settings on the right hand side (see screenshot below).
  5. Save your User Settings by hitting CTRL + S

Screenshot:

enter image description here

Your Script Analyzer is now disabled and won't complain about Aliases anymore.

Option 3 - create a settings file and only disable Alias information

  1. Create a .psd1 File on your Filesystem. Copy the template from below into this file and save it.
  2. Go to your UserSettings in VSCode as described in Option 2 point 1 to 3.
  3. Add "powershell.scriptAnalysis.settingsPath": "C:\\foo\\bar\\FileName.psd1" and save it

Here's a picture of it:

enter image description here

Template (taken from https://github.com/PowerShell/vscode-powershell/blob/develop/examples/PSScriptAnalyzerSettings.psd1):

@{
    # Only diagnostic records of the specified severity will be generated.
    # Uncomment the following line if you only want Errors and Warnings but
    # not Information diagnostic records.
    # Severity = @('Error','Warning')

    # Analyze **only** the following rules. Use IncludeRules when you want
    # to invoke only a small subset of the defualt rules.
    IncludeRules = @('PSAvoidDefaultValueSwitchParameter',
                     'PSMisleadingBacktick',
                     'PSMissingModuleManifestField',
                     'PSReservedCmdletChar',
                     'PSReservedParams',
                     'PSShouldProcess',
                     'PSUseApprovedVerbs',
                     'PSUseDeclaredVarsMoreThanAssigments')

    # Do not analyze the following rules. Use ExcludeRules when you have
    # commented out the IncludeRules settings above and want to include all
    # the default rules except for those you exclude below.
    # Note: if a rule is in both IncludeRules and ExcludeRules, the rule
    # will be excluded.
    ExcludeRules = @('PSAvoidUsingAliases','PSAvoidUsingWriteHost')
}
8
  • 1
    @root you're welcome. I'm extremely excited about Visual Studio Code! This is a great alternative to PowerShell ISE.
    – SimonS
    Jan 11 '19 at 14:39
  • 1
    Same here. I have some qualms with VSC, though I think they're due to my lack of understanding of its rich feature set and configurabilty.
    – root
    Jan 11 '19 at 15:06
  • 2
    These sort of work, but not 100%. #1 doesn't persist if you close and re-open VSCode. #2 completely disables ScriptAnalysis, which disables ALL rules - some of them are useful. And #3 works, but means you can no longer use method #1 to easily adjust rules. Has anyone found a method that is like #1 but PERSISTS when you close/re-open VSCode?
    – PSaul
    Apr 28 '19 at 3:53
  • @PSaul use option 3 if you want them to persist. You can easily adjust for one session by using option 1 if needed.
    – SimonS
    May 2 '19 at 6:37
  • 1
    @PSaul: Re the selections not getting persisted with option #1 (as of v2019.11.0): See this GitHub issue
    – mklement0
    Nov 5 '19 at 19:29

Not the answer you're looking for? Browse other questions tagged or ask your own question.