Apakah ada perintah 'sudo' untuk Windows?

448

Saya selalu bekerja pada akun non-administrator di komputer Windows saya. Terkadang saya perlu menginstal program yang memerlukan akses administrator. Karena saya kebanyakan menggunakan command prompt Windows, apakah ada perintah Windows untuk meningkatkan hak istimewa, mirip dengan perintah terminal Linux sudo?

ukanth
sumber
7
Saya percaya istilah yang Anda cari adalah akses "tinggi". Meskipun kredensial Anda memiliki izin admin, proses di bawah kredensial Anda tidak memiliki izin admin hingga Anda "sudo" perintah. Di Windows, mereka menyebutnya "elevate".
surfasb
7
@ ARRACH bukan pada powershell saya ...
jiggunjer
2
Saya menggunakan inidoskey sudo= runas /user:Administrator "cmd /k cd \"%cd%\" & $*"
William
1
Coba saya wsudo, sebuah sudoalat -seperti untuk Windows tersedia sebagai paket Cokelat.
noseratio

Jawaban:

266

The runas perintah.

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

Lari saja:

runas /noprofile /user:Administrator cmd 

untuk memulai shell perintah sebagai administrator

Davy Landman
sumber
22
Anda mungkin menemukan bahwa Anda ingin profil dimuat (mis. Termasuk variabel lingkungan) untuk setiap penggunaan jangka panjang. Dalam hal menjatuhkan /noprofile.
Richard
6
Ini tidak bekerja untuk saya. Setelah saya mengetik kata sandi, prompt perintah ditutup.
Jonas
55
bukankah ini menanyakan kata sandi Administrator? sudo meminta kata sandi Anda !
n611x007
15
Sayangnya, ini sudah usang. Runashanya menjalankan perintah di bawah set kredensial yang berbeda. Meskipun kredensial Anda memiliki izin admin, itu tidak berarti semua proses di bawah kredensial Anda dijalankan sebagai admin.
surfasb
12
+1 untuk "kedaluwarsa" karena runa tidak dapat mem-bypass UAC. Sebagai gantinya, tekan tombol Windows, ketik cmd, dan tekan Ctrl + Shift + Enter.
kuning mellow
125

Saya menemukan elevate hari ini yang "mengeksekusi perintah dengan elevasi hak istimewa UAC. Ini berguna untuk bekerja di dalam command prompt atau dengan file batch." Ini tidak sama dengan sudo, itu mengubah pengguna yang mengeksekusi ke Administrator, tetapi sintaksnya jauh lebih mudah digunakan daripada runas, dan itu dapat menyimpan direktori saat ini, memungkinkan penggunaan jalur relatif.

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

Tujuan Elevate bukan untuk mengatasi atau memintas UAC (Kontrol Akun Pengguna), tetapi untuk bekerja dengannya. Selama UAC diaktifkan ada memiliki menjadi beberapa jenis yang cepat pada beberapa titik dalam proses. Jika Anda harus membuang prompt, Anda harus menonaktifkan UAC .

Titik nyeri yang meningkat mereda adalah meningkatkan proses tertentu dari kulit yang tidak istimewa, dan kemudian melanjutkan seperti biasa. Tanpa ini, Anda perlu memulai prompt perintah istimewa dengan klik kanan> "Run as Administrator" , yang tidak dapat dengan mudah dituliskan, sebelum mencoba perintah istimewa.

matt wilkie
sumber
5
Ini berjalan sempurna dengan "Tinggikan tanpa diminta" di secpol.msc. Bersama-sama, mereka melakukan hal yang sama seperti %wheel ALL=(ALL) NOPASSWD: ALLpada sudo.
sayap
2
@sayap, hanya untuk menjadi jelas, maksud Anda ini: ss64.com/nt/syntax-uac.html ?
matt wilkie
5
Satu-satunya masalah yang saya temukan dengan elevate (v1.3.0) adalah tidak mengembalikan kode kesalahan dari program yang ditinggikan.
Ken
4
Sudo.bat: @elevate %*=> untung!
Joe DF
10
Akan menyenangkan untuk menyebutkan bahwa ini adalah utilitas eksternal, hilang OOTB.
Hi-Angel
67

Anda dapat menggunakan perintah runas yang agak mirip, atau Anda dapat memeriksa sudo untuk proyek Windows di SourceForge yang menambahkan perintah sudo.

Perbedaannya halus:

Katakanlah Anda memiliki dua pengguna. Bob adalah pengguna normal dan James adalah administrator.

Jika Anda masuk sebagai Bob dan menggunakan "runas james acommand" perintah dijalankan seolah-olah dijalankan oleh James, sehingga ia mengakses pengaturan pengguna James dan setiap perubahan pengguna masuk ke folder James My Documents & settings, dll. Jadi jika Anda menginstal aplikasi, katakanlah, itu akan diinstal sebagai James, bukan sebagai Bob.

Jika di sisi lain Bob melakukan "sudo acommand" perintah masih dijalankan sebagai Bob, tetapi dengan izin yang ditinggikan - seperti halnya perintah sudo Linux. Untuk mencegah pengguna agar tidak bisa menggunakan sudo, Anda harus mendefinisikan grup pengguna sudoers yang berisi daftar pengguna normal yang memiliki izin untuk meningkatkan menggunakan sudo. Pengguna masih harus memberikan kredensial sebelum peningkatan.

