Cara menjalankan perintah 'sudo' di windows


96

Bagaimana saya menjalankan perintah berikut di windows:

$ sudo django-admin.py startproject NEW

?


Lebih baik menghindari penggunaan perintah terminal di Windows. Sebagai gantinya, coba lakukan hal yang sama dengan bantuan IDE, seperti Eclipse + PyDev. Ini akan membuat segalanya lebih sederhana.
Pushpak Dagade

8
@ Pushpak Dagade: Saya tidak setuju dengan komentar Anda, secara umum, tetapi ketika saya mulai mengetik ini saya menyadari ini adalah STACK OVERFLOW. Ini adalah orang-orang yang DO menggunakan terminal di Windows. =) Maksud saya, PowerShell kemungkinan besar tidak akan ada jika tidak.
Brent Rittenhouse

2
Juga, bagaimana jika dia membuat skrip untuk mengotomatiskan tugas? (Ya, saya menyadari Anda dapat menjalankan ITU sebagai pengguna priviledged.)
Brent Rittenhouse

Coba wsudo saya , alat mirip sudo untuk Windows yang tersedia sebagai paket Chocolatey.
noseratio

Jawaban:


102

Tidak ada sudoperintah di Windows. Padanan terdekat adalah "jalankan sebagai administrator."

Anda dapat melakukan ini menggunakan runasperintah dengan tingkat kepercayaan administrator, atau dengan mengklik kanan program di UI dan memilih "jalankan sebagai administrator".


4
Apakah Anda tahu jika perilaku runas bervariasi dari versi ke versi? Saya telah menginstal perusahaan Win7 dan semua kombinasi yang telah saya coba dengan runas membuat cmd baru tanpa hak admin
notNullGothik

4
Sudo untuk Windows (sudowin) memungkinkan pengguna yang berwenang untuk meluncurkan proses dengan hak istimewa yang lebih tinggi menggunakan frasa sandi mereka sendiri. Tidak seperti perintah runas, Sudo untuk Windows mempertahankan profil pengguna dan kepemilikan objek yang dibuat. Anda bisa mendapatkannya di sini: sourceforge.net/projects/sudowin
Joe Bigler

Lihat gsudo( stackoverflow.com/a/58753166/97471 ). Ini adalah sudo untuk windows dengan *nix sudopengalaman pengguna: Mengizinkan untuk menjalankan perintah di dalam konsol saat ini, dan cache kredensial (hanya satu popup UAC).
Gerardo Grignoli

runas adalah elevasi akun pengguna di Administrator; sudo adalah hal lain. Ini seharusnya bukan jawaban yang diterima.
Massimo

16

Buka notepad dan tempel kode ini:

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

Kemudian, simpan file sebagai sudo.cmd. Salin file ini dan tempel di C:\Windows\System32atau tambahkan jalur sudo.cmdke Variabel Lingkungan PATH Anda.

Saat Anda membuka command prompt, Anda sekarang dapat menjalankan sesuatu seperti sudo start ..

Jika Anda ingin jendela prompt perintah admin tetap terbuka saat Anda menjalankan perintah, ubah kode di notepad menjadi ini:

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

Penjelasan:

powershell -Command menjalankan perintah PowerShell.

Start-Process adalah perintah PowerShell yang memulai proses, dalam hal ini, command prompt.

-Verb RunAs menjalankan perintah sebagai admin.

-Argument-List menjalankan perintah dengan argumen.

Argumen kami adalah '/c cd /d %CD% && %*'. %*berarti semua argumen, jadi jika Anda melakukannya sudo foo bar, itu akan berjalan di command prompt foo barkarena parameternya adalah foo dan bar, dan %*kembali foo bar. cd /d %CD%adalah perintah untuk membuka direktori saat ini. Ini akan memastikan bahwa ketika Anda membuka jendela yang ditinggikan, direktori akan sama dengan jendela normal. yang &&berarti bahwa jika perintah pertama berhasil, jalankan perintah kedua.

The /cadalah parameter cmd untuk menutup jendela setelah perintah selesai, dan /kmerupakan parameter cmd untuk menjaga jendela yang terbuka.

Kredit untuk Adam Plocher untuk tinggal dalam kode direktori saat ini.


Satu masalah dengan itu adalah sekali ditinggikan, Anda tidak lagi berada di folder saat ini, melainkan di C:\Windows\System32.
noseratio

2
@noseratio benar, tampaknya mengubahnya menjadi ini akan berhasil, namun:powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
Adam Plocher

@AdamPlocher, itu mungkin berfungsi tetapi dapat mengalami masalah jika baris perintah %*memiliki tanda kutip. Itulah mengapa saya membuat wsudo, berbasis PowerShell.
noseratio

