มีคำสั่ง 'sudo' สำหรับ Windows หรือไม่


449

ฉันมักจะทำงานกับบัญชีที่ไม่ใช่ผู้ดูแลระบบบนคอมพิวเตอร์ Windows ของฉัน บางครั้งฉันต้องติดตั้งโปรแกรมที่ต้องมีการเข้าถึงของผู้ดูแลระบบ ขณะที่ฉันใช้พรอมต์คำสั่งของ Windows เป็นส่วนใหญ่มีคำสั่ง Windows เพื่อเลื่อนระดับสิทธิพิเศษเหมือนกับคำสั่งเทอร์มินัล Linux sudoหรือไม่


7
ฉันเชื่อว่าคำที่คุณต้องการคือการเข้าถึง "ที่ยกระดับ" แม้ว่าข้อมูลประจำตัวของคุณจะมีสิทธิ์ผู้ดูแลระบบกระบวนการภายใต้ข้อมูลรับรองของคุณจะไม่มีสิทธิ์ของผู้ดูแลระบบจนกว่าคุณจะ "sudo" คำสั่ง ใน Windows พวกเขาเรียกมันว่า "ยกระดับ"
surfasb

7
@IGRACH ไม่ได้อยู่ใน PowerShell ของฉัน ...
jiggunjer

2
ฉันใช้สิ่งนี้doskey sudo= runas /user:Administrator "cmd /k cd \"%cd%\" & $*"
William

1
ลองใช้เครื่องมือwsudoa- sudolike ของฉันสำหรับ Windows ที่มีให้เป็นแพ็คเกจ Chocolatey
noseratio

คำตอบ:


267

runasคำสั่ง

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

เพิ่งรัน:

runas /noprofile /user:Administrator cmd 

เพื่อเริ่มเชลล์คำสั่งในฐานะผู้ดูแลระบบ


22
คุณอาจพบว่าคุณต้องการโหลดโปรไฟล์ (เช่นรวมถึงตัวแปรสภาพแวดล้อม) สำหรับการใช้งานแบบขยาย /noprofileซึ่งในกรณีที่ลดลง
ริชาร์ด

6
มันไม่ทำงานสำหรับฉัน หลังจากฉันพิมพ์รหัสผ่านแล้วพรอมต์คำสั่งจะถูกปิด
Jonas

55
นี่ไม่ถามรหัสผ่านของผู้ดูแลระบบใช่ไหม sudo กำลังขอรหัสผ่านของคุณ !
n611x007

15
น่าเสียดายที่นี่ล้าสมัยไปแล้ว Runasเพียงรันคำสั่งภายใต้หนังสือรับรองชุดอื่น แม้ว่าข้อมูลรับรองของคุณจะมีสิทธิ์ผู้ดูแลระบบ แต่ก็ไม่ได้หมายความว่ากระบวนการทั้งหมดภายใต้ข้อมูลรับรองของคุณทำงานในฐานะผู้ดูแลระบบ
surfasb

12
+1 สำหรับ "ล้าสมัย" เนื่องจาก runas ไม่สามารถข้าม UAC ได้ ให้กดปุ่ม Windows แล้วพิมพ์ cmd แล้วกด Ctrl + Shift + Enter
สีเหลืองอ่อน

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".

จุดประสงค์ของการยกระดับไม่ใช่เพื่อหลีกเลี่ยงหรือเลี่ยงผ่าน UAC (การควบคุมบัญชีผู้ใช้) แต่เพื่อทำงานกับมัน ตราบใดที่มีการใช้งาน UAC มีมีจะเป็นชนิดของพรอมต์บางที่บางจุดในกระบวนการ หากคุณจำเป็นต้องได้รับการกำจัดกระตุ้นทั้งหมดที่คุณต้องปิดการใช้งาน UAC

จุดปวดยกระดับ alleviates กำลังเพิ่มกระบวนการเฉพาะจากเปลือกที่ไม่มีสิทธิพิเศษแล้วดำเนินการตามปกติ หากไม่มีสิ่งนี้คุณจะต้องเริ่มพร้อมท์คำสั่งพิเศษด้วยการคลิกขวา> "Run as Administrator"ซึ่งไม่สามารถสคริปต์ได้อย่างง่ายดายก่อนที่จะพยายามใช้คำสั่งสิทธิพิเศษ


