X Tutup
The Wayback Machine - https://web.archive.org/web/20220516014113/https://github.com/PowerShell/PowerShell/issues/14216
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
DesertBear opened this issue Nov 21, 2020 · 6 comments
Labels
Area-Maintainers-Build Issue-Question

Comments

@DesertBear
Copy link

@DesertBear DesertBear commented Nov 21, 2020

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

@DesertBear DesertBear added the Issue-Question label Nov 21, 2020
@iSazonov iSazonov added the Area-Maintainers-Build label Nov 22, 2020
@SSBU-or-bust
Copy link

@SSBU-or-bust SSBU-or-bust commented May 14, 2021

I have the same problem.

1 similar comment
@mwilsonray
Copy link

@mwilsonray mwilsonray commented Nov 16, 2021

I have the same problem.

@chaoscreater
Copy link

@chaoscreater chaoscreater commented 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

@twomm
Copy link

@twomm twomm commented Apr 1, 2022

Just had this on 7.2.2

@asheroto
Copy link

@asheroto asheroto commented Apr 6, 2022

@chaoscreater thanks for posting your reg entry! Added it to my system and it works great.

I'll probably write an article about this and reference this post. 😀

@soredake
Copy link

@soredake soredake commented May 2, 2022

In powershell ad 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"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area-Maintainers-Build Issue-Question
Projects
None yet
Development

No branches or pull requests

8 participants
X Tutup