PowerShell / PowerShell/vscode-powershell

Need a better (cross-platform friendly) way to configure additional PowerShell paths

Open
#5,233 2 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Issue-Enhancement
Dominant language
TypeScript
Stars
1.9k
Forks
547
PR merge metrics
No merged PRs in 30d

Description

Prerequisites
  • I have written a descriptive issue title.
  • I have searched all issues to ensure it has not already been reported.
Summary
Context
  • I use PowerShell across operating systems

  • I customized additional PowerShell executables for vscode-powershell using powerShellAdditionalExePaths:

    "powershell.powerShellAdditionalExePaths": {
      "PowerShell 7.5 (macOS)": "/opt/homebrew/bin/pwsh",
      "PowerShell 7 (Windows)": "C:/<path>/<to>/pwsh.exe"
    },
    "powershell.powerShellDefaultVersion": "PowerShell 7 (Windows)",
    
  • I'm syncing and reusing my vscode settings across operating systems

The problem

Every time I work with PowerShell files I have to bear the annoying warning of addtional executable I've configured for the other platform not being found.

Image

Proposed Design

Introduce a new cross-platform/syncing firendly way to customize additional executables

Proposed interface:

type OS = "Windows" | "macOS" | "Linux"

interface AddtionalPowerShellLocation {
  name: String
  path: String
  os: OS
  default: Boolean | undefined
}

type Locations = AddtionalPowerShellLocation[]

To not break[^1] existing powerShellAdditionalExePaths, it'd be a new additionalPowerShellLocations key for holding these locations:

"powershell.additionalPowerShellLocations": [
  {
    "name": "PowerShell 7",
    "path": "/opt/powershell/pwsh",
    "os": "macOS",
    "default": true
  },
  {
    "name": "PowerShell 7",
    "path": "C:/PowerShell/stable/pwsh.exe",
    "os": "Windows",
    "default": true
  },
  {
    "name": "PowerShell Nightly",
    "path": "C:/PowerShell/nightly/pwsh.exe",
    "os": "Windows"
  },
  {
    "name": "PowerShell Nightly",
    "path": "/opt/powershell-nightly/pwsh",
    "os": "macOS"
  },
  {
    "name": "PowerShell 7",
    "path": "/opt/powershell7/pwsh",
    "os": "Linux"
  }
]

Then vscode-powershell can filter out items that are not for the target platform, and launch the first additonal PowerShell executable it successfully resolved. Nothing changes for system fallbacks in this proposal.

powerShellAdditionalExePaths and powerShellDefaultVersion then could be marked as deprecated.

The proposed design might not be optimal, so please comment.

[^1]: It was a breaking change when powerShellAdditionalExePaths was introduced https://github.com/PowerShell/vscode-powershell/issues/4167

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

No source file or test is named. Start by locating the code that reads powershell.powerShellAdditionalExePaths and powershell.powerShellDefaultVersion, then review how executable discovery and platform filtering work; done means a cross-platform additionalPowerShellLocations configuration works without breaking the existing settings.

Written by the indexing model from the issue text.

Assessment

Tech stack
powershell, typescript
Domain
developer-experience, tooling
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.