5
สิ่งนี้จะสมบูรณ์แบบด้วย "ยกระดับโดยไม่ต้องแจ้ง" ใน secpol.msc ร่วมกันพวกเขาทำเช่นเดียวกับ%wheel ALL=(ALL) NOPASSWD: ALLใน sudo
sayap

2
@sayap เพื่อให้ชัดเจนคุณหมายถึงสิ่งนี้: ss64.com/nt/syntax-uac.htmlหรือไม่
matt wilkie

5
ปัญหาเดียวที่ฉันพบกับการยกระดับ (v1.3.0) คือมันไม่ได้ส่งคืนรหัสข้อผิดพลาดจากโปรแกรมที่ยกระดับ
เคน

4
Sudo.bat: @elevate %*=> ผลกำไร!
Joe DF

10
จะดีที่จะพูดถึงว่ามันเป็นยูทิลิตี้ภายนอกขาด OOTB
Hi-Angel

67

คุณสามารถใช้คำสั่งrunasซึ่งคล้ายกันหรือคุณสามารถตรวจสอบโครงการsudo for Windows ได้ที่SourceForgeซึ่งเพิ่มคำสั่ง sudo

ความแตกต่างนั้นบอบบาง:

สมมติว่าคุณมีผู้ใช้สองคน Bob เป็นผู้ใช้ทั่วไปและ James เป็นผู้ดูแลระบบ

หากคุณเข้าสู่ระบบในฐานะ Bob และใช้ "runas james acommand" คำสั่งจะถูกเรียกใช้ราวกับว่ามันถูกเรียกใช้โดย James ดังนั้นจึงเข้าถึงการตั้งค่าผู้ใช้ของ James และการเปลี่ยนแปลงของผู้ใช้จะเข้าสู่โฟลเดอร์James My Documents & settings เป็นต้น กำลังติดตั้งแอปพลิเคชันบอกว่ามันจะถูกติดตั้งเป็นเจมส์ไม่ใช่บ็อบ

หากในทางตรงกันข้าม Bob ทำ "คำสั่ง sudo acommand" คำสั่งจะยังคงทำงานเหมือน Bob แต่ด้วยสิทธิ์ระดับสูง - เช่นเดียวกับคำสั่ง Linux sudo เพื่อป้องกันไม่ให้ผู้ใช้ใด ๆ สามารถ sudo คุณต้องกำหนดกลุ่มผู้ใช้ sudoers ที่มีรายชื่อผู้ใช้ปกติที่ได้รับอนุญาตให้ยกระดับการใช้ sudo ผู้ใช้ยังคงต้องให้ข้อมูลประจำตัวก่อนที่จะยกระดับ

บางครั้งความแตกต่างนั้นไม่สำคัญบางครั้งก็เป็นและฉันพบว่าทั้งสองคำสั่งนั้นมีประโยชน์


2
คุณแน่ใจไหม? เมื่อฉันเรียกใช้ sudo ใน ubuntu ถ้าธีมปัจจุบันของฉันอยู่ใน~/.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

ทางออกที่ถูกต้องสำหรับปัญหานี้แน่นอน! ใครต้องการ Runas ที่มีรูปแบบยุ่ง ๆ ?
Stabledog

1
ฉันมักจะต้องการคำสั่งยกระดับที่ถูกสร้างขึ้นในหน้าต่าง มันเป็นเครื่องมือที่ยอดเยี่ยม
nhinkle

ตอนนี้มีการรวบรวม Elevation PowerToysโดยผู้เขียนคนเดียวกันซึ่งการสร้างสคริปต์การยกระดับตนเองนั้นมีความเกี่ยวข้องเป็นพิเศษ
แมตต์วิลคี

1
@barlop ไม่แน่นอน ที่จะเอาชนะวัตถุประสงค์ของ UAC
nhinkle

29

หากคุณพร้อมที่จะเปลี่ยนเป็นคอนโซลทางเลือกนั่นคือConEmu (ฉันเป็นผู้เขียน) หนึ่งในคุณสมบัติของมัน - ความสามารถในการเรียกใช้ทั้งแท็บที่ยกระดับและไม่ยกระดับในหน้าต่าง ConEmu เดียว แท็บอาจเริ่มด้วยข้อมูลประจำตัวที่แตกต่างกันเช่นกัน

