Programı komut satırından yükseltilmiş haklarla çalıştırma


44

Zaten yükseltilmemiş bir komut satırındayken, bir programı veya komutu yükseltilmiş haklarla çalıştırmanın bir yolu var mı?

Aynen program kısayoluna tıkladığımda gerçekleştirdiğim eylemin aynısı ve Yönetici olarak çalıştır'ı seçin .

Runas bunun bir şifre sorar, ama sadece istiyorum - komut muhtemelen çözüm değildir UAC iletişim.

Yanıtlar:


14

Görünüşe göre bu yardımcı program - Gizli Başlat - / uac anahtarını kullanırsanız istediğiniz şeyi yapar. İşte bir örnek komut satırı:

hstart /UAC "notepad.exe"

Bu, runas gibi bir parola istemek yerine UAC iletişim kutusunu açacaktır.

görüntü tanımını buraya girin


2
Uyarı: Bu küçük yardımcı program 20 $ 'dır. Küçük cebe sahip olanlar için, bunun yerine RunAdmin'i kullanın :)
WeGoToMars

Bu gel-up gelmez, Windows 10
will

50

PowerShell'de bunu yapmanın bir yolu var :

PS> Start-Process powershell -Verb runAs

19
İyi çalışıyor gibi görünüyor. Komut satırından, örneğin yapabilirsinpowershell -Command "Start-Process 'C:\program.exe' -Verb runAs"
marsze

7
Bu doğru / en iyi yanıt IMO olarak işaretlenmelidir - 3. parti programları olmadan çalışır.
crimbo

5
@Marsze - Fwiw'den yola çıkarak, en basit durumdaki argümanlar kendi tek alıntı değerlerine girerler, örn powershell -Command "Start-Process 'gvim' 'c:\windows\system32\drivers\etc\hosts' -Verb runAs". Teşekkürler!
saat

Yükseltilmiş komut isteminin çıktısını şu anda çalışan komut dosyama nasıl aktarabilirim?
wheeler

@wheeler, bunu yapamayacağınıza neredeyse eminim, ancak bir çıkış kodu döndürebilirsiniz:$p = Start-Process powershell -Verb runAs -ArgumentList "-Command ``"& { ``$Host.SetShouldExit(123) }``"" -PassThru; $p.ExitCode
Rustam

6

Rustam 'ın cevabı üzerine inşa edebilirsiniz:

  • su.batAşağıdaki tek astarla, varsayılan% PATH% içinde bir yerde bir toplu iş dosyası oluşturun :@powershell start -verb runas %*
  • Bu işlevi PowerShell $ profilinize ekleyin :function su {start -verb runas @args}

Şimdi su <command> [parameters]iki kabuğa da basabilirsiniz !


2