Ini adalah peningkatan dari akun pengguna di Administrator; sudo adalah hal lain.
Massimo

Bisakah Anda melewati echogaris satu dan tiga dengan melakukan prepending @ke garis PowerShell?
nudl

14

Semua jawaban menjelaskan cara meningkatkan perintah Anda di host konsol baru .

Yang membuat saya terhibur adalah tidak ada alat yang berperilaku seperti itu *nix sudo, memungkinkan untuk menjalankan perintah di dalam konsol saat ini .

Jadi, saya menulis: gsudo

Kode Sumber https://github.com/gerardog/gsudo

Instalasi

Melalui sendok

  • Instal scoop jika Anda belum memilikinya. Kemudian:
scoop install gsudo

Atau melalui Chocolatey

choco install gsudo

Penginstalan manual:

Demo

demo gsudo


9

Saya telah membuat wsudo, sudoalat CLI seperti open-source untuk Windows untuk menjalankan program atau perintah dengan hak yang ditinggikan, dalam konteks direktori saat ini . Ini tersedia sebagai paket Chocolatey .

Saya sering menggunakannya untuk hal-hal seperti mengonfigurasi agen pembuat, hal-hal admin seperti sfc /scannow, dism /online /cleanup-image /restorehealthatau hanya untuk menginstal / memperbarui paket Chocolatey lokal saya. Gunakan dengan resiko Anda sendiri.

Instalasi

choco install wsudo

Chocolatey harus sudah terpasang.

Tujuan

wsudoadalah sudoalat mirip Linux untuk Windows untuk menjalankan program dengan hak yang lebih tinggi (sebagai Administrator) dari prompt perintah shell non-admin dan mempertahankan direktori saat ini.

Implementasi ini tidak bergantung pada Windows Script Host ( CScript) lama. Sebaliknya, ia menggunakan skrip PowerShell 5.1 pembantu yang memanggil "Start-Process -Wait -Verb runAs ..."cmdlet. Sistem Anda kemungkinan besar sudah menginstal PowerShell 5.x, jika tidak, Anda akan ditawarkan untuk menginstalnya sebagai dependensi.

Pemakaian

wsudomenjalankan program atau perintah inline dengan hak tinggi di direktori saat ini. Contoh:

wsudo .\myAdminScript.bat 
wsudox "del C:\Windows\Temp\*.* && pause"
wasudo cup all -y
wasudox start notepad C:\Windows\System32\drivers\etc\hosts 

Untuk lebih jelasnya, kunjungi repro GitHub .


2
Terima kasih sudah menerbitkan "wsudo", cukup berguna buat saya. Saya pikir keuntungan wsudo Anda adalah menjaga direktori kerja tidak seperti alternatifnya. Saya tidak dapat menemukan seseorang dapat menyimpan CWD selain wsudo. Saya pikir Anda harus menekankan poin ini dalam deskripsi. Saya sangat menghargai pekerjaan Anda.
benok

3
Satu hal lagi yang perlu Anda ketahui. Apakah Anda tahu alamat bar hack untuk membuka shell secara langsung? Saya biasanya menggunakan peretasan ini, tetapi saya sangat frustrasi ketika saya ingin mendapatkan shell yang tinggi dengan peretasan ini. Saya mencoba mencari banyak alternatif tetapi tidak berhasil. Saya akhirnya bisa membukanya dengan "wasudo [shell]". Saya senang memiliki ini. Sekali lagi terima kasih :-)
benok

3
@benok, benar, ini memang peretasan yang berguna! Senang wasudomembuatnya lebih mudah untuk Anda. Saya sendiri kebanyakan tinggal di terminal konsol terintegrasi VSCode, jadi saya hanya mengetik di wasudosana :) Perbaikan berikutnya akan mewarisi lingkungan vars .
noseratio

Hai @benok, Anda mungkin juga tertarik dengan utilitas baru saya untuk meningkatkan produktivitas salin / tempel / jalankan, DevComrade :)
noseratio

5

runasPerintah mengharuskan pengguna untuk mengetikkan kata sandi. Jika Anda tidak ingin mengetikkan kata sandi dan hanya ingin mengklik dialog UAC, gunakan Start-Process -Verb runasdi PowerShell sebagai ganti runasperintah.

lihat: http://satob.hatenablog.com/entry/2017/06/17/013217


Ini adalah peningkatan dari akun pengguna di Administrator; sudo adalah hal lain.
Massimo

4

