question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

'Run With PowerShell 7' Right-Click Context Menu is Not Available if Default Program Is Not Notepad

See original GitHub issue

Steps to reproduce

When installing PowerShell 7 (MSI Version), the installer allows the following option:

Add 'Run with PowerShell 7' context menu for PowerShell files

Screenshot A: Screenshot A

However, this option is only available if .ps1 files are set to open in Notepad (the default). If .ps1 files are set to open in Visual Studio Code by default, then this option disappears from the context menu.

Screenshot B (‘Run with PowerShell 7’ available): Screenshot B

Screenshot C (‘Run with PowerShell 7’ not available): Screenshot C

Most of the time I want .ps1 files to open in Visual Studio Code and therefore want to keep that as the default program for opening .ps1 files. However, doing so means I loose the right-click context menu for when I want to run certain .ps1 files directly in PowerShell 7 from their location. It would be better if it was always possible to right-click a .ps1 file and select ‘Run with PowerShell 7’, even when another application – such as Visual Studio Code – is the default program for that file type.

For PowerShell 7 (MSI Version), it’s possible to work around this to an extent by using the [Right-click > Open with] menu item, selecting the PowerShell 7 pwsh.exe and then use that in conjunction with using $PSScriptRoot as the path in the script. However, for PowerShell 7 (Microsoft Store Version) it’s a bit more complicated. Not only does the store version not have the ‘Run with PowerShell 7’ context menu option at all, but using the ‘Open with’ menu work-a-round is more burdensome as the file path contains the version number in it. I.E.

C:\Program Files\WindowsApps\Microsoft.PowerShell_7.1.0.0_x64__8wekyb3d8bbwe\pwsh.exe

This means the file path will keep changing every time PowerShell is updated and will therefore need to be manually set again every time PowerShell is updated.

Expected behavior

As long as PowerShell 7 is installed on the machine, the ‘Run with PowerShell 7’ context menu should always be available in the right-click menu for PowerShell .ps1 files, regardless of whether another application – such as Visual Studio Code – is the default program for that file type.

The ‘Run with PowerShell 7’ context menu should also be available to people who are using the Microsoft Store version of PowerShell 7.

Environment data

Name                           Value
----                           -----
PSVersion                      7.1.0
PSEdition                      Core
GitCommitId                    7.1.0
OS                             Microsoft Windows 10.0.19042
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

Issue Analytics

  • State:open
  • Created 3 years ago
  • Reactions:10
  • Comments:6

github_iconTop GitHub Comments

6reactions
soredakecommented, Oct 27, 2022

In powershell as admin:

Invoke-WebRequest -Uri "https://gist.githubusercontent.com/soredake/9e7b6fc7f04d9d96a2fc798b25d5186f/raw/powershell_context_shell_fix.reg" -OutFile "$env:TEMP/powershell_context_shell_fix.reg"
reg import "$env:TEMP/powershell_context_shell_fix.reg"
4reactions
chaoscreatercommented, Mar 31, 2022

Had the same issue, except that my .ps1 association was already set to Notepad.

Ended up modifying the reg key and now I got it working again. This is tested on the latest Win11 build as of this writing.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\SystemFileAssociations\.ps1]

[HKEY_CLASSES_ROOT\SystemFileAssociations\.ps1\Shell]

[HKEY_CLASSES_ROOT\SystemFileAssociations\.ps1\Shell\Edit]
"NoSmartScreen"=""

[HKEY_CLASSES_ROOT\SystemFileAssociations\.ps1\Shell\Edit\Command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell_ise.exe\" \"%1\""

[HKEY_CLASSES_ROOT\SystemFileAssociations\.ps1\Shell\RunPowershell5AsAdmin]
@="Run with Powershell 5 as Admin"

[HKEY_CLASSES_ROOT\SystemFileAssociations\.ps1\Shell\RunPowershell5AsAdmin\command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" \"-Command\" \"\"& {Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -File \\\"%1\\\"' -Verb RunAs}\""

[HKEY_CLASSES_ROOT\SystemFileAssociations\.ps1\Shell\RunPowershell7]
@="Run with Powershell 7 - non admin"

[HKEY_CLASSES_ROOT\SystemFileAssociations\.ps1\Shell\RunPowershell7\Command]
@="C:\\Program Files\\PowerShell\\7\\pwsh.exe -Command \"$host.UI.RawUI.WindowTitle = 'PowerShell 7 (x64)'; if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'\""

[HKEY_CLASSES_ROOT\SystemFileAssociations\.ps1\Shell\RunPowershell7AsAdmin]
@="Run with Powershell 7 as Admin"

[HKEY_CLASSES_ROOT\SystemFileAssociations\.ps1\Shell\RunPowershell7AsAdmin\Command]
@="\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\" \"-Command\" \"\"& {Start-Process pwsh.exe -ArgumentList '-ExecutionPolicy RemoteSigned -File \\\"%1\\\"' -Verb RunAs}\""

[HKEY_CLASSES_ROOT\SystemFileAssociations\.ps1\Shell\Windows.PowerShell.Run]
"MUIVerb"=hex(2):40,00,22,00,25,00,73,00,79,00,73,00,74,00,65,00,6d,00,72,00,\
  6f,00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,\
  00,5c,00,77,00,69,00,6e,00,64,00,6f,00,77,00,73,00,70,00,6f,00,77,00,65,00,\
  72,00,73,00,68,00,65,00,6c,00,6c,00,5c,00,76,00,31,00,2e,00,30,00,5c,00,70,\
  00,6f,00,77,00,65,00,72,00,73,00,68,00,65,00,6c,00,6c,00,2e,00,65,00,78,00,\
  65,00,20,00,22,00,2c,00,2d,00,31,00,30,00,38,00,00,00
@="Run with Powershell 5"

[HKEY_CLASSES_ROOT\SystemFileAssociations\.ps1\Shell\Windows.PowerShell.Run\Command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" \"-Command\" \"if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'\""

image

Read more comments on GitHub >

github_iconTop Results From Across the Web

"Run with PowerShell" missing from Explorer context ...
The answer is to ditch any modification to the 'Open With' item and set it back to the default of Notepad. This will...
Read more >
Can't recover "Run with Powershell" Context Menu Entry
1. Go to Control Panel · 2. Default Programs · 3. Select "Associate a file type or protocol with a program" · 4....
Read more >
How to add "Open Powershell Here" to right click menu for ...
If you are trying to run a .ps from Windows Explorer right-click, then add this ... C:\Program Files\PowerShell\7\pwsh.exe -Command "$host.
Read more >
Add or Remove PowerShell 7 Open Here Context Menu in ...
Run the installation program of PowerShell 7 (32-bit or 64-bit). · When prompted, turn on (check) the option Add 'Open here' context menus...
Read more >
Add 'Edit or Run with' to PS1 File Context Menu in ...
Here's How: 1 Do step 2 (add-right click), step 3 (add-Shift+right click) , or step 4 (remove) below for what you would like...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found