【问题标题】:Opening up Windows Terminal with elevated privileges, from within Windows Terminal从 Windows 终端中以提升的权限打开 Windows 终端
【发布时间】:2020-10-11 06:33:01
【问题描述】:

这里有很多关于如何从powershell提升权限的问题,几乎所有人都推荐这个命令:

Start-Process -Verb RunAs powershell.exe .....

(或用于 Powershell Core 的 pwsh.exe)

这很有效,在通过 UAC 块验证访问权限后,它会打开一个具有提升权限的新 Powershell 窗口。

但是,当我使用 Powershell 时,我在 Windows Terminal(Windows 10 的新终端应用程序)中执行此操作,并且我想以提升的权限打开一个新的 Windows Terminal 实例,而不仅仅是一个 Powershell 窗口.

所以我尝试了这些命令:

Start-Process -Verb RunAs wt
Start-Process -Verb RunAs wt.exe
Start-Process -Verb RunAs (Get-Command wt)
Start-Process -Verb RunAs "C:\Users\lasse\AppData\Local\Microsoft\WindowsApps\wt.exe"

他们都失败了:

Start-Process: 此命令无法运行,因为错误:系统无法访问该文件..

我假设这与可执行文件所在的位置有关,在我的配置文件中,但是如果我右键单击任务栏上的 Windows 终端图标并选择以管理员身份运行它,它会打开正好。这就是我要复制的内容。

那么有没有办法让我修改上面尝试过的命令,或者更改一些可以使其工作的访问设置?

对于我的具体例子,我只是想让打开管理终端更简单,我不需要提升任意命令的方法,然后我会很乐意使用我已经在这里展示的命令。

