Windows için herhangi bir 'sudo' komutu var mı?


449

Her zaman Windows bilgisayarımda yönetici olmayan bir hesapta çalışıyorum. Bazen yönetici erişimi gerektiren programlar yüklemem gerekiyor. Çoğunlukla Windows komut istemini kullandığım gibi, ayrıcalıkları yükseltmek için Linux terminal komutuna benzer bir Windows komutu var sudomı?


7
Aradığınız terimin "yüksek" erişim olduğuna inanıyorum. Kimlik bilgileriniz yönetici iznine sahip olsa da, kimlik bilgileriniz altındaki işlemler komutu "sudo" yapana kadar yönetici izniniz yoktur. Windows'ta buna "yükseltme" diyorlar.
surfasb

7
@IGRACH benim güç kaynağımda değil ...
jiggunjer

2
Bunu kullanıyorumdoskey sudo= runas /user:Administrator "cmd /k cd \"%cd%\" & $*"
William

1
Windows için Chocolatey paketi olarak sunulan benzeri wsudobir aracımı deneyin sudo.
noseratio

Yanıtlar:


267

Runas komutu.

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

Sadece koş:

runas /noprofile /user:Administrator cmd 

yönetici olarak bir komut kabuğu başlatmak için


22
Herhangi bir uzun süreli kullanım için profilin yüklenmesini istediğinizi (örneğin ortam değişkenleri dahil) bulabilirsiniz. Bu durumda bırakın /noprofile.
Richard

6
Bu benim için çalışmıyor. Şifremi yazdıktan sonra komut istemi kapatıldı.
Jonas

55
Bu Yönetici şifresini istemiyor mu? sudo soruyor senin şifre!
n611x007

15
Ne yazık ki, bu gerçekten modası geçmiş. Runasyalnızca komutları farklı bir kimlik bilgisi kümesi altında çalıştırır. Kimlik bilgileriniz yönetici izinlerine sahip olsa da, kimlik bilgilerinizin altındaki tüm işlemlerin yönetici olarak çalışması anlamına gelmez.
surfasb

12
"Modası geçmiş" için +1, runas UAC'yi atlayamadığından. Bunun yerine, Windows düğmesine basın, cmd yazın ve Ctrl + Shift + Enter tuşlarına basın.
sarı-sarı,

125

Ben keşfettim yükseltmek bugün "UAC ayrıcalık yüksekliği olan komutu yürütür. Bu komut istemleri içinde veya toplu dosyaları ile çalışmak için yararlıdır." Bu aynı değil sudoo Yönetici yürütme kullanıcıyı değiştirir, ama onun sözdizimi çok daha basit daha kullanmaktır runasve göreli yollar kullanımını sağlayan geçerli dizin tutabilir.

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'in amacı UAC (Kullanıcı Hesabı Denetimi) etrafında çalışmak veya onu atlamak değil, onunla çalışmaktır. Sürece UAC etkinleştirildiğinde olarak orada vardır en istemi çeşit olmak bazı süreçte noktasında. Tamamen sormaktan kurtulmanız gerekirse, UAC'yi devre dışı bırakmanız gerekir .

Ağrı noktası yükselmesi hafifletir, ayrıcalıklı olmayan bir kabuktan belirli bir işlemi yükseltiyor ve ardından normal olarak devam ediyor. Bu olmadan , ayrıcalıklı komutu denemeden önce , sağ tıklayıp> "Yönetici Olarak Çalıştır" seçeneğini sağ tıklatarak ayrıcalıklı bir komut istemi başlatmanız gerekir .


5
Bu secpol.msc içinde "sormadan Elevate" ile mükemmel gider. Birlikte, %wheel ALL=(ALL) NOPASSWD: ALLsudo'dakiyle aynı şeyi yapıyorlar .
sayap

2
@ sayap, sadece açık olmak gerekirse, bunu mu demek istediniz: ss64.com/nt/syntax-uac.html ?
matt wilkie

