Windows'ta 'sudo' komutu nasıl çalıştırılır


96

Windows'ta aşağıdaki komutu nasıl çalıştırırım:

$ sudo django-admin.py startproject NEW

?


Windows'ta terminal komutlarını kullanmaktan kaçınmak daha iyidir. Bunun yerine, Eclipse + PyDev gibi bir IDE'nin yardımıyla aynısını yapmayı deneyin. İşleri çok daha basit hale getirecek.
Pushpak Dagade

8
@Pushpak Dagade: Genel olarak yorumunuzdan rahatsız oldum, ancak bunu yazmaya gittiğimde bunun STACK OVERFLOW olduğunu fark ettim. Bunlar, Windows'ta terminali KULLANAN kişilerdir. =) Demek istediğim, PowerShell muhtemelen başka türlü var olmazdı.
Brent Rittenhouse

2
Ayrıca, bir görevi otomatikleştirmek için bir komut dosyası oluşturuyorsa? (Evet, bunu ayrıcalıklı kullanıcı olarak çalıştırabileceğinin farkındayım.)
Brent Rittenhouse

Chocolatey paketi olarak sunulan Windows için sudo benzeri bir araç olan wsudo'yu deneyin .
noseratio

Yanıtlar:


102

sudoWindows'ta komut yoktur . En yakın eşdeğeri "yönetici olarak çalıştır" dır.

Bunu, runasbir yönetici güven düzeyine sahip komutu kullanarak veya kullanıcı arabiriminde programı sağ tıklayıp "yönetici olarak çalıştır" ı seçerek yapabilirsiniz .


4
Runaların davranışının sürümden sürüme değişip değişmediğini biliyor musunuz? Win7 Enterprise'ı kurdum ve runas ile denediğim tüm kombinasyonlar yeni
cmd'yi

4
Windows için Sudo (sudowin), yetkili kullanıcıların kendi parolalarını kullanarak yükseltilmiş ayrıcalıklarla işlemleri başlatmasına olanak tanır. Runas komutunun aksine Sudo for Windows, kullanıcının profilini ve oluşturulan nesnelerin sahipliğini korur. Buradan alabilirsiniz: sourceforge.net/projects/sudowin
Joe Bigler

Kontrol edin gsudo( stackoverflow.com/a/58753166/97471 ). *nix sudoKullanıcı deneyimine sahip pencereler için bir sudo : Mevcut konsol ve kimlik bilgileri önbelleği içindeki komutu yürütmeye izin verme (yalnızca bir UAC açılır penceresi ).
Gerardo Grignoli

runas, Yöneticilerdeki bir kullanıcı hesabının yükseltmesidir; sudo başka bir şey. Kabul edilen cevap bu olmamalı.
Massimo

16

Not defterini açın ve bu kodu yapıştırın:

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

Ardından dosyayı olarak kaydedin sudo.cmd. Bu dosyayı kopyalayın ve PATH Ortam Değişkeninizin C:\Windows\System32olduğu yere yapıştırın veya yolu ekleyin sudo.cmd.

Komut istemini açtığınızda, şimdi gibi bir şey çalıştırabilirsiniz sudo start ..

Yönetici komut istemi penceresinin komutu çalıştırdığınızda açık kalmasını istiyorsanız, not defterindeki kodu şu şekilde değiştirin:

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

Açıklama:

powershell -Command powershell komutunu çalıştırır.

Start-Process bir işlemi, bu durumda komut istemini başlatan bir powershell komutudur.

-Verb RunAs komutu yönetici olarak çalıştırır.

-Argument-List komutu bağımsız değişkenlerle çalıştırır.

Bizim argümanlarımız '/c cd /d %CD% && %*'. %*tüm argümanlar anlamına gelir, yani eğer yaparsanız sudo foo bar, komut isteminde çalışır foo barçünkü parametreler foo ve bar'dır ve %*döner foo bar. cd /d %CD%geçerli dizine gitmek için bir komuttur. Bu, yükseltilmiş pencereyi açtığınızda dizinin normal pencere ile aynı olmasını sağlayacaktır. bu &&, ilk komut başarılı olursa ikinci komutu çalıştırmanız anlamına gelir.

/cKomut tamamlandıktan sonra pencereyi kapatmak için bir cmd parametredir ve /kpenceresini açık tutmak için bir cmd parametredir.

Mevcut dizin kodunda kalması için Adam Plocher'a kredi .


Bununla ilgili bir sorun, bir kez yükseltildikten sonra, artık geçerli klasörde değil, içinde olursunuz C:\Windows\System32.
noseratio

2
@noseratio doğru, bunu değiştirmek işe yarayacak gibi görünüyor, ancak:powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
Adam Plocher

