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

评论

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

@IGRACH不在我的Powershell上...

我使用此doskey sudo = runas / user:管理员“ cmd / k cd \”%cd%\“&$ *”

gsudo可在cmd / powershell / windows终端中使用,并具有一些不错的功能。

现在这可能是个老新闻,但是我在启用Windows-subsystem-for-linux的情况下运行Windows 10。对于我的wsl终端,我使用Ubuntu。我从没想过我会以linux用户的身份去追求这样的东西,但是它实际上非常方便,并且可以与VS代码一起很好地使用。

#1 楼

runas命令。

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


只需运行:

runas /noprofile /user:Administrator cmd 


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

评论


您可能会发现想要加载配置文件(例如包含环境变量)以进行任何扩展使用。在这种情况下,请删除/ noprofile。

–理查德
09年9月17日在9:38

这对我不起作用。输入密码后,命令提示符将关闭。

–乔纳斯(Jonas)
2010-12-09 13:44

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

–n611x007
2012-09-18 8:42



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

– surfasb
2014年1月25日,0:59

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

–醇黄色
16年1月22日在12:06

#2 楼

提升-“执行具有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。

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

与“无提示地提升”有效在secpol.msc中。总之,它们与sudo中的%wheel ALL=(ALL) NOPASSWD: ALL相同。

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

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

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

Elevate是Johannes Passing编写的第三方工具。这是一个11kb的下载文件,可移植(无需安装):http://code.kliu.org/misc/elevate/

评论


这与secpol.msc中的“在没有提示的情况下提升”非常完美。它们在一起的作用与%wheel ALL =(ALL)NOPASSWD:sudo中的ALL相同。

–sayap
2012年2月20日上午9:40

@sayap,请澄清一下,您的意思是:ss64.com/nt/syntax-uac.html?

–马特·威尔基
2012-2-20在18:45

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

–肯
13年8月14日在18:41

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

–乔DF
2014年12月12日5:06



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

– Hi-Angel
16 Dec 27 '16:18

#3 楼

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

区别很细微:

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

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

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

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

评论


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

–hasen
09年11月19日在22:28

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

–讨厌
2011-12-15 18:52

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

– Venryx
17年6月6日在7:52



这是管理员中用户帐户的提升;须藤是另一回事。

–马西莫
1月13日10:12

@Massimo,您能解释一下其中的区别吗?

–西蒙·史蒂文斯(Simon P Stevens)
1月13日14:50

#4 楼

您也可以使用脚本高程PowerToys。

评论


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

–orip
2010-3-14在12:55

正是针对此问题的正确解决方案!谁想要Runas的语法混乱?

–稳定狗
10 Mar 29 '10在14:14

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

–nhinkle
2010年11月11日23:43

现在有同一位作者的Elevation PowerToys集合,与创建自提升脚本特别相关。

–马特·威尔基
2011年9月7日23:22

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

–nhinkle
2014年3月15日17:07

#5 楼

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

为了便于用户使用,有批处理文件csudo.cmd(可以轻松地用于bash)。阅读项目Wiki中的完整描述。简而言之,当您从现有的非高架选项卡运行一些命令时,例如,

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


ConEmu将在新的高架控制台/选项卡中启动dism(带有UAC提示符)

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

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



评论


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

– Maximus
2014年12月12日在8:16

问题出在sudo'd命令之后,新的控制台选项卡变得不可用。因此,您无法继续在提升的选项卡中工作,只需按Enter或esc键即可退出消息。

– Jiggunjer
16年1月17日在15:25

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

– Maximus
16年1月17日在17:45

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

– Jiggunjer
16 Jan 18'在2:31



#6 楼

快速方法:

添加sudo的三个步骤。


