如何在Windows中运行'sudo'命令


92

我将如何在Windows中运行以下命令:

$ sudo django-admin.py startproject NEW


最好避免在Windows中使用终端命令。相反,请尝试在Eclipse + PyDev之类的IDE的帮助下进行相同的操作。它将使事情变得简单得多。
Pushpak Dagade 2012年

7
@Pushpak Dagade:总的来说,我不赞成您的评论,但是当我去打字时,我意识到这是堆栈溢出。这些是在Windows中使用终端的人。=)我的意思是,否则PowerShell可能不存在。
布伦特·里滕豪斯

2
另外,如果他正在创建脚本来自动执行任务怎么办?(是的,我知道您可以以特权用户身份运行THAT。)
Brent Rittenhouse

试试我的wsudo,它是Windows的类似于sudo的工具,可作为Chocolatey软件包使用。
noseratio

Answers:


97

sudoWindows中没有命令。最接近的等效项是“以管理员身份运行”。

您可以使用runas具有管理员信任级别的命令来执行此操作,也可以通过右键单击UI中的程序并选择“以管理员身份运行”来执行此操作。


4
您是否知道runas的行为因版本而异?我已经安装了Win7企业版,并且我尝试使用runas进行的所有组合都创建了没有管理员权限的新cmd
notNullGothik 2015年

4
Windows版Sudo(sudowin)允许授权用户使用自己的密码短语以提升的特权启动进程。与runas命令不同,Windows的Sudo保留用户的配置文件和所创建对象的所有权。您可以在这里获得它:sourceforge.net/projects/sudowin
Joe Bigler '18年

签出gsudostackoverflow.com/a/58753166/97471)。对于具有*nix sudo用户体验的Windows是一个sudo :允许在当前控制台内执行命令,并提供凭据缓存(仅一个UAC弹出窗口)。
Gerardo Grignoli

runas是管理员中用户帐户的提升;须藤是另一回事。这不应该是公认的答案。
Massimo

14

打开记事本并粘贴以下代码:

@echo off
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/c cd /d %CD% && %*'"
@echo on

然后,将文件另存为sudo.cmd。复制此文件并将其粘贴在PATH环境变量中,C:\Windows\System32或将路径添加sudo.cmd到PATH环境变量中。

当您打开命令提示符时,现在可以运行sudo start .

如果要在运行命令时使admin命令提示符窗口保持打开状态,请将记事本中的代码更改为此:

@echo off
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
@echo on

说明:

powershell -Command 运行powershell命令。

Start-Process 是启动过程的Powershell命令,在本例中为命令提示符。

-Verb RunAs 以管理员身份运行命令。

-Argument-List 使用参数运行命令。

我们的论据是'/c cd /d %CD% && %*'%*表示所有参数,因此,如果这样做sudo foo bar,它将在命令提示符下运行,foo bar因为参数为foo和bar,然后%*返回foo barcd /d %CD%是转到当前目录的命令。这将确保当您打开提升的窗口时,目录将与普通窗口相同。这&&意味着如果第一个命令成功,则运行第二个命令。

/c是命令完成后关闭该窗口中的CMD参数,并且/k是保持窗口打开CMD参数。

感谢亚当Plocher在当前目录代码停留。


这样做的一个问题是,一旦提升权限,您将不再位于当前文件夹中,而是进入C:\Windows\System32
noseratio

2
@noseratio是真的,看来将其更改为此将可以解决问题,但是:powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
Adam Plocher19年

@AdamPlocher,这可能有效,但如果命令行%*带有引号,则可能会出现问题。这就是为什么我创建wsudo基于PowerShell 的原因。
noseratio

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

您是否可以仅echo通过添加@到powershell行来跳过第一行和第三行?
nudl

9

所有答案都说明了如何在新的控制台主机中提升命令。

让我感到有趣的是,这些工具的行为都不像*nix sudo,允许在当前控制台内执行命令。

所以,我写道:gsudo

源代码https://github.com/gerardog/gsudo

安装

通过勺

  • 如果尚未安装,请安装它。然后:
scoop install gsudo

或通过Chocolatey

choco install gsudo

手动安装:

演示版

gsudo演示


8

我创建wsudo了一个sudo类似于开源的CLI工具,用于Windows 在当前目录的上下文中以提升的权限运行程序或命令。它可以作为Chocolatey包使用

我经常将它用于配置构建代理,诸如之类的管理工作sfc /scannowdism /online /cleanup-image /restorehealth或者仅用于安装/更新本地Chocolatey软件包。使用风险自负。

