从 Windows 终端中以提升的权限打开 Windows 终端

Opening up Windows Terminal with elevated privileges, from within Windows Terminal

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

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

(或 pwsh.exe 对于 Powershell Core)

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

但是,当我使用 Powershell 时,我是在 Windows 终端内执行的,这是 Windows 10 的新终端应用程序,我想打开 Windows 的新实例=34=] 具有更高权限的终端,而不仅仅是 Powershell window.

所以我尝试了这些命令:

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: This command cannot be run due to the error: The file cannot be accessed by the system..

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

那么,有没有办法让我修改我在上面尝试过的命令,或者更改一些访问设置来使它起作用?

对于我的具体实例,我只是想让弹出管理终端更简单,我不需要提升任意命令的方法,然后我会很乐意使用我已经在此处显示的命令。

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

对于您的用例:

For my specific instance, I simply want to make it simpler to pop open an admin terminal, I don't need a way to elevate arbitrary commands, then I will happily use the commands I have already shown here.

最简单的方法可行:

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

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

  1. 给任务起个名字,勾选'Run with highest privileges'。
  2. 选择'Actions'标签,点击'New'、select'Start a program'作为动作。将 wt.exe 的完整路径放在 'Program/script field' 中。单击确定。再次单击“确定”。
  3. 单击 'Conditions' 选项卡,取消选中“仅当计算机使用交流电源时才启动任务”。
  4. 单击 'Settings' 选项卡,确保选中“允许任务 运行 按需”并取消选中“如果 运行ning 时间超过则停止任务”。
  5. 最后,在您的 shell (Powershell) 中,通过 运行 命令启动提升的 Windows 终端会话:schtasks /run /TN "TASK_NAME" 其中 TASK_NAME 是您在步骤 1 中为任务指定的名称。

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

试试这个:

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/

关于将“打开管理命令提示符”添加到资源管理器中的上下文菜单的文章: https://dkcool.tailnet.net/2019/05/add-open-admin-command-prompt-to-the-explorer-context-menu-in-windows-10/

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

  1. Alt + Space,键入终端,
  2. Select 运行 作为管理员(或 Ctrl + Shift + Enter)

您可以使用 WinGet

安装 PowerToys

您可以使用此 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 终端将 运行 作为管理员

我知道这个答案并不完全符合你的问题,但考虑到其他答案也是以这种方式定向的,我希望这不会打扰讨论。

我总是需要 运行 PowerShell 作为管理员,我只想使用 Windows 终端,鉴于它的限制不能配置为 运行 始终作为管理员。

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

  1. 使用 _ $PROFILE
  2. 找到您的用户配置文件(配置文件是一个 Windows PowerShell ISE 脚本,当您开始新会话时 运行 会自动执行该脚本)
  3. 使用任何首选编辑器编辑个人资料 _ 代码 $PROFILE
  4. 将以下代码添加到配置文件中并保存
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 将以非提升用户身份启动,但如果是这种情况,配置文件将理解。 如果您不是 运行 管理员,它将更改 window 的名称并以管理员身份启动新的 WT。 新实例还将执行配置文件,如果实例是 运行inng 作为管理员,它将查找名为 Bootstrapper 的 WT 并将其终止。 这个过程需要一到两秒,我更喜欢这种方式而不是右键单击图标。

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

不再需要解决方法!!

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

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

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

The application was unable to start correctly (0xc0000022). Click OK to close the application.

但是,它在通过命令提示符、PowerShell 和 PowerShell Core 执行 wt 时有效。

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

我目前在我的 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 link 的评论应该可以让您找到我最初找到此信息的位置。

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

Windows 终端有一个功能可以在预览中 automatically run as administrator;现在不需要解决方法。

我找到了解决方法,只需创建一个包含内容的文件 bat

powershell Start-Process -Verb RunAs wt.exe

  1. 将文件 yourfile.bat 保存到您想要的文件夹。
  2. 将路径文件夹添加到系统环境。
  3. 按 WINDOW + R 并输入文件 bat 名称。