打开PowerShell。
复制以下脚本(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



按Enter。

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

用法:

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


学习:


阅读本文。
阅读评论。
看看Stephen的git仓库和自述文件。

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

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

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


评论


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

– Mitchell Skurnik
13年2月14日在18:05

在Windows 10上出现此错误:。 :无法加载文件C:\ Users \ User \ Documents \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1,因为在此系统上禁用了运行脚本。

–sowrov
15年11月19日在9:51



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

–火神乌鸦
15年11月22日在9:54

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

– Jiggunjer
16年1月17日在13:58



可以在cmd.exe中代替Powershell env进行相同的操作吗? Powershell不使用clink进行计算,没有clink则根本不进行计算...

– PJJ
19年2月26日在7:39

#7 楼

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

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

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

评论


这是管理员中用户帐户的提升;须藤是另一回事。

–马西莫
1月13日10:11

问题是关于提升命令! F.e.当检测到某些操作需要提升时,从批处理文件中获取。

– AnrDaemon
3月24日17:26

@AnrDaemon我惊讶于十年前我在这里留下的答案的相关性而感到惊讶!

–GAThrawn
3月30日16:23

#8 楼

我写了gsudo,这是Windows的sudo,感觉像*nix sudo,它具有一些杀手级功能:


在当前控制台中运行(附带),而不会破坏Tab键的自动完成功能。或添加-n以在新窗口中启动。
可靠地处理所有要在脚本上使用的方案。 (ExitCodes,StdIn / Out / Err重定向/捕获)
支持Cmd / PowerShell / PowerShell Core
凭据缓存:如果gsudo在几分钟内被调用了几次,则仅显示一次UAC弹出窗口。 />


用法

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

gsudo [options] {command} [arguments]
执行指定的具有较高权限的命令。

最相关的[options]



-n | --new在具有提升权限的新控制台中启动命令(并立即返回)。

-w | --wait强制等待进程结束(并返回退出代码)。

-s | --system以本地系统身份运行帐户(“ NT AUTHORITY \ SYSTEM”)。

--copyev在执行之前将所有环境变量复制到提升的会话。

安装


使用瓢:scoop install gsudo

使用巧克力色:choco install gsudo

手动安装

PowerShell -Command "Set-ExecutionPolicy RemoteSigned -scope Process; iwr -useb https://raw.githubusercontent.com/gerardog/gsudo/master/installgsudo.ps1 | iex"


或查看最新版本



评论


这看起来不错,但是它是否依赖于UAC图形提示符?我正在通过SSH登录,并希望某些完全在命令行模式下工作的东西。

–寡核苷酸
3月30日12:09

是。至少会出现一个UAC弹出窗口。

– Gerardo Grignoli
3月30日18:03

#9 楼

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

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

评论


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

–狼
15年1月15日在11:15

这是最好的答案,应该被接受。其他大多数答案都与管理员中用户帐户的提升有关:不是sudo。

–马西莫
1月13日在10:13



#10 楼

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

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

#11 楼

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

您可以在任何shell(cmd或powershell)中运行它
/>
powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"


#12 楼

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

 choco install -y sudo
 


然后在任何Windows /您必须使用MS shell,可以按预期使用sudo

评论


这是管理员中用户帐户的提升;须藤是另一回事。

–马西莫
1月13日10:11

#13 楼

Cygwin的sudo终端的一个可行的mintty替代品是将以下脚本放置在用户的PATH中:

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


对我来说,这是唯一可行的替代品,可提高程序特权,例如在Windows的终端上工作时,请执行vimcygrunsrv

#14 楼

该脚本可以完成此任务:

@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标头

评论


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

– Jiggunjer
16年1月17日在14:09

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

–Charles Milette
16年1月17日在18:04

这是管理员中用户帐户的提升;须藤是另一回事。

–马西莫
1月13日10:10

#15 楼

以下vbs脚本允许启动带有带高程参数的给定命令,并在有限的一组用例中模拟原始unix sudo命令的行为(它不会缓存凭据,也不能真正执行具有不同凭据的命令)。我将其放在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

评论


Downvoters:解释为什么以及什么对您不起作用。该脚本已经过测试,可以为我工作。

–ceztko
19年11月6日,19:56



这是管理员中用户帐户的提升;须藤是另一回事。

–马西莫
1月13日10:11

@Massimo当然将这个脚本称为sudo只是一个小小的命名滥用:它没有并且不会具有与原始sudo相同的功能,但是默认情况下,在Unix中,它将以超级用户(root)模拟来执行,前提是在sudoers,所以对我提供的示例的模仿非常清楚。在Windows中创建完整的sudo替代品时,不能访问Windows内部,也不能定义该命令可以做什么和不能做什么的明确语义。如果此快速且肮脏的脚本不起作用,则应找到其他解决方案

–ceztko
1月13日10:34

#16 楼

另一个选项是TakeCommand的START /ELEVATED …开关。

该套件的非交互式(TCC-RT)版本是免费提供的。
“ sudo.btm”批处理文件如下所示:

@START "" /ELEVATED %*


,该格式也支持sudo /wait <someprogram> /params

#17 楼

不久前,我创建了wsudo,这是一个类似于sudo的开源CLI工具,用于Windows以在当前目录的上下文中运行具有提升权限的程序或命令。它可以作为Chocolatey软件包免费提供。
我经常使用它来配置构建代理,管理诸如sfc /scannowdism /online /cleanup-image /restorehealth之类的东西,或者仅用于安装/更新我的本地Chocolatey软件包(例如wasudo cup all -y)。使用风险自负。
安装
choco install wsudo

必须已安装巧克力。
目的
wsudo是类似于Linux的sudo工具,Windows可以通过该工具调用程序。从非管理员Shell命令提示符处提升权限(以管理员身份),并保留其当前目录。
此实现不依赖于旧版Windows脚本宿主(CScript)。而是使用帮助程序PowerShell 5.1脚本来调用"Start-Process -Wait -Verb runAs ..." cmdlet。您的系统很可能已经安装了PowerShell 5.x,否则,系统会为您提供依赖项来安装它。
用法
wsudo在当前目录中运行具有提升权限的程序或内联命令。例如:
wsudo .\myAdminScript.bat 
wsudox "del C:\Windows\Temp\*.* && pause"
wasudo cup all -y
wasudox start notepad C:\Windows\System32\drivers\etc\hosts 

我经常从Windows运行框(Win + R)或通过在Windows资源管理器地址栏中输入wasudo Enter(Alt + D)来调用它。后者会在资源管理器的当前文件夹中打开一个管理命令提示符。
有关更多详细信息,请访问GitHub repro。