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


449

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


7
我相信您正在寻找的术语是“高架”访问。即使您的凭据具有管理员权限,在您“ sudo”命令之前,您凭据下的进程也没有管理员权限。在Windows中,他们称其为“提升”。
2014年

7
@IGRACH不在我的掌上电脑上
jiggunjer

2
我用它doskey sudo= runas /user:Administrator "cmd /k cd \"%cd%\" & $*"
威廉

1
试试我的wsudo,一sudo可作为包装的巧克力般的Windows工具。
noseratio

Answers:


267

运行方式命令。

runas [{/profile|/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program

赶紧跑:

runas /noprofile /user:Administrator cmd 

以管理员身份启动命令shell


22
您可能会发现要为任何扩展使用加载配置文件(例如,包括环境变量)。在这种情况下,请删除/noprofile
理查德

6
这对我不起作用。键入密码后,命令提示符将关闭。
乔纳斯(Jonas)2010年

55
这不是在问管理员密码吗?sudo要求您输入密码!
n611x007 2012年

15
不幸的是,这已经严重过时了。 Runas仅在一组不同的凭据下运行命令。即使您的凭据具有管理员权限,也不意味着您的凭据下的所有进程都以admin身份运行。
surfasb 2014年

12
+1表示“过时”,因为符文无法绕过UAC。而是按Windows按钮,键入cmd,然后按Ctrl + Shift + Enter。
2014年

125

我发现提高的今天,其“执行与UAC权限提升的命令。这是内部命令提示符或批处理文件时非常有用。” 它与并不相同sudo,它将执行用户更改为Administrator,但是它的语法比更加易于使用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".

Elevate的目的不是解决或绕过UAC(用户帐户控制),而是与其一起工作。只要启用了UAC ,过程中的某些时候必须有某种提示。如果您需要完全摆脱提示,则必须禁用UAC

减轻痛苦的点是从非特权外壳升级特定进程,然后正常进行。否则,您需要右键单击>“以管理员身份运行”以启动特权命令提示符,而在尝试特权命令之前,该脚本很难编写脚本。


5
这与secpol.msc中的“无需提示就提升”非常完美。在一起,它们的功能与%wheel ALL=(ALL) NOPASSWD: ALLsudo中的相同。
sayap 2012年

2
@sayap,请澄清一下,您的意思是:ss64.com/nt/syntax-uac.html吗?
马特·威尔基

5
我发现elevate(v1.3.0)的唯一问题是它没有从正在提升的程序中返回错误代码。
肯(Ken)

4
Sudo.bat:@elevate %*=>赚钱!
2014年

10
值得一提的是,它是一个外部实用程序,缺少OOTB。
Hi-Angel

67

您可以使用类似的runas命令,也可以在SourceForge上签出Windows项目的sudo,其中添加了sudo命令。

区别是细微的:

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

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

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

有时差异并不重要,有时却并不重要,我发现这两个命令都可能有用。


2
你确定吗?当我在ubuntu中运行sudo时,如果当前主题位于,~/.themes则sudo-ed应用程序将无法访问该主题,因为它不在中/home/root/.themes,并且将使用默认的丑陋gtk主题。
hasen

5
@hasen j-您的问题仅仅是因为〜/ .themes在命令运行之前(因此在切换到根之前)进行求值。
杰瑞德(Jared)

1
除了托管在GitHub上之外,另一个解决方案是windosu:github.com/tehsenaus/windosu我刚刚找到了它,它似乎工作得很好。最喜欢的是它非常容易安装。只需“ npm install -g windosu”。
Venryx

39

您也可以使用脚本高程PowerToys


很棒-正是我想要的。我不想以不同的用户身份运行命令,而只是以提升的特权运行它。
Orip 2010年

正是解决此问题的正确方法!谁想要Runas的语法混乱?
稳定狗

1
我经常希望elevate命令内置在Windows中。这是一个很棒的工具。
nhinkle

现在有同一位作者的Elevation PowerToys集合,与创建自提升脚本特别相关。
马特·威尔基2011年

1
@barlop当然不是。那会破坏UAC的目的。
nhinkle

29

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

为了用户的舒适,这里有一个批处理文件csudo.cmd(可以很容易地用于bash)。阅读项目Wiki中的完整描述。简而言之,例如,当您从现有的非高程选项卡运行某些命令时,例如

csudo dism /online /enable-feature /featurename:NetFX3 /All /Source:D:\sources\sxs /LimitAccess

ConEmu将dism在新的提升的控制台/选项卡中启动(在Vista中显示UAC提示,在XP中显示“登录”框)。

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

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

ConEmu / Windows中的sudo


1
csudo很久以前就包含在ConEmu发行版中。完全不需要链接。
Maximus 2014年

问题出在sudo'd命令之后,新的控制台选项卡变得不可用。因此,您无法继续在提升的选项卡中工作,仅收到press enter or esc to exit消息。
jiggunjer '16

1
当然不能。即使在Unix上,sudo命令完成其工作后,您也将返回非高架终端!你走错路了。
Maximus

1
1)如果您要打开新窗口或标签,则最好保留它,让用户选择是否要继续。2)在我的ubuntu上,我不必每次都须藤,我认为海拔持续了几分钟。3)此应用程序有上百万个选项,对此没有用吗?也许我被宠坏了。
jiggunjer

