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

Posted

技术标签:

【中文标题】从 Windows 终端中以提升的权限打开 Windows 终端【英文标题】:Opening up Windows Terminal with elevated privileges, from within Windows Terminal 【发布时间】: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 终端图标并选择以管理员身份运行它,它会打开正好。这就是我要复制的内容。

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

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

【问题讨论】:

【参考方案1】:

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

对于您的用例:

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

最简单的方法可行:

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

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

    为任务命名,选中“以最高权限运行”。 选择“操作”选项卡,单击“新建”,选择“启动程序”作为操作。将wt.exe 的完整路径放在“程序/脚本字段”中。单击确定。再次点击确定。 单击“条件”选项卡,取消选中“仅在计算机使用交流电源时启动任务”。 点击“设置”选项卡,确保选中“允许按需运行任务”并取消选中“如果运行时间超过则停止任务”。 最后在您的 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,则不是直接答案,但另一种选择是:

    Alt + Space,输入终端, 选择以管理员身份运行(或 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 秒的费用。

    使用 _ $PROFILE 找到您的用户配置文件(配置文件是一个 Windows PowerShell ISE 脚本,在您启动新会话时自动运行) 使用任何首选编辑器编辑配置文件_代码 $PROFILE 将以下代码添加到配置文件并保存
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 中所述)。我看不出你的答案与那个答案有什么不同。

以上是关于从 Windows 终端中以提升的权限打开 Windows 终端的主要内容,如果未能解决你的问题,请参考以下文章

我的windows无法打开文件,运行了chkdsk后提示没有权限,必须调以提升模式运行

怎样提升Windows7的用户权限?

Win10系统CMD提示请求的操作需要提升权限怎么办

win10在管理员命令提示符窗口怎么才能提升权限

如何设置Windows7标准用户的权限?

如何提升windows7的权限