Kadang-kadang perbedaannya tidak penting, kadang-kadang, dan saya menemukan bahwa kedua perintah dapat bermanfaat.

Simon P Stevens
sumber
2
Apakah kamu yakin Ketika saya menjalankan sudo di ubuntu, jika tema saya saat ini dalam ~/.themesmaka aplikasi sudo-ed tidak akan dapat mengakses tema itu, karena itu tidak ada /home/root/.themes, dan akan menggunakan tema gtk jelek yang asli.
hasen
5
@ telah j - masalah Anda hanya karena ~ /. Tema mengevaluasi sebelum perintah dijalankan (dan dengan demikian sebelum beralih ke root).
Jared
1
Solusi lain, kecuali di-host di GitHub, adalah windosu: github.com/tehsenaus/windosu Saya baru saja menemukannya, dan sepertinya berfungsi dengan baik. Hal favorit adalah itu super mudah dipasang. Hanya "npm install -g windosu".
Venryx
39

Anda juga bisa menggunakan Script Elevation PowerToys .

Quog
sumber
Luar biasa - persis apa yang saya cari. Saya tidak ingin dijalankan karena perintah memiliki pengguna yang berbeda, hanya untuk menjalankannya dengan hak yang lebih tinggi.
orip
Solusi tepat untuk masalah ini! Siapa yang mau Runas dengan sintaksisnya yang berantakan?
Stabledog
1
Saya sering berharap perintah elevate dibuat di windows. Itu alat yang fantastis.
nhinkle
sekarang ada koleksi Elevation PowerToys oleh penulis yang sama dari mana Menciptakan Skrip Peningkatan Diri sangat relevan.
matt wilkie
1
@barlop tentu saja tidak. Itu akan mengalahkan tujuan UAC.
nhinkle
29

Jika Anda siap untuk beralih ke konsol alternatif, ada ConEmu (saya penulisnya). Salah satu fiturnya - kemampuan untuk menjalankan tab yang ditinggikan dan tidak ditinggikan di satu jendela ConEmu. Tab juga dapat dimulai dengan kredensial yang berbeda.

Untuk kenyamanan pengguna, ada batch-file csudo.cmd (yang dapat dengan mudah diadopsi ke bash). Baca deskripsi lengkap di wiki proyek . Singkatnya, ketika Anda menjalankan beberapa perintah dari tab non-elevated yang ada, misalnya

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

ConEmu akan mulai dismdi konsol / tab baru yang ditinggikan (dengan prompt UAC sebelumnya di Vista atau kotak Login di XP).

Secara default csudomulai konsol baru dalam split (dapat diubah melalui pengeditan csudo.cmdkonten).

Dan tentu saja Anda dapat mengubah nama menjadi sudo.cmdjika Anda suka sudokata "klasik" .

sudo di ConEmu / Windows

Maximus
sumber
1
csudo dulu sudah termasuk dalam distribusi ConEmu. Tidak diperlukan tautan sama sekali.
Maximus
Masalahnya di sini adalah tab konsol baru menjadi tidak dapat digunakan setelah perintah sudo'd. Jadi Anda tidak dapat terus bekerja di tab yang ditinggikan, cukup press enter or esc to exitpesan.
jiggunjer
1
Tentu saja kamu tidak bisa. Bahkan pada Unix Anda kembali ke terminal non-elevated setelah sudoperintah selesai. Anda salah jalan.
Maximus
1
1) jika Anda akan membuka jendela atau tab baru Anda mungkin menyimpannya, biarkan pengguna memilih jika mereka ingin melanjutkan. 2) Di ubuntu saya, saya tidak perlu sudo setiap kali, ketinggian saya kira beberapa menit. 3) aplikasi ini memiliki sejuta opsi, namun tidak ada artinya? Mungkin saya manja.
jiggunjer
24

Metode cepat:

Tiga langkah untuk menambahkan sudo.

  1. Buka PowerShell.

  2. Salin skrip berikut (Ctrl + C) dan tempel di 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. Hit Enter.

Ini akan secara permanen mengaktifkan sudoperintah di PowerShell.

Pemakaian:

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

Contoh:

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

Metode panjang untuk belajar:

Catatan: Saya menggabungkan skrip dari kedua artikel untuk membuat skrip yang disebutkan di atas. Alih-alih secara manual menempelkan skrip di notepad saya menambahkan Out-Filepernyataan untuk menyimpan ps1dan $profilefile dari skrip.

