Terminal: 以管理员身份运行

创建于 2019-07-08  ·  42评论  ·  资料来源: microsoft/terminal

2019-07-08_14h29_22
2019-07-08_14h29_54

似乎在运行终端“作为管理员”时出现问题

错误:Windows找不到“ C:\ Program Files \ WindowsApps \ Microsoft.WindowsTerminal_0.2.1831.0_x64__8wekyb3d8bbwe \ WindowsTerminal.exe”,请确保您正确输入了名称,然后重试

Issue-Bug Needs-Tag-Fix Product-Terminal Resolution-External

最有用的评论

还有建议,而不是从任务栏以管理员身份运行WHOLE终端,也许还有替代方法?

例如:

当打开新选项卡时,提示用户或让用户界面询问他们是否要以管理员身份打开新实例?
suggesstion

或者,只需在终端上右键单击即可从完全相同的目录中打开管理标签。 (这对于powershell-core来说非常有用,因为它没有像sudo这样的好功能)

所有42条评论

@ DHowett-MSFT我本可以发誓我们在某个地方有一个重复的问题,但是现在找不到。 你还记得是什么原因造成的吗?

啊,抱歉,如果重复的话。

没有理由,可以正常启动应用程序,但是请右键单击并以admin失败身份启动,Windows UAC两次提示输入管理员密码,然后您会收到错误消息。

我目前也遇到了这个问题。 我在任务栏中搜索终端
win-terminal-run-as-admin-issue-1

然后提示我输入我的管理员凭据两次! 一个管理员提示一个接一个。 然后,当我第二次完成输入凭据时,弹出此错误消息:

win-terminal-run-as-admin-issue

我今天刚刚安装了终端。

终端版本:
版本:0.2.1831.0

操作系统版本:
Windows 10专业版
10.0.18362内部版本18362

还有建议,而不是从任务栏以管理员身份运行WHOLE终端,也许还有替代方法?

例如:

当打开新选项卡时,提示用户或让用户界面询问他们是否要以管理员身份打开新实例?
suggesstion

或者,只需在终端上右键单击即可从完全相同的目录中打开管理标签。 (这对于powershell-core来说非常有用,因为它没有像sudo这样的好功能)

在管理模式下运行Windows终端支持可能不是一个好习惯,这意味着从Ctrl + T打开的其他选项卡中的所有外壳程序都可能具有管理员特权。 据我所知,Windows Terminal并没有实现从管理员到受限用户的任何代码。 实际上,Windows缺乏的是一种不需要UI交互的特权实现,例如sudo。

但是实现sudo也会很麻烦。 符咒动词的流大致如下(如果有任何错误,请提醒我):

  1. AppInfo前往并与本地安全机构进行交谈,以获取会话1登录用户的提升的令牌。
  2. AppInfo加载一个STARTUPINFOEX结构(对于Vista而言是新功能),并调用具有一个属性空间的全新Vista API InitializeProcThreadAttributeList()。
  3. 调用OpenProcess()以获得启动RPC调用的进程的句柄。
  4. 使用PROC_THREAD_ATTRIBUTE_PARENT_PROCESS调用UpdateProcThreadAttribute(),并使用在步骤3中检索到的句柄。
  5. EXTENDED_STARTUPINFO_PRESENT以及步骤1和4的结果调用CreateProcessAsUser()。
  6. 调用DeleteProcThreadAttributeList()。
  7. 收集结果,并清理句柄。

我们可以得出一个简单的结论。 实际上, runas实际上是一个正常的过程,向高特权进程发起RPC请求。 高特权进程(AppInfo服务)创建一个Administrator进程并将其父进程设置为普通进程。

启动管理员进程时,AppInfo当前不支持设置工作目录,输入和输出(尽管调用CreateProcessAsUser)。 要使sudo支持在Windows Terminal中运行,需要解决此问题。 (ShellExecuteEx SEE_MASK_NO_CONSOLE不起作用)

SHELLEXECUTEINFOW