เพื่อความสะดวกสบายของผู้ใช้มีชุดไฟล์csudo.cmd (ซึ่งอาจนำมาใช้เพื่อทุบตีได้อย่างง่ายดาย) อ่านรายละเอียดเต็มรูปแบบในวิกิพีเดียของโครงการ โดยย่อเมื่อคุณเรียกใช้คำสั่งจากแท็บที่ไม่มีการยกระดับที่มีอยู่ตัวอย่างเช่น

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

ConEmu จะเริ่มต้นdismในคอนโซล / แท็บที่ยกระดับใหม่ (ด้วยพรอมต์ UAC ก่อนหน้าใน Vista หรือกล่องเข้าสู่ระบบใน XP)

โดยค่าcsudoเริ่มต้นเริ่มคอนโซลใหม่ในการแยก (อาจมีการเปลี่ยนแปลงผ่านการแก้ไขcsudo.cmdเนื้อหา)

และแน่นอนคุณอาจเปลี่ยนชื่อเป็นsudo.cmdหากคุณชอบsudoคำว่า"คลาสสิค"

sudo ใน ConEmu / Windows


1
csudo นานมาแล้วรวมอยู่ในการกระจาย ConEmu ไม่จำเป็นต้องมีลิงค์
Maximus

ปัญหานี่คือแท็บคอนโซลใหม่จะใช้ไม่ได้หลังจากคำสั่ง sudo'd ดังนั้นคุณจะไม่สามารถทำงานต่อในแท็บที่ยกระดับได้เพียงแค่รับpress enter or esc to exitข้อความ
jiggunjer

1
แน่นอนคุณไม่สามารถ แม้กระทั่งบน Unix คุณจะกลับไปที่เทอร์มินัลที่ไม่ได้ยกระดับหลังจากsudoคำสั่งทำงานได้สำเร็จ! คุณกำลังผิดทาง
Maximus

1
1) หากคุณจะเปิดหน้าต่างหรือแท็บใหม่ที่คุณอาจเก็บไว้ให้ผู้ใช้เลือกหากต้องการดำเนินการต่อ 2) บน Ubuntu ของฉันฉันไม่ต้อง sudo ทุกครั้งการยกระดับนั้นใช้เวลาไม่กี่นาที 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

วิธีการเรียนรู้ที่ยาวนาน:

หมายเหตุ: ฉันผสมสคริปต์จากบทความทั้งสองเพื่อสร้างสคริปต์ดังกล่าว ค่อนข้างวางสคริปต์ใน notepad ด้วยตนเองฉันเพิ่ม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

มีข้อผิดพลาดนี้ใน 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/) ตามค่าเริ่มต้นสคริปต์ PowerShell จะถูกปิดใช้งานในการติดตั้ง Windows ใด ๆ คุณต้องเปิดใช้งานด้วยคำสั่งset-executionpolicy remotesignedนี้ ตัวเลือกอื่น ๆ นอกเหนือจากremotesignedที่อธิบายไว้ในเอกสารอย่างเป็นทางการ
Raven vulcan

ผู้อ่านทราบว่าสคริปต์ ps นี้เป็น wrapper สำหรับการใช้powershell -c start -verb runas program.exeงาน นอกจากนี้โปรดทราบว่าคุณไม่สามารถยกระดับเช่นนี้ได้ด้วยพรอมต์คำสั่ง (โดยกำเนิด) Powershell เป็นตัวเลือกที่ดีที่สุด
jiggunjer

สามารถทำได้ใน cmd.exe แทน powershell env? PowerShell ไม่คำนวณด้วยเสียงกริ๊กและไม่มีหน้าต่างเสียงกริ๊กไม่ได้คำนวณเลย ...
PJJ

20

หากคุณกำลังทำสิ่งนี้บน Windows นอกเหนือจากคำสั่ง Run As ตามที่กล่าวไว้ในสองคำตอบอื่น ๆ ก็มีวิธีการทำเช่นนี้ด้วยเมาส์

หากคุณกดShiftปุ่มค้างไว้ในขณะที่คลิกขวาที่ไฟล์ปฏิบัติการส่วนใหญ่ใน Windows คุณควรสังเกตเห็นตัวเลือกขั้นสูงอีกสองสามตัว หนึ่งในนั้นคือRun As...ตัวเลือก "" (ฉันคิดว่ามันเรียกว่า " Run As Administrator" จาก Vista เป็นต้นไป)

