Windows 是否有任何“sudo”命令?

uka*_*nth 487 windows privileges command-line

我总是在我的 Windows 计算机上使用非管理员帐户工作。有时我需要安装需要管理员访问权限的程序。由于我主要使用 Windows 命令提示符,是否有类似于 Linux 终端命令的 Windows 命令来提升权限sudo

Dav*_*man 289

运行方式命令。

runas [{/profile|/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program
Run Code Online (Sandbox Code Playgroud)

赶紧跑:

runas /noprofile /user:Administrator cmd 
Run Code Online (Sandbox Code Playgroud)

以管理员身份启动命令外壳

  • 这不是要管理员密码吗?sudo 要求输入***你的***密码! (60认同)
  • 您可能会发现您希望为任何扩展使用加载配置文件(例如,包括环境变量)。在这种情况下,删除 `/noprofile`。 (22认同)
  • 不幸的是,这已经严重过时了。`Runas` 只是在一组不同的凭据下运行命令。即使您的凭据具有管理员权限,也不意味着您凭据下的所有进程都以管理员身份运行。 (18认同)
  • +1 表示“过时”,因为 runas 无法绕过 UAC。相反,请按 Windows 按钮,键入 cmd,然后按 Ctrl+Shift+Enter。 (18认同)
  • 这对我不起作用。输入密码后,命令提示符关闭。 (6认同)
  • 您还必须确保管理员帐户有密码。否则,您会收到错误 1327,“用户帐户限制。可能的原因是不允许使用空白密码,...” (3认同)
  • @naxa 是的,这不完全是 sudo。当然,您可以将 `/user:Administrator` 更改为 `/user:YourLoginName` 并执行与 sudo 相同的操作。不太明白@surfasb 的评论。这什么时候咬你?我已经成功地使用这个技巧来编辑只能由管理员编辑的文件(例如`runas /noprofile /user:myUserName "C:\path\to\Vim\vim73\gvim.exe C:\some\file.cfg "`) (3认同)
  • @barlop:您应该查看 UAC 的工作原理。默认情况下,管理员帐户会自动将进程提升为管理员权限。它与管理员帐户一起使用是一个巧合。将管理员 **group** 中的任何其他帐户与 *runas* 一起使用,默认情况下您的程序将不会获得管理员权限。 (3认同)
  • @Jonas,您可能有一个重命名的管理员帐户。我遇到过同样的问题 (2认同)
  • https://chocolatey.org/packages/Sudo (2认同)

mat*_*kie 142

Elevate - “使用 UAC 权限提升执行命令。这对于在命令提示符或批处理文件中工作非常有用。” 它与 不同sudo,它将执行用户更改为管理员,但它的语法使用起来比 简单得多runas,并且可以保留当前目录,从而可以使用相对路径。

Synopsis:
  elevate [(-c | -k) [-n] [-u]] [-w] command

Options:
  -c  Launches a terminating command processor; equivalent to "cmd /c command".
  -k  Launches a persistent command processor; equivalent to "cmd /k command".
  -n  When using -c or -k, do not pushd the current directory before execution.
  -u  When using -c or -k, use Unicode; equivalent to "cmd /u".
  -w  Waits for termination; equivalent to "start /wait command".
Run Code Online (Sandbox Code Playgroud)

Elevate 的目的不是解决或绕过 UAC(用户帐户控制),而是使用它。只要启用了 UAC,必须在过程中的某个时刻出现某种提示。如果您需要完全摆脱提示,则必须禁用 UAC

Elevate 缓解的痛点是从非特权 shell 升级特定进程,然后照常进行。如果没有这个,您需要在尝试特权命令之前通过右键单击>“以管理员身份运行”启动特权命令提示符,这不容易编写脚本。

这与效果很好“提升不提示”secpol.msc。他们一起做与%wheel ALL=(ALL) NOPASSWD: ALLsudo相同的事情

一个已知的限制是它不会从它正在提升的程序返回错误代码。

如果您的肌肉记忆卡在sudo 上,请使用Doskey创建别名:
doskey sudo=elevate -w

或 PATH 中的批处理文件:
@elevate -w %*

Elevate 是Johannes Passing编写的第 3 方工具。这是一个 11kb 的下载和便携式(无需安装):http ://code.kliu.org/misc/elevate/

  • 很高兴提到它是一个外部实用程序,缺少 OOTB。 (15认同)
  • 我发现 elevate (v1.3.0) 的唯一问题是它不会从它正在提升的程序中返回错误代码。 (7认同)
  • 这与 secpol.msc 中的“无提示提升”完美搭配。它们一起与 sudo 中的 `%wheel ALL=(ALL) NOPASSWD: ALL` 相同。 (5认同)
  • Sudo.bat:`@elevate %*` => 利润! (4认同)
  • @sayap,要清楚,你的意思是:http://ss64.com/nt/syntax-uac.html? (2认同)
  • @barlop:elevate 的目的不是解决或绕过 UAC(用户帐户控制),而是使用它。只要启用了 UAC,就必须*在进程中的 _some_ 点有某种提示。如果您需要完全摆脱提示,则必须禁用 UAC(请参阅第二条评论)。elevate 解决的问题是从非特权 shell 升级特定进程,然后照常进行。如果没有这个,在尝试特权命令之前,您需要通过右键单击“以管理员身份运行”来启动特权命令提示符,该命令无法编写脚本。 (2认同)

Sim*_*ens 69

您可以使用类似的runas命令,或者您可以在SourceForge 上查看sudo for Windows项目,它添加了一个 sudo 命令。

区别很微妙:

假设您有两个用户。Bob 是普通用户,James 是管理员。

如果您以 Bob 的身份登录并使用“runas james acommand”,则该命令就像由 James 运行一样运行,因此它会访问 James 的用户设置,并且任何用户更改都会进入 James My Documents & settings 文件夹等。因此,如果您正在安装应用程序,比如说,它将以 James 的身份安装,而不是以 Bob 的身份安装。

另一方面,如果 Bob 执行“sudo acommand”,该命令仍以 Bob 的身份运行,但具有提升的权限 - 就像 Linux sudo 命令一样。为了防止任何用户能够使用 sudo,您必须定义一个 sudoers 用户组,其中包含有权使用 sudo 提升权限的普通用户列表。用户仍然必须在提升之前提供凭据。

有时区别并不重要,有时很重要,我发现这两个命令都很有用。

  • @hasen j - 你的问题只是因为 ~/.themes 在命令运行之前进行评估(因此在它切换到 root 之前)。 (5认同)
  • 你确定吗?当我在 ubuntu 中运行 sudo 时,如果我当前的主题在 `~/.themes` 中,那么 sudo-ed 应用程序将无法访问该主题,因为它不在 `/home/root/.themes` 中,并且会使用默认的丑陋 gtk 主题。 (2认同)
  • 除了托管在 GitHub 上的另一个解决方案是 windosu:https://github.com/tehsenaus/windosu 我刚刚找到它,它似乎工作得很好。最喜欢的是它非常容易安装。只需“npm install -g windosu”。 (2认同)

小智 41

您还可以使用Script Elevation PowerToys


Max*_*mus 32

如果您准备切换到其他控制台,则可以使用ConEmu(我是作者)。它的功能之一 - 能够在一个 ConEmu 窗口中运行提升和非提升的选项卡。选项卡也可以使用不同的凭据启动。

为方便用户使用,有批处理文件csudo.cmd(可以很容易地用于 bash)。阅读项目 wiki 中的完整说明。简而言之,当您从现有的非提升选项卡运行某些命令时,例如

csudo dism /online /enable-feature /featurename:NetFX3 /All /Source:D:\sources\sxs /LimitAccess
Run Code Online (Sandbox Code Playgroud)

ConEmu 将dism在新提升的控制台/选项卡中启动(Vista 中带有前面的 UAC 提示或 XP 中的登录框)。

默认情况下csudo,在拆分中启动新控制台(可能通过编辑csudo.cmd内容进行更改)。

当然,sudo.cmd如果您喜欢“经典”sudo一词,您可以将其重命名为。

ConEmu/Windows 中的 sudo


vul*_*ven 28

快速方法:

添加sudo的三个步骤。

  1. 打开 PowerShell。

  2. 复制以下脚本 (Ctrl+C) 并将其粘贴到 PowerShell (Alt+Space+E+P) 中:

$script_path="$HOME\Documents\Scripts"; if (!(test-path $script_path)) {New-Item -ItemType directory $script_path} if (!(test-path $profile)) { new-item -path $profile -itemtype file -force }". $script_path\sudo.ps1" | Out-File $profile -append; "function sudo(){if (`$args.Length -eq 1){start-process `$args[0] -verb `"runAs`"} if (`$args.Length -gt 1){start-process `$args[0] -ArgumentList `$args[1..`$args.Length] -verb `"runAs`"}}" | Out-File $script_path\sudo.ps1; powershell
Run Code Online (Sandbox Code Playgroud)
  1. 击中Enter

它将sudo在 PowerShell 中永久启用命令。

用法:

sudo <process-name> [param1 [param2 [param3]]]
Run Code Online (Sandbox Code Playgroud)

例子:

sudo explorer
sudo notepad
sudo powershell
sudo cmd
sudo taskmgr
sudo tasklist
sudo taskkill /IM Skype.exe /PID 8496
Run Code Online (Sandbox Code Playgroud)

长法学习:

注意:我混合了两篇文章中的脚本来创建上述脚本。而是在记事本中手动粘贴脚本,我添加了Out-File要保存的语句ps1$profile脚本中的文件。

提示:如果您不是 UAC 弹出窗口的忠实粉丝(像我一样),请将以下内容保存在 *.reg 文件中并运行它:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000
Run Code Online (Sandbox Code Playgroud)


GAT*_*awn 19

如果您在 Windows 上执行此操作,那么除了其他几个答案中提到的 Run As 命令之外,还有一些方法可以使用鼠标执行此操作。

如果您Shift在 Windows 中右键单击大多数可执行文件时按住该键,您应该会注意到一些更高级的选项。其中之一是“ Run As...”选项(我认为它Run As Administrator从 Vista 开始称为“ ”)。

您还可以从 Microsoft 下载更高级的 RunAs 版本,称为ShellRunAs,它在命令行和图形模式下都对内置 RunAs 命令进行了增强,包括让您保存帐户凭据


Ger*_*oli 6

我写了gsudo,一个用于 Windows 的 sudo 感觉就像*nix sudo并且有一些杀手级功能:

  • 在当前控制台(附加)中运行而不破坏 Tab 键自动完成。或添加-n以在新窗口中启动。
  • 可靠地处理所有场景以用于脚本。(ExitCodes, StdIn/Out/Err 重定向/捕获)
  • 支持 Cmd/PowerShell/PowerShell Core
  • 凭据缓存:如果gsudo在几分钟内多次调用,它只会显示一次 UAC 弹出窗口。

gsudo 演示

用法

gsudo 在当前控制台中打开一个提升的 shell。

gsudo [options] {command} [arguments] 使用提升的权限执行指定的命令。

最相关[options]

  • -n | --new 在具有提升权限的控制台中启动命令(并立即返回)。
  • -w | --wait 强制等待进程结束(并返回退出代码)。
  • -s | --system 作为本地系统帐户运行(“NT AUTHORITY\SYSTEM”)。

安装

  • 使用勺子: scoop install gsudo
  • 使用巧克力: choco install gsudo
  • 使用 Winget: winget install gsudo
  • 或者查看文档最新版本