5
Yükseltme ile karşılaştığım tek sorun (v1.3.0), yükselttiği programdan hata kodunu döndürmemesidir.
Ken

4
Sudo.bat: @elevate %*=> kar!
Joe DF,

10
OOTB eksik, harici bir yardımcı olduğunu söylemek güzel olurdu.
Hi-Angel,

67

Benzer olan runas komutunu kullanabilir veya sudo komutu ekleyen SourceForge üzerinden sudo for Windows projesini inceleyebilirsiniz .

Fark ince:

Diyelim ki iki kullanıcınız var. Bob normal bir kullanıcı ve James bir yönetici.

Eğer Bob olarak giriş yaparsanız ve "runas james acommand" komutunu kullanırsanız, komut James tarafından çalıştırılmış gibi çalıştırılır, böylece James'in kullanıcı ayarlarına erişir ve herhangi bir kullanıcı değişikliği James James Belgelerim ve ayarlar klasörlerine vb. Gider. Bir uygulamayı yüklüyorsun, diyelim ki, Bob değil, James olacak.

Öte yandan Bob "sudo acommand" yaparsa, komut hala Bob olarak çalıştırılır, ancak yükseltilmiş izinlerle - tıpkı Linux sudo komutu gibi. Herhangi bir kullanıcının sudo yapmasını önlemek için, sudo kullanarak yükseltme izni olan normal kullanıcıların listesini içeren bir sudoers kullanıcı grubu tanımlamanız gerekir. Kullanıcılar, yükseklikten önce hala kimlik bilgileri sağlamalıdır.

Bazen fark önemli değil, bazen önemlidir ve her iki komutun da yararlı olabileceğini düşünüyorum.


2
Emin misiniz? Ubuntu'da sudo çalıştırdığımda, eğer mevcut temam içerideyse, ~/.themeso zaman sudo-ed uygulaması bu temaya erişemez çünkü içinde değil /home/root/.themesve varsayılan çirkin gtk temasını kullanacak.
hasen

5
@hasen j - senin derdin sadece ~ / .themes komut çalıştırılmadan önce değerlendirilir (ve böylece köke geçmeden önce).
Jared,

1
GitHub'da barındırılanlar dışında başka bir çözüm de windosu'dur: github.com/tehsenaus/windosu Yeni buldum ve harika çalışıyor gibi görünüyor. En sevdiğim şey, kurulumu çok kolay. Sadece "npm install -g windosu".
Venryx

39

Komut Dosyası Yükseltme PowerToys uygulamasını da kullanabilirsiniz .


Müthiş - tam olarak aradığım şeydi. Bir komutun farklı bir kullanıcısı olduğu için çalıştırmak istemedim, yalnızca yükseltilmiş ayrıcalıklarla çalıştırmak için.
saat

Kesinlikle bu sorun için doğru çözüm! Runas'ı dağınık sözdizimi ile kim ister?
Mart'ta Stabledog

1
Genellikle yükseltme komutunun pencerelere yerleştirilmesini diledim. Harika bir araçtır.
nhinkle

şimdi bir Kendini Kaldırma Komut Dosyası Oluşturmanın özellikle alakalı olduğu aynı yazar tarafından bir Elevasyon PowerToys koleksiyonu var .
matt wilkie

1
@barlop elbette değil. Bu UAC'nin amacını yenerdi.
nhinkle

29

Alternatif konsollara geçmeye hazırsanız, ConEmu var (ben yazarım). Özelliklerinden biri - bir ConEmu penceresinde hem yükseltilmiş hem de yükseltilmemiş sekmeleri çalıştırma yeteneği. Sekmeler de farklı kimlik bilgileriyle başlatılabilir.