นอกจากนี้คุณยังสามารถดาวน์โหลด RunAs รุ่นขั้นสูงจาก Microsoft ชื่อShellRunAsซึ่งมีการปรับปรุงคำสั่ง RunAs ในตัวทั้งในบรรทัดคำสั่งและโหมดกราฟิกรวมถึงการให้คุณบันทึกข้อมูลบัญชี


4

มีแพคเกจ chocolatey มันมีชื่อสะดวกsudo คุณสามารถติดตั้งแพ็คเกจด้วย chocolatey โดยใช้คำสั่งนี้:

choco install -y sudo

จากนั้นในเชลล์ Windows / MS ที่คุณต้องใช้คุณสามารถใช้sudoตามที่คาดไว้


3

Surunเป็นแอปพลิเคชั่นโอเพนซอร์ซฟรีที่อนุญาตให้บางโปรแกรมทำงานด้วยสิทธิ์ของผู้ดูแลระบบโดยไม่ต้องให้รหัสผ่านโดยไม่ต้องเปลี่ยนรีจีสทรีผู้ใช้หรือแก้ไขตัวแปรสภาพแวดล้อม

เมื่อฉันใช้ Windows XP แอพนี้ช่วยฉันได้มาก เบต้าทำงานภายใต้ Windows 7


surun ทำได้ดีมาก อย่างไรก็ตามบางครั้งภายใต้ Windows 8 และ 8.1 ค่าเริ่มต้นของมันไม่เหมาะ เนื่องจากเป็นการแทนที่การทำงานของ Windows เป็นฟังก์ชันคุณจึงไม่สามารถเริ่มต้นพรอมต์คำสั่งได้ด้วยการคลิกขวาบนหน้าจอเริ่มต้น
Wolf

3

ในขณะที่คุณอาจค้นพบ runas จะช่วยให้คุณเรียกใช้ในฐานะผู้ใช้อื่น แต่ไม่สามารถยกระดับและไม่ผ่านไดเรกทอรีปัจจุบันตัวแปรสภาพแวดล้อมหรือบรรทัดคำสั่งยาว

แฮมิลตันซีเชลล์แก้ปัญหาด้วยซูและ sudo ของแท้ su ให้คุณเรียกใช้คำสั่งในฐานะผู้ใช้รายอื่น sudo (อันที่จริงแล้วนามแฝงถึง su) ให้คุณเรียกใช้คำสั่งยกระดับ นอกจากนี้คุณยังสามารถทำทั้งสองอย่างได้ด้วยการยกระดับเป็นผู้ใช้อื่น ไดเร็กทอรีปัจจุบันตัวแปรสภาวะแวดล้อมและบรรทัดรับคำสั่งแบบยาวจะถูกส่งผ่านโดย handshake หน่วยความจำแบบแบ่งใช้ระหว่างการรันในบริบทของผู้เรียกและสำเนาของตัวเองที่ทำงานเป็น interlude พร้อมกับหนังสือรับรองใหม่ที่เริ่มต้นชายด์ การเปิดเผยแบบเต็ม: ฉันเป็นผู้เขียน


1

การทำงานsudoแทนที่minttyเทอร์มินัลของ Cygwin จะวางสคริปต์ต่อไปนี้ใน PATH ของผู้ใช้:

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

สำหรับฉันนี่คือการแทนที่ที่ทำงานได้เพียงอย่างเดียวเพื่อยกระดับสิทธิ์ของโปรแกรมเช่นvimหรือcygrunsrvขณะที่ทำงานใน terminal บน 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

น่าเศร้าใช่ แต่มันสามารถใช้สำหรับคำสั่งพื้นฐาน (คัดลอก), เครื่องมือ GUI หรือการเปิดผู้ดูแลระบบ cmd
Charles Milette

1

ทางออกที่ง่ายที่สุดในมุมมองของฉันคือการใช้ประโยชน์จาก PowerShell เพื่อทำงานซึ่งเป็นแบบพกพาและจะแจ้งให้ผู้ใช้โดยใช้ UAC

คุณสามารถรันสิ่งนี้ในเชลล์ใด ๆ (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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.