【问题讨论】:

    标签: windows-terminal


    【解决方案1】:

    目前,如果没有解决方法,您无法从命令行打开提升的wt.exe 会话。解决方法包括使用gsudo,使用Task Scheduler(我测试了这个并且它可以工作,但是您需要使用 wt.exe 的完整路径,并且您可以跳过快捷方式创建步骤)或者如果您可以使用键盘快捷方式,最简单的方法;使用键盘快捷键从任务栏以管理员身份运行 Windows 终端。

    对于您的用例:

    对于我的具体实例,我只是想让弹出打开更简单 一个管理终端,我不需要提升任意命令的方法, 那么我将愉快地使用我已经在这里展示的命令。

    最简单的方法可行:

    将 Windows 终端固定为任务栏上的第一项。然后按 Win+Ctrl+Shift+1 以管理员身份打开它。

    如果您确实必须从 Windows 终端中的命令行启动 Windows 终端,请在任务计划程序中创建一个任务:

    1. 为任务命名,选中“以最高权限运行”。
    2. 选择“操作”选项卡,单击“新建”,选择“启动程序”作为操作。将wt.exe 的完整路径放在“程序/脚本字段”中。单击确定。再次点击确定。
    3. 单击“条件”选项卡,取消选中“仅在计算机使用交流电源时启动任务”。
    4. 点击“设置”选项卡,确保选中“允许按需运行任务”并取消选中“如果运行时间超过则停止任务”。
    5. 最后在您的 shell (Powershell) 中,通过运行以下命令启动提升的 Windows 终端会话:schtasks /run /TN "TASK_NAME" 其中 TASK_NAME 是您在步骤 1 中为任务指定的名称。

    【讨论】:

    • 固定到任务栏是一个很好的解决方法,适合我的用例。如果您有 PowerToys,另一个选择是:1. Alt + Space,键入 Terminal,2. 选择以管理员身份运行(或 Ctrl + Shift + Enter) - github.com/microsoft/PowerToys - github.com/microsoft/winget-cli
    • 仅供参考,请勿浏览至 wt.exe。保存时会出错,因为 wt.exe 里面有 0 个字节,你会得到一些系统错误。打开一个cmd提示符,执行wt.exe,然后复制/粘贴该路径。但是对我来说,这一切都是在Windows终端之外启动一个新的powershell会话。对我来说,“TASK_NAME”必须是 Microsoft\”,否则我找不到系统。
    • 我安装了 gsudo(使用巧克力),并在我的默认配置文件前面添加了它:"commandline": "gsudo powershell.exe"。一个小提示:Windows 终端现在还有一个“startOnUserLogin”选项(或在“启动”下的配置 GUI 中启用)。
    【解决方案2】:

    试试这个:

    powershell "Start-Process -Verb RunAs cmd.exe '/c start wt.exe'"
    

    还可以查看以下链接:

    WT.exe 命令行参数: https://docs.microsoft.com/en-us/windows/terminal/command-line-arguments?tabs=windows

    关于在资源管理器(包括管理员)的上下文菜单中添加打开 Windows 终端命令提示符的文章: https://dkcool.tailnet.net/2020/07/add-open-windows-terminal-command-prompt-to-the-explorer-context-menu-in-windows-10/

    关于在资源管理器的上下文菜单中添加 Open Admin Command Prompt 的文章: https://dkcool.tailnet.net/2019/05/add-open-admin-command-prompt-to-the-explorer-context-menu-in-windows-10/

    【讨论】:

    • 如果你想使用某个配置文件,使用powershell "Start-Process -Verb RunAs cmd.exe '/c start wt.exe -p ""<<name of your profile>>""'" 有效
    【解决方案3】:

    如果您有PowerToys,则不是直接答案,但另一种选择是:

    1. Alt + Space,输入终端,
    2. 选择以管理员身份运行(或 Ctrl + Shift + Enter)

    您可以使用WinGet 安装 PowerToys

    【讨论】:

    • 我不使用 powertoys run 应用程序,因为它在我的系统上找到的内容受到严重限制,它似乎只找到直接安装的东西,而不是所有可用的东西路径,所以我跳过它,但感谢您的建议。
    • 有趣,我的它对我系统中的内容有一个相当好的索引。我在某处保存了一个云配置文件,只需键入cloud 即可找到它。我输入了 ubuntu,它找到了 Multipass 提供的正在运行的 k3s-master,所以我有使用它的经验。
    【解决方案4】:

    在最近的版本中,此问题似乎已得到解决。它现在可以正常工作,完全按照您最初尝试和失败的方式 (Start-Process -verb RunAs wt)。我建议现在再次尝试使用最新版本(至少是 Windows 终端,也许还有 PowerShell)。

    不再需要解决方法了!!

    【讨论】:

    • 同意 - 无论是什么修复程序,它已经存在足够长的时间,至少可以在 Windows Terminal 1.4(当前版本之前的完整版本)中运行,因此不需要预览。或者它可能是 PowerShell 版本中的修复。我知道自己这样做至少 6 个月了。
    • 也可能只是原始用户的路径问题(当时应该是答案的一部分)。也许他们通过 github 版本而不是通过 Store 安装了 Windows Terminal?
    • 我正在运行 Windows Terminal preview v1.6.10412.0 和 Windows Terminal stable v1.5.10411.0 ,但在尝试运行时仍然得到“系统无法访问该文件” “Start-Process -Verb RunAs wt”在它们中的任何一个上。因此,我只需执行正常的流程,即右键单击固定的任务栏项目,右键单击跳转列表中的“Windows 终端”,然后选择“以管理员身份运行”。它很笨拙,但它有效,所以......
    • @MikeLoux:这可能是这个线程中最简单的答案。像魅力一样工作。
    • 事实上,您需要以管理员身份运行此命令才能成为 WT 中的管理员。因此,如果您从 Powershell 以非特权用户身份运行它,则它不起作用。要检查您当前是否是 Powershell 中的管理员,请使用此解决方案 serverfault.com/questions/95431/…
    【解决方案5】:

    在我的特殊情况下,我还需要始终以管理员身份打开 Windows 终端。我就是这样做的,运行“where wt”来显示Windows Terminal应用程序exe所在的路径,应该是C:\Users\YOURUSER\AppData\Local\Microsoft\WindowsApps\wt.exe。 我创建了该文件的快捷方式并在高级属性中选中了“以管理员身份运行”,然后我将其固定为启动并瞧。如果需要,您可以在此之后删除临时快捷方式。

    【讨论】:

    • 我为我的 Windows 终端创建了一个 sudo 命令,我可以使用它来生成一个具有管理权限的 Windows 终端实例。
    【解决方案6】:

    您可以使用此 powershell 脚本创建一个快捷方式以始终以管理员身份运行 Windows 终端:

    $WshShell = New-Object -comObject WScript.Shell
    $Shortcut = $WshShell.CreateShortcut("$Home\Desktop\Windows Terminal.lnk")
    $Shortcut.TargetPath = "$env:LOCALAPPDATA\Microsoft\WindowsApps\Microsoft.WindowsTerminal_8wekyb3d8bbwe\wt.exe"
    $Shortcut.Save()
    
    $bytes = [System.IO.File]::ReadAllBytes("$Home\Desktop\Windows Terminal.lnk")
    $bytes[0x15] = $bytes[0x15] -bor 0x20 #set byte 21 (0x15) bit 6 (0x20) ON 
    [System.IO.File]::WriteAllBytes("$Home\Desktop\Windows Terminal.lnk", $bytes)
    

    您可以粘贴它并从 Windows Powershell ISE 运行它,它会在您的桌面上创建一个 Windows Terminal.lnk 文件。每当您双击该快捷方式时,Windows 终端都会以管理员身份运行

    【讨论】:

      【解决方案7】:

      固定到任务栏并按住 Ctrl + Shift,同时左键单击 Windows 终端图标。

      【讨论】:

        【解决方案8】:

        我知道这个答案与您的问题不完全匹配,但鉴于其他答案也以这种方式定位,我希望这不会干扰讨论。

        我总是需要以管理员身份运行 PowerShell,而我只想使用 Windows 终端,因为它的限制不能配置为始终以管理员身份运行。

        我讨厌需要使用快捷方式和我发现网上建议的其他技巧,所以我想我找到了更好的解决方案,但你必须在启动时支付 1/2 秒的费用。

        1. 使用 _ $PROFILE 找到您的用户配置文件(配置文件是一个 Windows PowerShell ISE 脚本,在您启动新会话时自动运行)
        2. 使用任何首选编辑器编辑配置文件_代码 $PROFILE
        3. 将以下代码添加到配置文件并保存
        if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
            $host.ui.rawui.windowtitle="Bootstrapper"
            Start-Process -Verb RunAs wt
        } else {
            $Processes = Get-Process | Where-Object {$_.mainWindowTitle -eq 'Bootstrapper' -and $_.name -eq 'WindowsTerminal'}
            if($Processes.count -gt 0)
            {
                Stop-Process -Id $Processes[0].id
            }
        }
        

        脚本做什么? 您可以将 Windows 终端图标固定到应用程序栏,当您单击此处时,WT 将以非提升用户身份启动,但配置文件将了解是否是这种情况。 当您不以管理员身份运行时,它将更改窗口名称并以管理员身份启动新的 WT。 新实例还将执行配置文件,如果实例以管理员身份运行,它将查找名为 Bootstrapper 的 WT 并将其终止。 这个过程需要一到两秒钟,我更喜欢这种方式而不是右键单击图标。

        【讨论】:

          【解决方案9】:

          Windows Terminal 在预览中有automatically run as administrator 的功能;现在不需要变通方法。

          【讨论】:

            【解决方案10】:

            您很可能只是遇到了路径问题。我知道您提供的命令示例(例如Start-Process -verb RunAs wt)已经为我工作了一段时间(如@fialdrexs 的回答中所述)。

            您是从 Github 版本还是从应用商店安装 Windows 终端?

            【讨论】:

            • 它现在可以工作了,当时还不行。不知道为什么。
            【解决方案11】:

            我的 settings.json 配置文件列表中目前有以下条目,用于将提升的 Windows 终端添加到下拉选项:

            {
                // https://github.com/microsoft/terminal/issues/632#issuecomment-663686412
                "name": "Windows Terminal (elevated)",
                "commandline": "%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -Command Start-Process -Verb RunAs \"shell:appsFolder\\Microsoft.WindowsTerminal_8wekyb3d8bbwe!App\"",
                "hidden": false,
                "icon": "ms-appx:///Images/Square44x44Logo.targetsize-32.png"
            }
            

            带有 GitHub 链接的评论应该可以让您找到我最初找到此信息的位置。

            【讨论】:

              【解决方案12】:

              目前此问题已得到修复,但最终出现了一个奇怪的问题。从 Win+R 运行 wt.exe,在开始菜单中搜索它,然后从终端启动,显示相同的错误消息。

              应用程序无法正确启动 (0xc0000022)。点击确定 关闭应用程序。

              但是,当通过命令提示符、PowerShell 和 PowerShell Core 执行 wt 时它可以工作。

              所以只是一个快速的解决方法,启动 PowerShell 并运行命令, Start-Process -Verb RunAs wt.exe; 或更简单的 start -verb runas wt

              【讨论】:

              • 欢迎来到 Stack Overflow 并感谢您的回答。作为新的贡献者,请确保在发布新答案之前完全阅读问题和现有答案。 Start-Process -Verb RunAs wt.exe 在原始问题中被列为对原始海报(当时)不起作用的命令之一。 This answer 还提到该命令应该现在根据最近的版本工作(但对于某些人来说仍然不能工作,如 cmets 中所述)。我看不出你的答案与那个答案有什么不同。
              猜你喜欢
              • 2020-01-20
              • 1970-01-01
              • 2020-12-22
              • 2021-04-29
              • 2018-06-28
              • 2017-05-19
              • 2018-06-08
              • 2021-02-27
              • 2016-05-28
              相关资源
              最近更新 更多