安装

choco install wsudo

Chocolatey必须已经安装。

目的

wsudo是一种sudo类似于Linux 的工具,用于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 

有关更多详细信息,请访问GitHub repro


2
感谢您发布“ wsudo”,这对我来说非常有用。我认为您的wsudo的优点是保持工作目录不一样。我找不到除wsudo以外的其他任何可以保持CWD的设备。我认为您应该在说明中强调这一点。非常感谢您的工作。
benok

3
让您知道的另一件事。您知道直接打开外壳程序的地址栏黑客吗?我通常使用此hack,但是当我想使用此hack提升外壳时,我感到非常沮丧。我试图找到许多替代方法,但没有用。我终于可以用“ wasudo [shell]”打开一个。我喜欢这个。再次感谢:-)
发出

3
@benok,我愿意,确实是一个方便的工具!很高兴wasudo为您提供便利。我本人主要生活在VSCode集成控制台终端中,所以我只在那输入wasudo:)下一个改进是继承环境vars
noseratio

@benok,您好,您可能也对我用于提高复制/粘贴/运行效率的新实用程序DevComrade感兴趣:)
noseratio






2

以下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


1
我们如何使脚本等待用户输入,以便我们可以读取Shell程序的输出?
艾哈迈德·哈贾尔

1
您的意思是交互式shell命令?好吧,您应该首先尝试确保启动的命令将等待返回。在这里似乎有可能。然后,您应该从shell对象获取输出并进行输出,我想这也是可能的。不过,不要指望在Unix中可以做的所有事情都是可能的。
ceztko '18

在Windows 10,它抛出第1行字符6语法错误
马丁布朗

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

1

我想我做了一些研究后尝试了以下步骤并成功

1.使用Powershell 3 安装独家新闻(iex(new-object net.webclient).downloadstring(' https://get.scoop.sh '))2.独家新闻--全局sudo 3.确保路径(C: \ Users \\ scoop \ shims和C:\ ProgramData \ scoop \ shims)添加到环境路径变量中。


1

对于Windows,没有sudo命令,也不需要放入$。为了通过Windows中的node.js命令提示符安装Angular CLI,我只是编写了npm install -g @ angular / cli,然后按Enter。工作正常。


0

以管理员身份打开控制台。右键单击命令提示符或bash-> more,然后选择“以管理员身份运行”


0

在Windows Powershell中,您可以使用带有选项的Start-Process命令-Verb RunAs来启动和提升进程。这是我的sudo函数示例:

function sudo {
    Start-Process @args -verb runas
}

例如:在记事本中以管理员身份打开主机文件

sudo notepad C:\Windows\System32\drivers\etc\hosts

0

sudo对窗口用户使用此命令可为您提供以下建议:

首先,安装scoop软件包管理工具并执行以下命令:

在此处输入图片说明

然后使用scoop安装sudo命令:

在此处输入图片说明

最后,您可以使用以下命令执行命令sudo

在此处输入图片说明


0

很高兴为您服务。

要执行sudo命令,请遵循以下步骤:

  1. 在C:\ Drive中创建一个文件夹env。
  2. 在名为bin的env文件夹内创建一个文件夹。
  3. 现在将C:\ env \ bin添加到PATH。
  4. 在C:\ env \ bin中创建文件sudo.bat。
  5. 使用记事本进行编辑并编写以下代码:-https:
    //gist.github.com/coder-examples/5ca6c141d6d356ddba4e356d63fb2c13

希望这个能对您有所帮助


该答案应包括批处理文件的文本,而不是因为链接腐烂而不依赖于站点外链接。答案还应包括免责声明,该脚本试图模仿sudo的粗略行为,但并不是真正的sudo(它是伪sudo)。
asky

0

要仅在非高架Powershell中以管理员身份运行命令,可以Start-Process直接使用,带有正确的选项,尤其是-Verb runas

它比复杂得多sudo,尤其是因为您不能仅仅将前一个命令与其他选项一起使用。您需要单独指定命令的参数。

这是一个示例,使用route命令更改网关:

这失败了,因为我们不在较高的PS中:

> route change 0.0.0.0 mask 0.0.0.0 192.168.1.3
The requested operation requires elevation.

接受UAC后,此方法将起作用:

> Start-Process route -ArgumentList "change 0.0.0.0 mask 0.0.0.0 192.168.1.3" -Verb runas

或需要cmd.exe以下命令的命令:

> Start-Process cmd -ArgumentList "/c other_command arguments ..." -Verb runas
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.