@AdamPlocher, bu işe yarayabilir, ancak komut satırında %*alıntılar varsa sorunları olabilir . Bu yüzden wsudoPowerShell tabanlı oluşturdum .
noseratio

Bu, Yöneticilerdeki bir kullanıcı hesabının yükseltilmesidir; sudo başka bir şey.
Massimo

echoPowershell @hattının başına ekleyerek birinci ve üçüncü satırları atlayamaz mısınız?
nudl

14

Tüm yanıtlar, yeni bir konsol ana bilgisayarında komutunuzu nasıl yükselteceğinizi açıklar .

Beni eğlendiren şey, bu araçların hiçbirinin aynı şekilde davranmaması *nix sudove komutun mevcut konsol içinde yürütülmesine izin vermesiydi.

Ben de şunu yazdım: gsudo

Kaynak Kodu https://github.com/gerardog/gsudo

Kurulum

Kepçe ile

  • Zaten sahip değilseniz kepçe yükleyin . Sonra:
scoop install gsudo

Veya Chocolatey aracılığıyla

choco install gsudo

Manuel kurulum:

Demo

gsudo demosu


9

Oluşturduğum wsudo, açık kaynak sudo, doğru yükselmiş Windows programlarını veya komutları çalıştırmak için CLI aracı benzeri geçerli dizinde bağlamında . Chocolatey paketi olarak mevcuttur .

Ben yapı maddeleri, yönetici gibi şeyler yapılandırılması gibi şeyler için bu çok kullanmak sfc /scannow, dism /online /cleanup-image /restorehealthya da sadece / yükleme benim yerel chocolatey paketleri güncellemek için. Kendi sorumluluğunuzdadır kullanın.

Kurulum

choco install wsudo

Chocolatey önceden yüklenmiş olmalıdır.

Amaç

wsudosudoWindows için, yönetici olmayan bir kabuk komut isteminden yükseltilmiş haklara sahip bir programı (Yönetici olarak) çağıran ve geçerli dizinini koruyan Linux benzeri bir araçtır.

Bu uygulama eski Windows Komut Dosyası Ana Bilgisayarına ( CScript) bağlı değildir . Bunun yerine, "Start-Process -Wait -Verb runAs ..."cmdlet'i çağıran yardımcı bir PowerShell 5.1 komut dosyası kullanır . Sisteminizde büyük olasılıkla PowerShell 5.x yüklüdür, aksi takdirde onu bağımlılık olarak yüklemeniz teklif edilir.

Kullanım

wsudogeçerli dizinde yükseltilmiş haklara sahip bir program veya satır içi komut çalıştırır. Örnekler:

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

Daha fazla ayrıntı için GitHub deposunu ziyaret edin .


2
"Wsudo" yu yayınladığınız için teşekkür ederim, benim için oldukça faydalı. Bence wsudo'nuzun avantajı, çalışma dizinini alternatifler gibi tutmak değil. Wsudo dışında CWD tutabilecek birini bulamadım. Açıklamada bu noktayı vurgulamanız gerektiğini düşünüyorum. Çalışmanızı gerçekten takdir ediyorum.
benok

3
Bilmeniz için bir şey daha var. Kabuğu doğrudan açmak için adres çubuğu hack'ini biliyor musunuz ? Genelde bu hack'i kullanırım, ancak bu hack ile yükseltilmiş kabuk almak istediğimde çok sinirliydim. Pek çok alternatif bulmaya çalıştım ama işe yaramadı. Sonunda "wasudo [shell]" ile bir tane açabilirim. Buna sahip olmayı seviyorum. Tekrar teşekkürler :-)
benok

3
@benok, biliyorum, gerçekten kullanışlı bir hack! wasudoBunu senin için kolaylaştırdığına sevindim . Ben çoğunlukla VSCode entegre konsol terminalinde yaşıyorum, bu yüzden sadece wasudooraya yazıyorum :) Bir sonraki gelişme, ortam değişkenlerini devralmak olacaktır .
noseratio

Merhaba @benok, ayrıca kopyala / yapıştır / çalıştır üretkenliğini geliştirmek için yeni yardımcı programımla da ilgilenebilirsin, DevComrade :)
noseratio

5

runaskomutu, kullanıcıların şifre yazmasını gerektirir. Parola yazmak istemiyorsanız ve yalnızca UAC iletişim kutusuna tıklamak istiyorsanız Start-Process -Verb runas, runascommand yerine PowerShell'de kullanın .

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


Bu, Yöneticilerdeki bir kullanıcı hesabının yükseltilmesidir; sudo başka bir şey.
Massimo

4

Normalde yapmazsınız, çünkü ne olursa olsun * nix altında çalıştırmazsınız. Bir kullanıcı dizininde geliştirme yapın ve daha sonra sistem dizinlerine dağıtın.





2

