題 Windows有“sudo”命令嗎?


我總是在Windows計算機上使用非管理員帳戶。有時我需要安裝需要管理員訪問權限的程序。由於我主要使用Windows命令提示符,是否有Windows命令升級權限,類似於Linux終端命令 sudo


422
2017-09-17 09:24


起源


我相信你正在尋找的術語是“提升”訪問。即使您的憑據具有管理員權限,在您“sudo”命令之前,憑據下的進程也沒有管理員權限。在Windows中,他們稱之為“提升”。 - surfasb
只是用 su 和你的命令。它打開以管理員身份運行的PowerShell的新實例。 - IGRACH
@IGRACH不在我的powershell上...... - jiggunjer
我用這個 doskey sudo= runas /user:Administrator "cmd /k cd \"%cd%\" & $*" - William


答案:


運行方式 命令。

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

趕緊跑:

runas /noprofile /user:Administrator cmd 

以管理員身份啟動命令shell


258
2017-09-17 09:29



您可能會發現要加載配置文件(例如包括環境變量)以供任何擴展使用。在這種情況下放棄 /noprofile。 - Richard
這不適合我。輸入密碼後,命令提示符將關閉。 - Jonas
這不是要求管理員的密碼? sudo要求 您的 密碼! - n611x007
不幸的是,這已經過時了。 Runas 僅在不同的憑證集下運行命令。即使您的憑據具有管理員權限,也不意味著憑據下的所有進程都以管理員身份運行。 - surfasb
由於runas無法繞過UAC,因此“過時”為+1。而是按Windows按鈕,鍵入cmd,然後按Ctrl + Shift + Enter。 - mellow-yellow


我發現了 提升 今天哪個 “執行具有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".

Elevate的目的不是解決或繞過UAC(用戶帳戶控制),而是使用它。只要在那裡啟用UAC 具有 在某種程度上提示 一些 指出這個過程。如果你需要完全擺脫提示你必須 禁用UAC

痛苦點提升緩解是將特定進程從非特權外殼升級,然後繼續正常進行。如果沒有這個,您需要啟動特權命令提示符 右鍵單擊>“以管理員身份運行”在嘗試特權命令之前,這不容易編寫腳本。


115
2018-04-12 06:42



這與secpol.msc中的“提升而不提示”完美配合。他們一起做同樣的事情 %wheel ALL=(ALL) NOPASSWD: ALL 在sudo。 - sayap
@sayap,為了清楚,你的意思是: ss64.com/nt/syntax-uac.html? - matt wilkie
我發現提升(v1.3.0)的唯一問題是它不會從正在提升的程序中返回錯誤代碼。 - Ken
Sudo.bat: @elevate %* =>利潤! - Joe DF
很高興提到它是一個外部實用程序,缺少OOTB。 - Hi-Angel


你可以使用 運行方式 命令有點類似,或者你可以查看 sudo for Windows 項目結束 SourceForge上 這會添加一個sudo命令。

差異很微妙:

假設您有兩個用戶。 Bob是普通用戶,James是管理員。

如果您以Bob身份登錄並使用“runas james acommand”命令運行,就好像它是由James運行的,所以它訪問James的用戶設置,任何用戶更改都會進入James 我的文件 &設置文件夾等。因此,如果您正在安裝應用程序,那麼它將作為James而不是Bob安裝。

另一方面,如果Bob執行“sudo acommand”命令仍然以Bob身份運行,但具有提升的權限 - 就像Linux sudo命令一樣。要防止任何用戶能夠sudo,您必須定義一個sudoers用戶組,其中包含有權使用sudo提升權限的普通用戶列表。用戶仍需在提升前提供憑據。

有時差異並不重要,有時它是,並且我發現兩個命令都很有用。


66
2017-09-17 09:28



你確定嗎?當我在ubuntu中運行sudo時,如果我當前的主題是在 ~/.themes 然後sudo-ed應用程序將無法訪問該主題,因為它不在 /home/root/.themes,並將使用默認的醜陋gtk主題。 - hasen
@hasen j - 你的問題只是因為〜/ .themes在命令運行之前進行評估(因此在它切換到root之前)。 - Jared
另一個解決方案,除了在GitHub上託管,是windosu: github.com/tehsenaus/windosu 我剛剛發現它,它似乎工作得很好。最喜歡的是它的安裝非常簡單。只需“npm install -g windosu”。 - Venryx


你也可以使用 腳本提升PowerToys


39
2017-09-17 13:11