Anda biasanya tidak akan melakukannya, karena Anda tidak akan menjalankannya di bawah * nix. Lakukan pengembangan di direktori pengguna, dan terapkan setelahnya ke direktori sistem.





2

Skrip vbs berikut memungkinkan untuk meluncurkan perintah yang diberikan dengan argumen dengan elevasi dan meniru perilaku perintah sudo unix asli untuk sekumpulan kasus bekas yang terbatas (tidak akan menyimpan kredensial atau memungkinkan untuk benar-benar mengeksekusi perintah dengan kredensial berbeda). Saya memakainya 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

Contoh penggunaan pada prompt perintah sudo net start service


1
bagaimana kita bisa membuat skrip menunggu input pengguna, sehingga kita dapat membaca output dari program shell?
Ahmad Hajjar

1
Maksud Anda perintah shell interaktif? Nah, Anda harus terlebih dahulu mencoba memastikan perintah yang diluncurkan akan menunggu kembali. Di sini sepertinya itu mungkin. Maka Anda harus mendapatkan output dari objek shell dan mengeluarkannya, yang saya rasa itu juga mungkin. Jangan berharap semua yang dapat Anda lakukan di unix akan mungkin terjadi.
ceztko

Pada windows 10 itu melempar kesalahan sintaks pada baris 1 karakter 6.
Martin Braun

Ini adalah peningkatan dari akun pengguna di Administrator; sudo adalah hal lain.
Massimo

1

Saya rasa saya mencoba langkah-langkah di bawah ini setelah melakukan penelitian & berhasil

1. Instal scoop menggunakan PowerShell 3 (iex (new-object net.webclient) .downloadstring (' https://get.scoop.sh ')) 2. lakukan scoop install --global sudo 3. pastikan jalur (C: \ Users \\ scoop \ shims & C: \ ProgramData \ scoop \ shims) ditambahkan dalam variabel jalur lingkungan.


1

Tidak ada perintah sudo dalam kasus windows dan juga tidak perlu memasukkan $. Untuk menginstal Angular CLI melalui command prompt node.js di windows, saya hanya menulis npm install -g @ angular / cli lalu tekan Enter. Ini bekerja dengan baik.


0

buka konsol sebagai administrator. Klik kanan pada command prompt atau bash -> lainnya dan pilih "run as administrator"


0

Di Windows Powershell Anda dapat menggunakan perintah Mulai-Proses dengan opsi -Verb RunAsuntuk memulai dan meningkatkan proses. Berikut adalah contoh fungsi sudo saya:

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

Contoh: Buka file host sebagai Admin di notepad

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

0

Menggunakan sudoperintah untuk pengguna jendela memberi Anda saran berikut:

Pertama, instal scoopalat manajemen paket dan jalankan perintah berikut:

masukkan deskripsi gambar di sini

Kemudian gunakan scoopuntuk menginstal sudoperintah:

masukkan deskripsi gambar di sini

Terakhir, Anda dapat menjalankan perintah dengan sudo:

masukkan deskripsi gambar di sini


0

Saya senang membantu Anda.

Untuk membuat perintah sudo ikuti langkah-langkah: -

  1. Buat folder env di C: \ Drive.
  2. Buat folder di dalam folder env dengan nama bin.
  3. Sekarang tambahkan C: \ env \ bin ke PATH Anda.
  4. Buat file sudo.bat di C: \ env \ bin.
  5. Edit dengan notepad dan tulis kode ini: -
    https://gist.github.com/coder-examples/5ca6c141d6d356ddba4e356d63fb2c13

Semoga ini bisa membantu Anda


Jawaban ini harus menyertakan teks dari file batch, tidak bergantung pada link di luar situs karena link membusuk. Juga jawabannya harus menyertakan penafian bahwa skrip ini berusaha meniru perilaku kasar sudo, tetapi tidak benar-benar sudo (ini adalah sudo-semu).
asky

0

Untuk menjalankan perintah sebagai admin di Powershell yang tidak ditinggikan, Anda dapat menggunakan Start-Processsecara langsung, dengan opsi yang tepat, khususnya -Verb runas.

Ini jauh lebih berbelit-belit daripada sudo, terutama karena Anda tidak bisa hanya menggunakan kembali perintah sebelumnya dengan opsi tambahan. Anda perlu menentukan argumen untuk perintah Anda secara terpisah.

Berikut adalah contoh, menggunakan perintah rute untuk mengubah gateway:

Ini gagal karena kami tidak berada dalam PS yang ditinggikan:

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

Ini berfungsi setelah menerima UAC:

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

Atau untuk perintah yang membutuhkan cmd.exe:

> Start-Process cmd -ArgumentList "/c other_command arguments ..." -Verb runas
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.