Aşağıdaki vbs betiği, belirli bir komutu yükseltmeli argümanlarla başlatmaya izin verir ve sınırlı sayıda kullanılmış durum için orijinal unix sudo komutunun davranışını taklit eder (kimlik bilgilerini önbelleğe almaz veya farklı kimlik bilgileriyle komutları gerçekten yürütmeye izin vermez). Ben taktım 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

Komut isteminde örnek kullanım sudo net start service


1
Kabuk programının çıktısını okuyabilmek için betiğin kullanıcı girdisini bekletmesini nasıl sağlayabiliriz?
Ahmad Hajjar

1
Etkileşimli kabuk komutunu mu demek istiyorsun? Öncelikle, başlatılan komutun geri dönüşü beklendiğinden emin olmalısınız. Burada mümkün görünüyor. O zaman çıktıyı kabuk nesnelerinden almalı ve çıktısını almalısınız, ki bu da mümkün. Yine de, unix'te yapabileceğiniz her şeyin mümkün olmasını beklemeyin.
ceztko

Windows 10'da satır 1 karakter 6'ya bir sözdizimi hatası atıyor.
Martin Braun

Bu, Yöneticilerdeki bir kullanıcı hesabının yükseltilmesidir; sudo başka bir şey.
Massimo

1

Sanırım biraz araştırma yaptıktan sonra aşağıdaki adımları denedim ve başarılı oldum

1. powershell 3 (iex (new-object net.webclient) .downloadstring (' https://get.scoop.sh ')) kullanarak scoop kurun 2. scoop install --global sudo 3. yollardan emin olun (C: \ Users \\ scoop \ shims & C: \ ProgramData \ scoop \ shims) çevresel yol değişkenine eklendi.


1

Windows durumunda sudo komutu yoktur ve ayrıca $ koymaya gerek yoktur. Windows'ta node.js komut istemi aracılığıyla Angular CLI kurmak için npm install -g @ angular / cli yazdım ve ardından Enter tuşuna bastım . İyi çalıştı.


0

konsolu yönetici olarak açın. Komut istemine sağ tıklayın veya bash -> more ve "yönetici olarak çalıştır" ı seçin


0

Windows Powershell'de, -Verb RunAsişlemi başlatma ve yükseltme seçeneği ile İşlemi Başlat komutunu kullanabilirsiniz . İşte sudo işlevi örneğim:

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

Ör: Ana bilgisayarlar dosyasını not defterinde Yönetici olarak açın

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

0

sudoPencere kullanıcıları için komutu kullanmak size şu önerileri verir:

Önce scooppaket yönetim aracını kurun ve aşağıdaki komutları yürütün:

görüntü açıklamasını buraya girin

Ardından komutu scoopyüklemek için sudokullanın:

görüntü açıklamasını buraya girin

Son olarak, komutu şu şekilde çalıştırabilirsiniz sudo:

görüntü açıklamasını buraya girin


0

Sana yardım etmekten memnunum

Bir sudo komutu oluşturmak için aşağıdaki adımları izleyin: -

  1. C: \ Drive'da bir klasör env oluşturun.
  2. Env klasörünün içinde bin olarak adlandırılan bir klasör oluşturun.
  3. Şimdi PATH'inize C: \ env \ bin ekleyin.
  4. C: \ env \ bin içinde bir sudo.bat dosyası oluşturun.
  5. Not defteri ile düzenleyin ve şu kodu yazın: -
    https://gist.github.com/coder-examples/5ca6c141d6d356ddba4e356d63fb2c13

Umarım bu sana yardımcı olur


Bu yanıt, toplu iş dosyasının metnini içermeli, bağlantı çürümesi nedeniyle site dışındaki bir bağlantıya bağlı olmamalıdır. Ayrıca cevap, bu komut dosyasının sudo'nun kaba davranışını taklit etmeye çalıştığı, ancak gerçekten sudo olmadığı (bu bir sözde sudo) feragatnamesini içermelidir.
36'da asky

0

Yükseltilmemiş bir Powershell'de yönetici olarak bir komutu çalıştırmak için Start-Process, özellikle doğru seçeneklerle doğrudan kullanabilirsiniz -Verb runas.

Bundan çok daha kıvrımlıdır sudo, özellikle de önceki komutu ek bir seçenekle yeniden kullanamazsınız. Komutunuza argümanları ayrı ayrı belirtmeniz gerekir.

Ağ geçidini değiştirmek için route komutunun kullanıldığı bir örnek:

Bu başarısız olur çünkü yükseltilmiş bir PS'de değiliz:

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

Bu, UAC'yi kabul ettikten sonra çalışır:

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

Veya gerektiren bir komut için cmd.exe:

> Start-Process cmd -ArgumentList "/c other_command arguments ..." -Verb runas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.