太棒了 - 正是我想要的。我不想運行,因為命令具有不同的用戶,只能以提升的權限運行它。 - orip
這個問題恰到好處的解決方案!誰想要Runas的語法混亂? - Stabledog
我經常希望提升命令內置於窗口中。這是一個很棒的工具。 - nhinkle♦
現在有一個 Elevation PowerToys系列 由同一作者從中 創建自升式腳本 特別相關。 - matt wilkie
@barlop當然不是。那會破壞UAC的目的。 - nhinkle♦


如果您準備切換到備用控制台,那就有了 ConEmu (我是作者)。它的一個功能 - 能夠在一個ConEmu窗口中運行高架和非高架標籤。選項卡也可以使用不同的憑據啟動。

為了方便用戶,有批處理文件 csudo.cmd (可以很容易地採用bash)。閱讀完整說明 項目的維基。簡而言之,例如,當您從現有的非提升選項卡運行某些命令時

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

ConEmu將開始 dism 在新的提升控制台/選項卡中(在Vista中具有前面的UAC提示或在XP中具有登錄框)。

默認情況下 csudo 在拆分中啟動新控制台(可能是通過編輯更改 csudo.cmd 內容)。

當然,您可以將其重命名為 sudo.cmd 如果你喜歡“經典” sudo 字。

sudo in ConEmu/Windows


26
2017-10-26 07:52



csudo很久以前就被收錄在ConEmu發行版中。根本不需要鏈接。 - Maximus
這裡的問題是新的控制台選項卡在sudo'd命令後變得無法使用。所以你不能繼續在高架標籤中工作,只需得到一個 press enter or esc to exit 信息。 - jiggunjer
你當然不能。即使在Unix上,你也會回到非高架終端 sudo 命令完成了它的工作!你走錯了路。 - Maximus
1)如果你要打開一個新的窗口或標籤,你可以保留它,讓它 用戶 選擇是否要繼續。 2)在我的ubuntu上,我不必每次都去sudo,我認為提升會持續幾分鐘。 3)這個應用程序有一百萬個選項,但對此沒有任何意義?也許我被寵壞了。 - jiggunjer


快速方法:

添加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. 擊中 輸入

它將永久啟用 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

23
2017-08-28 10:36



我喜歡這個問題的powershell解決方案。這必須是提升某些東西的最簡單方法。現有的.bat文件可以很容易地轉換為POSH - Mitchell Skurnik
在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 描述於 官方文件。 - vulcan raven
讀者註意到這個ps腳本是一個包裝器 powershell -c start -verb runas program.exe 功能。另請注意 無法提升 像這樣使用cmd提示符(原生)。 Powershell是最好的原生選擇。 - jiggunjer


如果您在Windows上執行此操作,那麼除了其他幾個答案中提到的Run As命令之外,還有一些方法可以使用鼠標執行此操作。

如果你按下了 轉移 右鍵單擊Windows中的大多數可執行文件時,您應該注意到一些更高級的選項。其中一個是“Run As...“選項(我認為它被稱為”Run As Administrator“從Vista開始)。

您還可以從Microsoft下載更高級的RunAs版本,名為 ShellRunAs,這在命令行和圖形模式下都具有內置RunAs命令的​​增強功能,包括允許您保存帳戶憑據


20
2017-09-17 11:22





蘇潤 是一個免費的開源應用程序,它允許某些程序以管理權限運行,無需在不更改用戶註冊表或修改環境變量的情況下提供密碼。

當我使用Windows XP時,這個應用程序對我幫助很大。 Beta版 在Windows 7下運行。


3
2017-11-17 15:24



蘇潤做得很好。但有時在Windows 8和8.1下,其默認值並不理想。因為它取代了Windows的run as function,所以在右鍵單擊開始屏幕時無法啟動命令提示符。 - Wolf


正如您可能已經發現的那樣,runas將允許您作為另一個用戶運行,但它無法執行提升,並且它不會傳遞當前目錄,環境變量或長命令行。

漢密爾頓C殼 用真正的su和sudo解決這個問題。 su允許您以另一個用戶身份運行命令; sudo(實際上是su的別名)允許你運行一個提升的命令。您也可以同時執行這兩項操作,作為其他用戶進行提升。當前目錄,環境變量和長命令行通過在調用者上下文中運行的su與作為插入的自身副本之間的共享內存握手傳遞,然後使用新憑據啟動子進程。完全披露:我是作者。


3
2017-09-06 15:01





這個腳本完成了這項工作:

@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
2018-01-10 21:08



這將創建一個新的控制台。 sudo'd命令完成後,新窗口將消失 - 因此您甚至無法讀取輸出。 - jiggunjer
可悲的是,是的。但它可用於一些基本命令(複製),GUI工具或打開管理cmd。 - Charles Milette