RunAdmin , bir programı komut satırından yükseltilmiş haklarla çalıştırmanızı sağlayan küçük bir yardımcı programdır (150Kb) (UAC'yi gösterir). Ve Saklı Başlat'ın karşısında serbesttir.


2

Bu benim için Windows 10 da dahil olmak üzere tüm platformlarda çalışıyor. İhtiyaçlarım basit, güce ihtiyacınız olursa yaklaşımı uyarlayabilirsiniz .

sudo.cmdLinux sudo komutu için adında küçük bir senaryo buldum . Düşündüğü kadar iyi çalışıyor. Gereksinimleri, izlenecek adımları ve senaryoyu bir örnekle aşağıya doğru çizdim. İlk önce bir uyarı kelimesi.

UYARI : Komut, Windows Sistem dizininde varsayılan olarak çalışır. Öncecdgüvenli bir yeregitmek istersiniz.

gereksinimler :

  • Komutu Yönetici ile birlikte pencerelerden ayrıcalıklı bir şekilde çalıştırın. CMD
    veya cmd kabuğu.
  • komutta normal Windows ayrıcalık kontrolleri gerektirir
    • Başka bir deyişle, ayrıcalıklı bir hesapla oturum açmadığım sürece komut çalışmaz.
  • Komutu Yönetici izniyle yürütün ve bir komut dosyasında çağrıldığında devam edin. Bu yüzden komutun tamamlanmasını bekleyin.
  • Basit olun ki her zaman işe yarayacak
  • Zaten giriş yapmışsam her seferinde bir şifre girmenize gerek yoktur.
    • Linux'taki gerçek komutla bir kez parola girebilirsem daha iyi bir yöntem olabilir sudo.

çözüm :

  1. Tüm argümanları yürütmek için bir komut dosyası oluşturun, sudo.cmd
  2. Komut komut ismini için bir Windows kısa kesilmiş oluşturun: sudo.lnk.
  3. Kısaltmayı sudopencerelerinize PATH ile yerleştirin, böylece görülebilir.
  4. Kısayol özelliklerini düzenleyin, Start in:yolu boş bırakın.
  5. [ Advanced] Düğmesine tıklayın - kontrol edinRun as Administrator
  6. Windows yolunuzda kısayolları etkinleştirin, PATHEXT ortam değişkenini, viz kullanın.
d:> echo %PATHEXT%
    .lnk;.EXE;.CMD;.BAT;.COM

sudo dirKomut satırında yazdığınızda , Windows

User Account Control

Do you want to allow this app to make changes to this device?

  [YES]  [NO]

Erişim kontrolü açılır penceresi. Eğer "[ NO]" üzerine tıklarsanız hiçbir şey olmaz. Windows bir " Access is denied." mesajı gösterecektir .

"[ YES]" Düğmesine tıkladığınızda , dizin komutu yüksek bir ayrıcalıkta çalışır. Elbette bir hizmette durmak veya sorgulamak gibi daha ilginç bir şey istersiniz:

 sudo sc query SDRSVC

SDRSVC, "Windows Yedekleme Servisi" nin servis adıdır, bu, ayrı bir Cmd penceresinde aşağıdakileri gösterir:

  [sudo]

   administrator
  ---------------

  sc query SDRSVC

SERVICE_NAME: SDRSVC
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

  [done]

Press any key to continue . . .

sudo.cmdProgramın kendisini çok temel. Dediğim gibi ihtiyaçlarım basit. Test yapmak için kod dağıtırken hizmetleri durdurmak ve başlatmak istiyorum.

sudo.cmd:

 @echo off
 @rem    sudo.cmd
         cd /d %temp%
 @echo.
 @echo.   administrator
 @echo.  ---------------
         cd 
 @echo.
 @rem  _________________________________________________
 @rem      -- Print usage . . .
        @if    [""]      ==["%~1"]   goto USAGE
        @if /i ["--HELP"]==["%~1"]   goto USAGE
 @rem  _________________________________________________
 @rem
 @echo.  %*
 @rem
         %*
 @rem
         set EXIT_STATUS=%ERRORLEVEL%
 @rem  -- -- -- -- --  
 @echo.
 @echo.  [done]
 @rem  ______________________________________________________
 :Exit
 @echo.
 @pause
  exit /b  %EXIT_STATUS%
 @rem  ______________________________________________________
 :USAGE
 @echo.
 @echo  ^Usage:
 @echo.    sudo ^<complete command line^>
 @echo.
 @echo.  Attempts to rune the: ^<complete command line^>
 @echo.  under Administrator priviliges.  Relies on Windows 
 @echo.  prompt for elevated privileges.
 @rem  ______________________________________________________
 @goto Exit

pauseEğer sonuçları incelemeniz için komut bekler. Eğer alırsanız pauseyönetim pencere kapanır dışarı ve komut çalıştı olmadığını bilmiyorum. Komuttan ERRORLEVELgelen de döndürülür.


2

Bu, Windows 10 için çalışır, diğer Windows sürümleriyle test edilmemiştir.

Yükseltilmiş izinleri isteyen powershell'i başlatan cmd.exe'den yönetici haklarına sahip bir not defteri açma örneği.

C:\>start powershell -command "&{start-process -filepath notepad -verb RunAs}"

Bu size [Evet] [Hayır] ile bir UAC iletişim kutusu (etkinleştirilirse) verir veya sizden yönetici şifresini ister.

Hosts dosyasını notepad ile açmak için başka bir örnek:

C:\>start powershell -command "&{start-process -filepath notepad 'C:\Windows\System32\drivers\etc\hosts' -verb RunAs}"

Daha fazla bilgi: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-6


Yürütülebilir dosyaya argümanlar -ArgumentListsadece işlem başlatmak için ek parametreler değil, bir parametre olmalıdır .
Elmalar

0

Start ++ ' a bir göz atın - bu işlevselliğe birçok başka faydalı şey ile birlikte sahiptir. UAC komut istemiyle çalıştırmak için, sudoprogram adınızı burada gösterildiği gibi komut satırında kullanın:

alt metin

İşte diğer bazı özellikler (kendinize ait olanları da ekleyebilirsiniz):

alt metin

alt metin


Ayrıca iyi görünüyor ama ben zaten Başlat ++ ile benzer işlevselliğe sahip FARR kullanıyorum (tabii ki sudo hariç).
Lukas Cenovsky

2
Bağlantıya hoş geldiniz
xmojmr

1
@ xmojmr'ın dediği gibi, o site öldü. Yeni bir yer biliyorsanız (çok hızlı bir şekilde bulamadım), cevabınızdaki linki güncellemelisiniz.
Abel

-1

Ayarlayabilirsiniz __COMPAT_LAYER=RunAsAdmin. Daha sonra komutlar ayrı bir yükseklikte çalışacaktır cmd.

Örnek .bat:

rem Run next command elevated to Admin.
set __COMPAT_LAYER=RunAsAdmin
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Group Policy\{35378EAC-683F-11D2-A89A-00C04FBBCFA2}" /t REG_DWORD /v "NoBackgroundPolicy" /d "1"
rem Disable elevation
set __COMPAT_LAYER=
rem continue non elevated
reg add "HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Internet Explorer\Main" /t REG_SZ /v "Start Page" /d "https://www.google.com" /f

Tüm Uyumluluk Modu seçenekleri, MS Uygulama Uyumluluğu Araç Seti'nde listelenmiştir.


Bu toplu iş dosyası korkunç derecede bozuk. ;Yorum sınırlayıcı olarak kullanamazsınız . "Toplu dosyalar noktalı virgül tanımıyor ve genellikle hatalı bir komutla ilgili hata iletisine neden oluyor."
DavidPostill
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.