Kullanıcının rahatı için csudo.cmd bir toplu iş dosyası vardır (bu kolayca bash'a uyarlanabilir). Projenin wiki'sindeki açıklamanın tamamını okuyun . Kısacası, var olan yükseltilmemiş sekmeden bazı komutları çalıştırdığınızda, örneğin

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

ConEmu dismyeni yükseltilmiş konsolda / sekmede başlayacaktır (Vista'da önceki UAC komut istemiyle veya XP'de Oturum Aç kutusunda).

Varsayılan olarak bir csudobölmede yeni konsolu başlatır ( csudo.cmdiçeriğin düzenlenmesiyle değişiklik yapılabilir ).

Ve tabii ki sudo.cmd"klasik" sudokelimesini seviyorsanız ismini değiştirebilirsiniz.

ConEmu / Windows'ta sudo


1
csudo uzun zaman önce ConEmu dağılımına dahil edildi. Hiçbir bağlantıya gerek yok.
Maximus

Burada sorun şu ki, sudo'd komutundan sonra yeni konsol sekmesi kullanılamaz hale geliyor. Böylece yükseltilmiş sekmede çalışmaya devam edemezsiniz, sadece bir press enter or esc to exitmesaj alın.
jiggunjer

1
Tabii ki yapamazsın. Unix'te bile sudokomut tamamlandıktan sonra yükseltilmemiş terminale geri dönersiniz ! Yanlış yoldan gidiyorsun.
Maximus

1
Açtığınız de tutmak olabilir yeni bir pencere veya sekme edeceksin eğer 1), let kullanıcı onlar devam etmek isteyip seçin. 2) ubuntu'mda her seferinde sudo yapmak zorunda değilim, yükselti sanırım birkaç dakika sürüyor. 3) Bu uygulamanın milyon seçeneği var, bunun için henüz bir şey yok mu? Belki şımarıktır.
jiggunjer

24

Hızlı yöntem:

Sudo eklemek için üç adım.

  1. PowerShell'i açın.

  2. Aşağıdaki betiği (Ctrl + C) kopyalayın ve PowerShell'e (Alt + Space + E + P) yapıştırın:

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

sudoPowerShell'de komutu kalıcı olarak etkinleştirir .

Kullanımı:

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

Örnekler:

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

Öğrenme için uzun yöntem:

Not: Yukarıda belirtilen betiği oluşturmak için betiği her iki makaleden de karıştırdım. Komut dosyasını elle not defterine yapıştırmak yerine Out-File, kaydetmek için ifadeleri ps1ve $profilekomut dosyasındaki dosyaları ekledim .

İpucu: Çok büyük bir UAC pop-up hayranı değilseniz (benim gibi), aşağıdakileri * .reg dosyasına kaydedin ve çalıştırın:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000

1
Bu sorunun powershell çözümünü seviyorum. Bu bir şeyi yükseltmenin en kolay yolu olmalı. Mevcut .bat dosyaları kolayca
POSH’ye

Windows 10'da bu hatayı . : File C:\Users\User\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 cannot be loaded because running scripts is disabled on this system.
aldım

@sowrov, bakınız [bu makale] (www.faqforge.com/windows/windows-powershell-running-scripts-is-disabled-on-this-system/). Varsayılan olarak, PowerShell scriptleri herhangi bir Windows kurulumunda devre dışı bırakılmıştır. Bu komutla etkinleştirmeniz gerekir set-executionpolicy remotesigned. Bunun yanında diğer seçenekler resmi belgelerderemotesigned açıklanmaktadır .
vulcan kuzgun

Okuyucular bu ps betiğinin powershell -c start -verb runas program.exeişlevsellik için bir sarıcı olduğunu unutmayın . Ayrıca cmd komutuyla (yerel olarak) bu şekilde yükselemeyeceğinizi unutmayın . Powershell en iyi yerel seçenektir.
jiggunjer

Aynısı powershell env yerine cmd.exe dosyasında yapılabilir mi? powershell clink ile hesaplamaz ve
tıkırtı

20

Bunu Windows'ta yapıyorsanız, birkaç cevapta belirtildiği gibi Farklı Çalıştır komutuna ek olarak, bunu fareyle yapmanın da yolları vardır.

ShiftWindows'taki çoğu yürütülebilir dosyaya sağ tıkladığınızda tuşu basılı tutarsanız, birkaç daha gelişmiş seçenek olduğunu fark etmelisiniz. Bunlardan biri " Run As..." seçeneği (sanırım Run As AdministratorVista'dan itibaren " " deniyor ).

