哪些注册表命令允许我从包含撇号的文件夹的右键单击上下文菜单中以管理员身份运行PowerShell 5/CMD? [英] What registry commands allow me to run PowerShell 5 / CMD as admin from the right click context menu from a folder that has an apostrophe in it?

查看:33
本文介绍了哪些注册表命令允许我从包含撇号的文件夹的右键单击上下文菜单中以管理员身份运行PowerShell 5/CMD?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试设置右键上下文菜单,以便在当前目录下启动CMD和PowerShell5。我的PowerShell 7命令工作正常。

这是我得到的信息:

以管理员身份打开PowerShell5的注册表命令如下:

PowerShell -Command "Start-Process cmd -ArgumentList '/s,/k,pushd %V && start PowerShell -NoExit && exit' -Verb RunAs"

以管理员身份打开命令提示符的注册表命令如下:

pwsh -noprofile -windowstyle hidden -Command "Start-Process cmd.exe -ArgumentList '/s,/k,pushd,%V' -Verb RunAs"

我必须打开节点命令提示符的注册表命令如下: cmd.exe /s /k "pushd "%V" & "C:Program Files odejs odevars.bat""

(我无法以管理员身份打开节点提示符)。

今天,我意识到如果我要打开的目录的路径或文件夹名中有撇号,那么所有这些命令都会失败。我尝试了这么多不同的注册表命令以及引号和转义字符的组合,但都不起作用。这变得非常令人沮丧。

有没有人知道在带有撇号的目录中同时打开CMD和PowerShell 5的有效命令?

任何帮助都将不胜感激。

推荐答案

解决方案的关键是:

  • 通过cmd.exe管道(|)启动通过%V传递到powershell.exe的文本文件夹路径:

    • cmd /c <NUL set /p="%V"是一个技巧,它回显%V的值而不带双引号,即使该值包含cmd.exe元字符(它也回显时没有尾随换行符,但这在这里不是问题)。

    • 在要通过管道传输到的powershell.exe命令行中,然后可以通过automatic $input variable间接引用文件夹路径,它提供对stdin(管道)输入的访问。

      • 这可以防止在命令行中直接嵌入%V时出现的问题,特别是包含$`字符的路径。
    • 此外,PowerShell命令还可以对$env:_dir的值执行字符串替换,以便双重嵌入'字符,从而允许将该值嵌入到逐字记录的'...'字符串中。

  • PowerShell的嵌套"..."报价要求使用作为转义字符进行复杂的转义。

  • 注意:这些命令总是会导致创建一个辅助的临时控制台窗口,PowerShell命令会尽快隐藏该窗口,然后自动关闭。这将导致一些短暂的视觉中断

    • 要避免这种情况,需要额外的GUI子系统帮助器可执行文件,以便在没有可见(初始)控制台窗口的情况下启动命令行。这种额外的间接级别会使引用和转义进一步复杂化。

注意:

  • 以下命令旨在将逐字放置在注册表中。以编程方式执行会使转义进一步复杂化。

  • 这些命令使用powershell.exeWindows PowerShellCLI,但它们也应该与跨平台的按需安装PowerShell (Core) 7+CLI一起使用;根据安装后者的方式,您可能必须在下面的命令中使用其完整路径

  • 您可以按如下方式测试命令:

    • %V替换为感兴趣文件夹的文字路径。
    • 通过WindowsRun对话框(WinKey-R)提交。

提升的会话的命令(以管理员身份运行):

Apowershell.exe(Windows PowerShell)会话:

cmd /c <NUL set /p="%V" | powershell.exe -WindowStyle Hidden -NoProfile -Command "Start-Process -Verb RunAs powershell.exe -ArgumentList ('-NoExit -Command "Push-Location -LiteralPath ''{0}''"' -f $input.Replace("'", "''"))"

Acmd.exe会话:

cmd /c <NUL set /p="%V" | powershell.exe -WindowStyle Hidden -NoProfile -Command "Start-Process -Verb RunAs cmd -ArgumentList "/k pushd ""$input""""

设置Node.js环境的cmd.exe会话:

cmd /c <NUL set /p="%V" | powershell.exe -WindowStyle Hidden -NoProfile -Command "Start-Process -Verb RunAs cmd -ArgumentList "/k pushd ""$input"" ^& ""C:Program Files
odejs
odevars.bat""""

注意:如果要使用环境变量%ProgramFiles%而不是硬编码C:Program Files作为Node.js初始化批处理文件路径的一部分以增强健壮性,则必须将注册表值定义为REG_EXPAND_SZ

运行您发现的wt.exe(Windows终端),特别需要转义;字符。路径为;,因为;metacharacter on the wt.exe command line)。

cmd /c <NUL set /p="%V" | powershell.exe -WindowStyle Hidden -NoProfile -Command "Start-Process -Verb RunAs wt.exe -ArgumentList ("-d ""{0}" -f $input.Replace(';',';'))"

注意:此方法是外壳不可知的。也就是说,Windows终端自己设置工作目录,然后运行任何配置为其默认shell的shell。


用于-提升的会话的命令:

  • 这样就不再需要嵌套调用PowerShell,从而简化了命令。

  • 但是,对于打开PowerShell会话,需要特别注意以下事项:

    • 需要另一种逐字传递文件夹路径的方法:设置辅助环境变量_dir,PowerShell命令可以$env:_dir访问该环境变量。

    • 视觉中断通过一个辅助的临时控制台窗口,您有两个选择,权衡

      • 避免中断,其缺点是应用了cmd.exe控制台窗口设置(并且用于启动PowerShell会话的初始cmd.exe进程作为PowerShell进程的父进程保持活动状态;但是,它们一起终止)。

      • 忍受中断(这是使用提升不可避免的),其优点是使用与PowerShell可执行文件关联的常规控制台设置。

视觉中断,但使用cmd.exe的控制台窗口设置,即使是PowerShell

Apowershell.exe会话:

cmd /c title Windows^ PowerShell & pushd "%V" & powershell.exe

Acmd.exe会话(Node.js初始化追加& "C:Program Files odejs odevars.bat"):

cmd /k pushd "%V"

视觉中断,但使用PowerShell的控制台窗口设置

Apowershell.exe会话:

cmd /c pushd "%V" & start powershell.exe

注意:

  • 以上将使用PowerShell的常规控制台窗口设置,但会将完整可执行路径显示为窗口的标题

  • 虽然您可以使用start "Windows PowerShell" powershell.exe更改标题,例如,然后应用默认设置,但是您可以自定义它们。

  • 另一种方法是从PowerShell中的更改窗口标题(但是,在PowerShell完全加载之前,更改不会生效):

    cmd /c pushd "%V" & start powershell.exe -NoExit -Command [Console]::Title='Windows PowerShell'
    
  • 最后,如果通过完整路径调用pwsh.exe,且该路径包含空格,则需要对空格单独使用双引号,因为将路径作为一个整体使用双引号会导致将其误认为窗口title参数(如果显式传递(必然用双引号引起的)title参数,则不需要额外的工作);例如

    :: Note the individually quoted space (" ")
    cmd /c pushd "%V" & start C:PowerShell" "7pwsh.exe
    

这篇关于哪些注册表命令允许我从包含撇号的文件夹的右键单击上下文菜单中以管理员身份运行PowerShell 5/CMD?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