Tip: Jika Anda bukan penggemar popup UAC (seperti saya), simpan yang berikut ini di file * .reg dan jalankan:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000
gagak vulcan
sumber
1
Saya suka solusi PowerShell untuk pertanyaan ini. Ini harus menjadi cara termudah untuk meningkatkan sesuatu. File .bat yang ada dapat dengan mudah dikonversi ke POSH
Mitchell Skurnik
Mendapat kesalahan ini pada 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, lihat [artikel ini] (www.faqforge.com/windows/windows-powershell-running-scripts-is-disabled-on-this-system/). Secara default skrip PowerShell dinonaktifkan pada instalasi Windows apa pun. Anda harus mengaktifkannya dengan perintah ini set-executionpolicy remotesigned. Pilihan lain selain remotesigneddijelaskan dalam dokumen resmi .
gagak vulcan
Pembaca mencatat skrip ps ini adalah pembungkus untuk powershell -c start -verb runas program.exefungsionalitas. Perhatikan juga Anda tidak dapat meninggikan seperti ini dengan cmd prompt (secara native). Powershell adalah opsi asli terbaik.
jiggunjer
dapatkah hal yang sama dilakukan di cmd.exe dan bukan powershell env? PowerShell tidak menghitung dengan denting dan tanpa denting windows tidak menghitung sama sekali ...
PJJ
20

Jika Anda melakukan ini pada Windows, maka selain perintah Run As seperti yang disebutkan dalam beberapa jawaban lain, ada juga cara untuk melakukan ini dengan mouse.

Jika Anda menahan Shifttombol saat mengklik kanan pada sebagian besar file yang dapat dieksekusi di Windows, Anda akan melihat beberapa opsi lebih lanjut. Salah satunya adalah " Run As..." pilihan (saya pikir ini disebut " Run As Administrator" dari Vista dan seterusnya).

Anda juga dapat mengunduh versi RunA yang lebih maju dari Microsoft, yang disebut ShellRUNA , ini memiliki peningkatan atas perintah RunA bawaan , baik dalam command line dan mode grafis, termasuk membiarkan Anda menyimpan kredensial akun

GATambar
sumber
4

Ada paket cokelat untuknya dengan nama sudo yang nyaman . Anda dapat menginstal paket dengan chocolatey menggunakan perintah ini:

choco install -y sudo

Kemudian di shell Windows / MS apa pun yang harus Anda gunakan, Anda dapat menggunakan sudoseperti yang diharapkan.

ypid
sumber
3

Surun adalah aplikasi open-source gratis yang memungkinkan program tertentu berjalan dengan hak administratif, tanpa memberikan kata sandi tanpa mengubah registri pengguna atau memodifikasi variabel lingkungan.

Ketika saya menggunakan Windows XP aplikasi ini banyak membantu saya. Beta bekerja di bawah Windows 7.

diimdeep
sumber
surun melakukan pekerjaan dengan baik. Namun terkadang di bawah Windows 8 dan 8.1 standarnya tidak ideal. Karena itu menggantikan menjalankan Windows sebagai fungsi, Anda tidak dapat memulai prompt perintah dengan klik kanan pada layar mulai.
Wolf
3

Seperti yang mungkin telah Anda temukan, runas akan memungkinkan Anda berjalan sebagai pengguna lain tetapi tidak dapat melakukan elevasi dan tidak melewati direktori saat ini, variabel lingkungan atau baris perintah yang panjang.

Hamilton C shell memecahkannya dengan su dan sudo asli. su memungkinkan Anda menjalankan perintah sebagai pengguna lain; sudo (sebenarnya alias untuk su) memungkinkan Anda menjalankan perintah yang ditinggikan. Anda juga dapat melakukan keduanya, menjalankan peningkatan sebagai pengguna yang berbeda. Direktori saat ini, variabel lingkungan dan baris perintah panjang dilewatkan melalui jabat tangan memori bersama antara su yang berjalan dalam konteks pemanggil dan salinan dirinya yang berjalan sebagai selingan dengan kredensial baru yang kemudian memulai anak. Pengungkapan penuh: Saya penulis.

Nicole Hamilton
sumber
1

sudoPengganti yang berfungsi untuk minttyterminal Cygwin adalah menempatkan skrip berikut di PATH pengguna:

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

Bagi saya ini adalah satu-satunya pengganti yang layak untuk meningkatkan hak istimewa program seperti vimatau cygrunsrvsaat bekerja di terminal pada Windows.

Karafior
sumber
1

Skrip ini berfungsi:

@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

Simpan sebagai sudo.cmdlalu tambahkan ke PATH Anda

Catatan: runassarana dalam konteks ini "Jalankan sebagai administrator" dan bukan "Jalankan sebagai pengguna lain"

Diambil dari sini dan sedikit diedit untuk menghapus header cscript.exe dari output

Charles Milette
sumber
1
Ini menciptakan konsol baru. Jendela baru akan hilang setelah perintah sudo selesai - sehingga Anda bahkan tidak bisa membaca output.
jiggunjer
Sedih ya. Tetapi dapat digunakan untuk beberapa perintah dasar (copy), alat GUI, atau membuka admin cmd.
Charles Milette
1

Solusi paling sederhana dalam pandangan saya adalah untuk memanfaatkan PowerShell untuk melakukan pekerjaan, yang portabel dan akan meminta pengguna menggunakan UAC.

Anda bisa menjalankan ini di shell apa saja (cmd atau PowerShell)

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

Skrip vbs berikut membantu saya. Saya memakainyaC:\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

Contoh digunakan pada prompt perintah sudo net start service

ceztko
sumber