24

快速方法:

添加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
  1. Enter

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

用法:

sudo <process-name> [param1 [param2 [param3]]]

例子:

sudo explorer
sudo notepad
sudo powershell
sudo cmd
sudo taskmgr
sudo tasklist
sudo taskkill /IM Skype.exe /PID 8496

学习方法长:

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

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

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000

1
我喜欢这个问题的Powershell解决方案。这必须是提升某些东西的最简单方法。现有的.bat文件可以轻松转换为POSH
Mitchell Skurnik 2013年

在Windows 10上收到此错误:. : File C:\Users\User\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 cannot be loaded because running scripts is disabled on this system.
sowrov

@sowrov,请参阅[本文](www.faqforge.com/windows/windows-powershell-running-scripts-is-disabled-on-this-system/)。默认情况下,在任何Windows安装上均禁用PowerShell脚本。您需要使用此命令启用它set-executionpolicy remotesigned官方文档中remotesigned介绍了其他选项。
火神乌鸦

读者请注意,此ps脚本是该powershell -c start -verb runas program.exe功能的包装。另请注意,您无法使用cmd提示(本机)进行这样的提升。Powershell是最好的本机选项。
jiggunjer '16

可以在cmd.exe中代替Powershell env进行相同的操作吗?powershell不使用clink进行计算,没有clink窗口也不进行计算...
PJJ

20

如果您是在Windows上执行此操作,则除了几个其他答案中提到的“运行方式”命令外,还可以使用鼠标来执行此操作。

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

您还可以从Microsoft下载更高级的RunAs版本,称为ShellRunAs,它以命令行和图形方式增强了内置RunAs命令的​​功能,包括保存帐户凭据。


4

有一个巧克力包装,​​方便的名称为sudo。您可以使用以下命令以Chocolatey安装该软件包:

choco install -y sudo

然后,无论您使用什么Windows / MS Shell,都可以sudo按预期使用。


3

Surun是免费的开放源代码应用程序,它允许某些程序以管理权限运行,而无需提供密码而无需更改用户注册表或修改环境变量。

当我使用Windows XP时,此应用程序对我有很大帮助。Beta在Windows 7下工作。


苏伦做得很好。但是有时在Windows 8和8.1下,其默认设置并不理想。因为它替代了Windows的运行方式功能,所以您无法在开始屏幕上单击鼠标右键来启动命令提示符。

3

您可能已经发现,runas可以让您以其他用户身份运行,但是它无法进行提升,并且不会传递当前目录,环境变量或长命令行。

Hamilton C shell使用真正的su和sudo解决了这一问题。su允许您以其他用户身份运行命令;sudo(实际上是su的别名)使您可以运行提升权限的命令。您也可以同时以不同用户身份提升运行权限。当前目录,环境变量和长命令行通过在调用者上下文中运行的su与自身副本之间的共享内存握手方式传递,作为与新凭据的插入而运行,然后启动该子凭据。完全公开:我是作者。


1

sudoCygwin mintty终端的有效替代品是将以下脚本放置在用户的PATH中:

$!/bin/bash
cygstart --action=runas mintty -e `which bash` -lc \"$@\"

对我来说,这是唯一可行的替代提升的程序等特权vimcygrunsrv同时在Windows终端下工作。


1

该脚本可以完成以下任务:

@echo Set objShell = CreateObject("Shell.Application") > %temp%\sudo.tmp.vbs
@echo args = Right("%*", (Len("%*") - Len("%1"))) >> %temp%\sudo.tmp.vbs
@echo objShell.ShellExecute "%1", args, "", "runas" >> %temp%\sudo.tmp.vbs
@cscript //NoLogo %temp%\sudo.tmp.vbs

将其另存为,sudo.cmd然后将其添加到您的PATH中

注意:runas在这种情况下,“以管理员身份运行”而不是“以其他用户身份运行”是指

从这里获取,并进行了稍微的编辑以从输出中删除cscript.exe标头


1
这将创建一个新的控制台。sudo'd命令完成后,新窗口将消失-因此,您甚至无法读取输出。
jiggunjer '16

可悲的是。但是它可以用于一些基本命令(复制),GUI工具或打开admin cmd。
Charles Milette

1

我认为最简单的解决方案是利用Powershell进行工作,该工作具有可移植性,并会提示用户使用UAC。

您可以在任何shell(cmd或powershell)中运行它

powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"

0

以下vbs脚本为我完成了窍门。我穿上了C:\Windows\System32

Set objArgs = WScript.Arguments
exe = objArgs(0)
args = ""
IF objArgs.Count >= 2 Then
   args = args & objArgs(1)
End If
For it = 2 to objArgs.Count - 1
   args = args & " " & objArgs(it)
Next
Set objShell = CreateObject( "WScript.Shell")
windir=objShell.ExpandEnvironmentStrings("%WINDIR%")
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute exe, args, "", "runas", 1
set objShellApp = nothing

在命令提示符下使用的示例 sudo net start service

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.