Ayrıca, daha gelişmiş RunAs sürümünü Microsoft'tan ShellRunAs olarak da indirebilirsiniz . Bu, hesap bilgilerinin kaydedilmesine izin vermek de dahil olmak üzere hem komut satırında hem de grafik modlarda yerleşik RunAs komutu üzerinde geliştirmelere sahiptir.


4

Sudo adında uygun bir çikolata paketi var . Bu komutu kullanarak paketi chocolatey ile kurabilirsiniz:

choco install -y sudo

Daha sonra kullanmak zorunda olduğunuz Windows / MS kabuğu ne olursa olsun, sudobeklendiği gibi kullanabilirsiniz .


3

Surun , bazı programların kullanıcı haklarını değiştirmeden veya ortam değişkenlerini değiştirmeden parola sağlamadan yönetim haklarıyla çalışmasına izin veren ücretsiz, açık kaynaklı bir uygulamadır.

Windows XP kullanırken bu uygulama bana çok yardımcı oluyor. Beta , Windows 7 altında çalışır.


Surun iyi bir iş çıkarıyor. Ancak bazen Windows 8 ve 8.1 altında varsayılanları ideal değildir. Windows'un çalışmasını işlev olarak değiştirdiğinden, başlangıç ​​ekranında sağ tıkladığınızda komut istemini başlatamazsınız.
Kurt

3

Muhtemelen keşfetmiş olduğunuz gibi, runas başka bir kullanıcı olarak çalışmanıza izin verecektir, ancak yükseklik yapamaz ve mevcut dizinleri, ortam değişkenlerini veya uzun komut satırlarını geçemez.

Hamilton C kabuğu bunu gerçek bir su ve sudo ile çözer. su, bir komutu başka bir kullanıcı olarak çalıştırmanıza izin verir; sudo (aslında suya bir diğer ad) yükseltilmiş bir komut çalıştırmanıza izin verir. Her ikisini de yapabilirsiniz, farklı bir kullanıcı olarak çalışarak yükseltin. Geçerli dizinler, ortam değişkenleri ve uzun komut satırları, arayanın bağlamında çalışan su ile daha sonra çocuğu başlatan yeni kimlik bilgileriyle bağlantılı olarak çalışan bir kopyası arasında paylaşılan bir bellek anlaşması yoluyla geçirilir. Tam açıklama: Ben yazarım.


1

sudoCygwin'in minttyterminali için çalışan bir yedek , aşağıdaki komut dosyasını kullanıcının PATH'sine yerleştirmek olacaktır:

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

Benim için bu, Windows'ta bir terminalde çalışırken vimveya program gibi cygrunsrvçalışırken programların ayrıcalıklarını yükseltmek için tek geçerli alternatif .


1

Bu komut dosyası işi yapar:

@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

Olarak kaydedin, sudo.cmdsonra PATH'inize ekleyin

Not: runasBu bağlamdaki araçlar "Başka kullanıcı olarak çalıştır" değil "Yönetici olarak çalıştır" anlamına gelir.

Buradan alındı ve cscript.exe başlığını çıktıdan kaldırmak için hafifçe düzenlendi


1
Bu yeni bir konsol oluşturur. Sudo'd komutu tamamlandıktan sonra yeni pencere kaybolur - böylece çıktı bile okuyamazsınız.
jiggunjer

Ne yazık ki evet. Ancak bazı temel komutlar (kopya), GUI araçları veya yönetici cmd'si açmak için kullanılabilir.
Charles Milette

1

Benim görüşüme göre en basit çözüm, portatif olan ve UAC kullanarak kullanıcıyı yönlendirecek işi yapmak için güç kaynağını kullanmaktır.

Bunu herhangi bir kabukta çalıştırabilirsiniz (cmd veya powershell)

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

0

Aşağıdaki vbs betiği benim için hile yapar. üstüne koydumC:\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

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.