typedef struct _SHELLEXECUTEINFOW {
  DWORD     cbSize;
  ULONG     fMask;
  HWND      hwnd;
  LPCWSTR   lpVerb;
  LPCWSTR   lpFile;
  LPCWSTR   lpParameters;
  LPCWSTR   lpDirectory;
  int       nShow;
  HINSTANCE hInstApp;
  void      *lpIDList;
  LPCWSTR   lpClass;
  HKEY      hkeyClass;
  DWORD     dwHotKey;
  union {
    HANDLE hIcon;
    HANDLE hMonitor;
  } DUMMYUNIONNAME;
  HANDLE    hProcess;
} SHELLEXECUTEINFOW, *LPSHELLEXECUTEINFOW;

请参阅: https :

|值| 含义|
| --- | --- |
| PROC_THREAD_ATTRIBUTE_PARENT_PROCESS | lpValue参数是指向要使用的进程的句柄的指针,而不是将调用的进程用作要创建的进程的父级。 要使用的进程必须具有PROCESS_CREATE_PROCESS访问权限。

从指定进程继承的属性包括句柄,设备映射,处理器亲缘关系,优先级,配额,进程令牌和作业对象。 (请注意,某些属性(例如调试端口)将来自创建过程,而不是此句柄指定的过程。)|

这绝对是Windows平台的问题。 我正在将其分配给自己,以便与拥有它的团队进行跟进并完成此任务。 谢谢。

我喜欢@ YMba9g8j9CJp0wLoQf5y的建议,即使用升级的权限授权标签。 我来自ConEmu,在这里我们可以创建具有或没有管理员特权的选项卡。 创建管理标签时,系统会提示我UAC(永远)。

这不仅是Windows应用商店应用程序的正常行为吗? 看起来像是最近发布的预览应用。
但是我确实需要一种运行高架外壳的方法。 今天似乎无法做到这一点(以管理员身份打开标签页)。

嘿,我们不确定对此是否可以做任何事情。 您介意在“开发人员平台>应用部署”类别中提交反馈吗? 这将有助于将其路由到正确的团队,并收集一些非常有用的诊断信息。

链接:这也是#1538

即使我同意这个决定。 这确实使使用chocolatey而不显式地在管理模式下运行非常痛苦。 (

@musm我刚在PowerShell 6配置中有了这个:

function GoAdmin { start-process pwsh –verb runAs }

(如果使用旧的powershell,请用powershell替换pwsh

因此,每当我需要通过Chocolatey安装/更新软件包时,都键入GoAdmin (在Windows Terminal的托管PowerShell中),这将带我到单独的Admin powershell窗口。 在那里,我可以运行所有Chocolatey管理命令。 然后,我只需要关闭管理窗口,然后在Windows Terminal会话中键入refreshenv来更新所有PATH变量。 很简单

我绝对希望启动wt (Windows Terminal)而不是直接进入“裸机” pwsh的方法,但这似乎是不可能的。 但这是一个小麻烦。 嗯 :-)

我想以管理员身份启动WT(0.9.433.0)时仍然出现错误:

image

发生在具有最新WT和Windows(v10.0.18363.657)的多台计算机上。
不太了解为什么此问题已关闭以及解决方法是什么。

实际上,它从来没有奏效,我得到的最后一条评论是,这是Windows问题,他们将向团队提出。

他们将与团队合作。

我不这么认为。 这更像是“应该向团队提出来”。

我确定他们没有考虑发布具有最重要功能之一的Win Terminal v1。
太糟糕了,因为它使当前的WT的预发行版本不可用。

这将与管理员一起弹出一个新的Powershell窗口。 并不是我们想要的,但这是可以解决的。 使用以下命令行创建新的配置文件。

"commandline": "powershell.exe -Command \"Start-Process powershell.exe -Verb RunAs\"",

为什么关闭? 仍然需要一个高程标签功能。

这就是该存储库中其他许多问题中正在跟踪的原因。

@ DHowett-MSFT谢谢。 我们应该关注哪个问题? 我认为上面没有提到。

@musm我刚在PowerShell 6配置中有了这个:

function GoAdmin { start-process pwsh –verb runAs }

(如果使用旧的powershell,请用powershell替换pwsh

因此,每当我需要通过Chocolatey安装/更新软件包时,都键入GoAdmin (在Windows Terminal的托管PowerShell中),这将带我到单独的Admin powershell窗口。 在那里,我可以运行所有Chocolatey管理命令。 然后,我只需要关闭管理窗口,然后在Windows Terminal会话中键入refreshenv来更新所有PATH变量。 很简单

我绝对希望启动wt (Windows Terminal)而不是直接进入“裸机” pwsh的方法,但这似乎是不可能的。 但这是一个小麻烦。 嗯 :-)

在Windows中,此配置文件位于何处?

@ mian-muhammad我认为他的意思是PowerShell配置文件。 https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_profiles

我找到了解决方法。 您可以使用Chocolatey安装名为sudo的软件包(choco install -y sudo)。 然后,您可以按预期使用sudo。

看来我目前可以以管理员身份打开终端; 至少它可以在我的机器上运行。 如果我们可以像ConEmu这样的管理员身份创建一个选项卡(在#632中进行了讨论),那会更好,但是当前没有必要重新打开此问题。

其他相关的待处理功能请求:

  • #146 sudo @ Pens99可能感兴趣
  • #576任务栏跳转列表; 由于安全隐患(我完全理解来自安全行业),我将其视为#632的替代,尤其是与#3246结合使用时。

希望这对关注此主题的所有人有所帮助。

@ DHowett-MSFT我们应该关注并关注哪个问题来解决此问题? 我能看到的唯一其他参考问题是#1538,它也已关闭。

我确定Microsoft的立场不能是每个人都应该对其标准用户具有管理权限,而不是如果他们要使用现代Windows应用程序,则要使用单独的管理员帐户。 毕竟这与标准的安全惯例相反。

@danstur关于此问题我能提供的最好的是#4217。 我们正在与拥有应用程序部署的团队一起寻求修复。 问题是应用程序是全局安装的,但仅按用户注册。 这是为Windows 8构建的一些基础架构,其发展非常缓慢,甚至无法运行终端机等标准Win32应用程序。 #1386跟踪我们如何退出软件包,并以更传统的方式分发给那些在软件包部署引擎方面遇到麻烦的企业客户和人们。

@ DHowett-MSFT非常感谢您提出的问题,很高兴听到它正在被跟踪。

需要说明的是:如果我通过#1386中提到的选项安装该应用程序,那么我将能够以其他用户身份运行该应用程序,或者仍然无法运行? 我不介意与其他用户注册该应用程序(是否意味着运行Add-AppxPackage ?)。

@ DHowett-MSFT Dustin Howett FTE感谢您提出的问题,很高兴听到有人跟踪它。

需要说明的是:如果我通过#1386中提到的选项安装该应用程序,那么我将能够以其他用户身份运行该应用程序,或者仍然无法运行? 我不介意与其他用户注册该应用程序(是否意味着运行Add-AppxPackage ?)。

那应该工作正常。 您需要作为这些用户使用Add-AppxPackage,是的。 :微笑:

很高兴看到它被钉住了。

这需要解决,因为现在在任何使用单独的管理员和用户帐户设置的Windows环境中(应该如此),如果从(推荐)MS Store安装了终端,则该终端不适用于管理员

很高兴看到它被钉住了。

这需要解决,因为现在在任何使用单独的管理员和用户帐户设置的Windows环境中(应该如此),如果从(推荐)MS Store安装了终端,则该终端不适用于管理员

对我有用的一种解决方法是,以admin用户身份在本地计算机上登录,然后再次从商店“安装”终端。 然后,以标准用户身份登录后,我可以以管理员身份运行终端

是的,问题似乎出在Store仅向当前用户注册该应用。 对于大多数应用程序来说,这很好(实际上就是多数应用程序应如何安装),但对于终端等管理应用程序则不好。

嘿,未来我:商店注册问题已在内部通过MSFT:20356613进行了跟踪,并在#4217中进行了详细讨论

你好,
我也经常遇到这个问题。 解决方案是在登录管理员帐户后再次安装终端应用程序。 然后,您将可以在普通帐户上以管理员身份运行。

同样在这里。 问题似乎没有解决

我还有另一个不尽人意的解决方法,它不允许打开以管理员身份运行的_tab_,但确实允许从现有(非管理员)选项卡中以管理员身份打开PowerShell窗口:

https://github.com/jt-github/elevate

这与添加上述@CraigHead建议的配置文件的方式相同:
"commandline": "powershell.exe -Command \"Start-Process powershell.exe -Verb RunAs\"",

除了我的我的版本是通过运行elevate命令执行的。

@ jt-github就像sudo。

看到这里: https :

确实,只有sudo比我的凉爽得多,但我的死法如此简单,以至于易于理解和使用。

像你们中的许多人一样,我也遇到了这个问题,所以我创建了以下函数,以便从powershell.exe,pwsh.exe或Microsoft终端打开Admin Shell。


# Function        Test-IsAdmin
function Test-IsAdmin {
    <#
    .Synopsis
    Tests if the user is an administrator
    .Description
    Returns true if a user is an administrator, false if the user is not an administrator
    .Example
    Test-IsAdmin
    #>
    $identity = [Security.Principal.WindowsIdentity]::GetCurrent()
    $principal = New-Object Security.Principal.WindowsPrincipal $identity
    $principal.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}


# Function        New-AdminShell
function New-AdminShell {
    <#
    .Synopsis
    Starts an Elevated PowerShell Console.

    .Description
    Opens a new PowerShell Console Elevated as Administrator. If the user is already running an elevated
    administrator shell, a message is displayed in the console session.

    .Example
    New-AdminShell

    #>

    $Process = Get-Process | Where-Object { $_.Id -eq "$($PID)" }
    if (Test-IsAdmin = $True) {
        Write-Warning -Message "Admin Shell already running!"
    }
    else {
        if ($Process.Name -eq "powershell") {
            Start-Process -FilePath "powershell.exe" -Verb runas -PassThru
        }
        if ($Process.Name -eq "pwsh") {
            Start-Process -FilePath "pwsh.exe" -Verb runas -PassThru
        }
    }
}

# Function        New-AdminTerminal
function New-AdminTerminal {
    <#
    .Synopsis
    Starts an Elevated Microsoft Terminal.

    .Description
    Opens a new Microsoft Terminal Elevated as Administrator. If the user is already running an elevated
    Microsoft Terminal, a message is displayed in the console session.

    .Example
    New-AdminShell

    #>

    if (Test-IsAdmin = $True) {
        Write-Warning -Message "Admin Shell already running!"
    }
    else {
        Start-Process "wt.exe" -ArgumentList "-p pwsh" -Verb runas -PassThru
    }
}

我希望有人觉得它们有用。 我已将它们添加到我的PowerShell配置文件中,因此它们始终可用。

你好,
我也经常遇到这个问题。 解决方案是在登录管理员帐户后再次安装终端应用程序。 然后,您将可以在普通帐户上以管理员身份运行。

这也对我有用,它非常烦人,但是在公司网络上,这几乎是唯一对我有用的方法。 如果您没有本地管理员,那么此应用对于企业网络上的特权提升几乎是破产。

很高兴看到它被钉住了。
这需要解决,因为现在在任何使用单独的管理员和用户帐户设置的Windows环境中(应该如此),如果从(推荐)MS Store安装了终端,则该终端不适用于管理员

对我有用的一种解决方法是,以admin用户身份在本地计算机上登录,然后再次从商店“安装”终端。 然后,以标准用户身份登录后,我可以以管理员身份运行终端

不,这对我不起作用:(

所以我想通了。

您必须同时在管理员帐户和主帐户中都安装它,但还必须登录管理帐户才能使其正常工作。 这样,我的意思是计算机必须先登录管理员,然后切换用户(不注销)并登录另一个帐户。 这将允许该应用在管理员模式下运行。

我猜两个帐户上安装的商店应用程序都无法以管理员身份运行,除非登录了管理员帐户。

所以我想通了。

您必须同时在管理员帐户和主帐户中都安装它,但还必须登录管理帐户才能使其正常工作。 这样,我的意思是计算机必须先登录管理员,然后切换用户(不注销)并登录另一个帐户。 这将允许该应用在管理员模式下运行。

我猜两个帐户上安装的商店应用程序都无法以管理员身份运行,除非登录了管理员帐户。

这对我有用。 👍

此页面是否有帮助?
0 / 5 - 0 等级