Windows için komut satırını kullanarak yükseltilmiş bir cmd nasıl açılır?


109

Normal bir cmd'de komut satırlarını kullanarak yükseltilmiş bir komut istemini nasıl açarım?

Örneğin, kullanıyorum runas /username:admin cmdama açılan cmd yükseltilmiş gibi görünmüyor! Herhangi bir çözüm var mı?


Tüm yanıtları denedim. Herhangi bir yazılım olmadan en yararlı yanıt ve en azından hiçbir eylem, stackoverflow.com/a/40942828/9217577
TheGuardener

Yanıtlar:


166

Aynı sorunla karşılaştım ve CMD'yi CMD'den yönetici olarak açabilmemin tek yolu aşağıdakileri yapmaktı:

  1. CMD'yi aç
  2. Yazın powershell -Command "Start-Process cmd -Verb RunAs"ve basınEnter
  3. Yönetici olarak bir CMD'yi açmanızı isteyen bir açılır pencere görünecektir.

2
İyi cevap. Ekledim ve düzenledim, eskiden tek bir komut satırında çalışmasını sağlamak için yaptım!
Preet Sangha

1
Bununla bir toplu iş dosyası oluşturdum ve Windows klasörüme admincmd.bat olarak kaydettim, böylece tek yapmam gereken "admincmd" yazıp enter tuşuna basmak ve bir yönetici cmd'si açıyor. (Toplu iş dosyasına başka bir satır da ekledim " exit "böylece yönetici olmayan cmd penceresini kapatır)
Tony Brix

Neden cmd'yi (ve herhangi bir parametreyi) sona yerleştirmiyorsunuz? Komuta sahip olmak, okunabilirlik açısından garip.
Eric Fossum

38

Belgelere göre , Windows güvenlik modeli ...

her zaman yönetici ayrıcalıkları vermez. Yöneticiler bile , yükseltilmiş ayrıcalıklar gerektirmeyen idari olmayan görevleri gerçekleştirdiklerinde standart ayrıcalıklar altında çalışırlar.

Yeni görev oluştur iletişim kutusunda ( Görev Yöneticisi> Dosya> Yeni görevi çalıştır ) Bu görevi yönetici ayrıcalıklarıyla oluştur seçeneğine sahipsiniz , ancak komut satırını kullanarak ayrıcalıkları etkili bir şekilde yükseltmenin yerleşik bir yolu yoktur.

Ancak, ayrıcalıkları komut satırından yükseltmek için kullanabileceğiniz bazı üçüncü taraf araçları (dahili olarak Windows API'lerine dayanan) vardır:

NirCmd :

  1. İndirin ve açın.
  2. nircmdc elevate cmd

windosu :

  1. Kurun: npm install -g windosu( yüklü node.js gerektirir )
  2. sudo cmd

3
Teşekkür ederim, nircmdc elevate route delete 0.0.0.0 mask 0..0.0 192.168.1.1sonunda çalıştı. runas /user:...Zaten bir yönetici olmasına rağmen bir parola için sorulan diğer yollar (öldürülmüş toplu mod).
Marcos

Teşekkürlernircmdc elevate cmd
tim

4
İntalling sonra nircmd, bu Linux gibi çalışmak zorunda sudo, bir oluşturmak sudo.batbu içerik ile yolu dosyayı: nircmd elevate %*. Sonra, örneğin, yapabileceğisudo net stop W3SVC
Kip

1
Sanırım windosu bunu yapmanın en basit ve en zarif yolu, özellikle de bir geliştiriciyseniz ... teşekkürler dostum. Nix sistemindeymişim gibi hissediyorum: D
Emmanuel Mahuni

sevdim windosu:)
Finlay Roelofs

32

En iyi yanıta yorum eklemek için yeterli itibarım yok, ancak takma adların gücüyle aşağıdakileri yazarak kurtulabilirsiniz:

powershell "start cmd -v runAs"

Bu, user3018703 mükemmel çözümünün sadece daha kısa bir sürümüdür:

powershell -Command "Start-Process cmd -Verb RunAs"

26

Burada diğer cevapları denedikten sonra yaptığım basit yol

Yöntem 1: 3. taraf programı OLMADAN (bunu kullandım)

  1. Aşağıdaki içeriğe sahip (istediğiniz herhangi bir adla sudo.batdeğiştirebilirsiniz) adlı bir dosya oluşturunsudo powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
  2. İçinde sudo.batbir klasöre gidin PATH; bunun ne anlama geldiğini bilmiyorsanız, bu dosyalarıc:\windows\
  3. Şimdi sudoÇalıştır iletişim kutusunda ( win+r) veya gezgin adres çubuğunda çalışacak (bu en iyi bölüm :))

Yöntem 2: 3. taraf programı İLE

  1. NirCmd'yi indirin ve sıkıştırmasını açın.
  2. Aşağıdaki içeriğe sahip (istediğiniz herhangi bir adla sudo.batdeğiştirebilirsiniz) adlı bir dosya oluşturunsudo nircmdc elevate cmd /k "cd /d %cd%"
  3. nircmdc.exeVe sudo.batklasörünüzdeki bir klasöre taşıyın PATH; bunun ne anlama geldiğini bilmiyorsanız, bu dosyalarıc:\windows\
  4. Şimdi sudoÇalıştır iletişim kutusunda ( win+r) veya gezgin adres çubuğunda çalışacak (bu en iyi bölüm :))

Her iki çözüm çalışmaları da, ne yazık ki sonuçlanacaktır UAC üst (z sırasını-bilge) ama gösterilmesini iletişim değil alma odaklı . (Win10x64 v1607 build14393.447'de test edilmiştir.)
Ogmios

@Ogmios bu oldukça tuhaf. diyalog böyle başlatılmadığında düzgün çalışıyor mu? Bunu böyle sorunlar olmadan çok mutlu bir şekilde kullanıyorum. Belki de değiştirdiğiniz başka bir konfigürasyondan dolayı?
Dheeraj Bhaskar

Evet, UAC iletişim kutusu diğer tüm durumlarda (karşılaştığım) beklendiği gibi çalışıyor. Bu tek istisnadır. Ve elbette sistemimi başka şekillerde değiştirdim, ancak bu iletişim kutusunda gizli bir etkisi olabilecek hiçbir şey bulamadım.
Ogmios

@ Ogmios üzgünüm dostum, bunu düzeltmek için yapabileceğin başka bir şey düşünemiyorum. Sizin için daha iyi olup olmadıklarını görmek için muhtemelen diğer çözümleri denemelisiniz. Şerefe
Dheeraj Bhaskar

Powershell üçüncü bir taraf olmasa da, bir hisse senedi programı değildir ve hedefe ulaşmak için bir tür üçüncü taraf programı yazıyorsunuz.
2019

13

Her zaman nirsoft programları (örn. Nircmdc) ve sysinternals (örn. Psexec) kullanıyorum. Çok faydalıdırlar.

Ancak bir 3. parti programı istemiyorsanız veya yapamıyorsanız, işte başka bir yol, saf Windows.

Kısa cevap : Yükseltilmiş haldeyken, yükseltilmiş ayrıcalıklara sahip zamanlanmış bir görev oluşturabilirsiniz, daha sonra yükseltilmemişken daha sonra çağırabilirsiniz.

Orta uzunlukta cevap : yükseltilmiş görev oluştururken (ancak görev zamanlayıcı GUI'yi tercih ederim):

schtasks /create /sc once /tn cmd_elev /tr cmd /rl highest /st 00:00

Daha sonra yükseltmeye gerek yok,

schtasks /run /tn cmd_elev

Uzun cevap : Çok fazla kıpır kıpır ayrıntı var; blog yazıma bakın "UAC OLMADAN programı başlat, sistem başlangıcında ve toplu iş dosyalarında yararlı (görev zamanlayıcı kullanın)"


8

Bir toplu iş dosyası olarak aşağıdakiler , toplu iş dosyasının çağrıldığı dizinle aynı dizine ayarlanmış yol ile yükseltilmiş bir komut istemi açar.

set OLDDIR=%CD%
powershell -Command "Start-Process cmd -ArgumentList '/K cd %OLDDIR%' -Verb RunAs "

5

Bunu yapmanın en sevdiğim yolu, http://technet.microsoft.com/en-us/sysinternals/bb897553 adresinde bulunan SysInternals'dan PsExec.exe kullanmaktır.

.\psexec.exe -accepteula -h -u "$username" -p "$password" cmd.exe

"-H" anahtarı sihri yapandır:

-h Hedef sistem Vista veya üzeriyse, işlem varsa hesabın yükseltilmiş belirteciyle çalıştırılır.


1
Bunun çalışması için psexec.exe'nin özelliklerini düzenlemeniz ve uyumluluk sekmesinde "Yönetici Olarak Çalıştır" seçeneğini işaretlemeniz gerekir. Aksi takdirde şu hatayı alırsınız: PSEXESVC kurulu değil. Ancak psexec, cmd.exe'deki sekme anahtarıyla ilgili sorunlara neden olur. Klasör adlarını tamamlamak için sekme kullanılamaz.
Peter Quiring

Hangi ortamı denediğinizden emin değilim ama "Yönetici Olarak Çalıştır" ayarını değiştirmeme gerek yoktu (cmd.exe'yi sizinkinden uzak bir makinede çalıştırmaya mı çalışıyorsunuz?). Ayrıca sekme anahtarıyla ilgili sorun yok, dosya ve klasör adlarını başarıyla tamamlayabilirim (en azından Win8.1 ve Win10 üzerinde hem cmd hem de PowerShell komut satırlarından çalıştırarak test edildi)
David Rodriguez

Win10 kullanıyorum ve yerel olarak çalıştırıyorum. Neden benim başıma geldiğinden emin değilim, sana değil. Çalışmak için nircmd aldım ve sekme sorununa neden olmuyor.
Peter Quiring

Ayrıca birinin sekme tuşuyla otomatik olarak tamamlanamayacağını da fark ettim, ancak en azından bu, başka bir kullanıcı bağlamında yükseltilmiş cmd istemini açacaktı, yukarıdaki önceki yöntemlerin denediğimde başaramadığı görülüyordu. '-H' bayrağı harika (Windows 10), harika çalışıyor.
user1840734

4

/savecredAnahtarı kullanarak toplu iş dosyasının gerçek yönetici hesabının kimlik bilgilerini kaydetmesini sağlayın. Bu, ilk kez kimlik bilgilerini isteyecek ve ardından şifrelenmiş parolayı kimlik bilgileri yöneticisinde saklayacaktır. Daha sonra, toplu işin sonraki tüm çalıştırmaları için, tam yönetici olarak çalışacak, ancak kimlik bilgileri yöneticisinde şifrelenmiş olarak saklandığı ve son kullanıcı parolayı alamadığı için kimlik bilgileri istenmeyecektir. Aşağıdakiler, tam yönetici ayrıcalıklarına sahip yükseltilmiş bir CMD'yi açmalıdır ve yalnızca ilk seferinde parola istenir:

START c:\Windows\System32\runas.exe /user:Administrator /savecred cmd.exe

3

Dheeraj Bhaskar işin tarafından sağlanan her iki çözümleri olsa da, ne yazık ki sonuçlanacaktır UAC üst (z sırasını-bilge) gösterilmesini iletişim fakat değil alma odaklı böylece ben de ihtiyaç için, (odaklanmış pencere arayan cmd / Powershell penceresidir) fareyi tutup "evet" e tıklayın veya Alt + Shift + Tab kullanarak UAC penceresini seçin. (Win10x64 v1607 build14393.447'de test edilmiştir; UAC = "[...] karartmayın [...]" .)

Aşağıdaki çözüm, iki dosya kullandığından biraz gariptir, ancak doğru odak sırasını korur, bu nedenle fazladan fare / klavye eylemi gerekmez (UAC iletişim kutusunu onaylamanın yanı sıra: Alt + Y ).

  1. cmdadm.lnk (kısayol özellikleri / Gelişmiş ... / Yönetici olarak çalıştır = AÇIK) %SystemRoot%\System32\cmd.exe /k "cd /d"
  2. su.bat @start cmdadm.lnk %cd%

İle çalıştırın su.


Maalesef bunu yeniden üretemiyorum. Çözümlerimden herhangi birini kullandığımda. UAC istemim odaklandı ve
zirvede

3

Bir süredir kullanıyorum Elevate.

Açıklama - This utility executes a command with UAC privilege elevation. This is useful for working inside command prompts or with batch files.

'İ' bin.x86-64\elevate.exeden .zipiçine kopyalıyorum C:\Program Files\elevateve bu yolu kendi yoluma ekliyorum PATH.

Sonra GitBash elevate sc stop W3SVC, IIShizmeti kapatmak gibi bir şey çalıştırabilirim .

Komutu çalıştırmak bana UACklavye kontrolüyle düzgün şekilde odaklanmış iletişim kutusunu veriyor ve iletişim kutusunu kabul ettiğimde kabuğuma geri dönüyorum.


3

..

@ECHO OFF
SETLOCAL EnableDelayedExpansion EnableExtensions
NET SESSION >nul 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO ELEVATE
GOTO :EOF

:ELEVATE
SET this="%CD%"
SET this=!this:\=\\!

MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('CMD', '/K CD /D \"!this!\"', '', 'runas', 1);close();"
EXIT 1

bu komut dosyasını system32 içinde "god.cmd" olarak veya yolunuzun yönlendirdiği ...

e: \ mypictures \ 'da bir cmd açarsanız ve tanrı yazarsanız, sizden kimlik bilgilerini isteyecek ve sizi yönetici ile aynı yere geri götürecektir ...


1
powershell havalı amazz modüllerine ihtiyacı var ... im oldscool ... sadece sisteme ihtiyacım var ...
jOte-

Bu yükseltme yöntemi / numarası uzun yollar / dosya adları için de işe yarıyor mu? Yoksa onun yerine "% ~ snx0" veya "% ~ dpsnx0" mi kullanmalıyım?
script'n'code

2

Yukarıdaki diğer çözümlerden bazılarına benzer şekilde elevate, basit komutlardan toplu iş dosyalarına ve karmaşık PowerShell komut dosyalarına kadar her şeyi çalıştırmayı etkinleştirmek için yürütme politikasını atlayarak yükseltilmiş bir PowerShell penceresi çalıştıran bir toplu iş dosyası oluşturdum . Kullanım kolaylığı için C: \ Windows \ System32 klasörünüze yapıştırmanızı tavsiye ederim.

Orijinal elevatekomut görevini yürütür, çıktıyı yakalar, oluşturulan PowerShell penceresini kapatır ve ardından yakalanan çıktıyı orijinal pencereye yazarak geri döner.

Ben iki varyantı, oluşturulan elevatepve elevatexsırasıyla duraklatma ve daha çalışmaları için PowerShell penceresini açık tutmak.

https://github.com/jt-github/elevate

Ve bağlantımın ölmesi durumunda, işte orijinal yükseltme toplu dosyasının kodu:

@Echo Off
REM Executes a command in an elevated PowerShell window and captures/displays output
REM Note that any file paths must be fully qualified!

REM Example: elevate myAdminCommand -myArg1 -myArg2 someValue

if "%1"=="" (
    REM If no command is passed, simply open an elevated PowerShell window.
    PowerShell -Command "& {Start-Process PowerShell.exe -Wait -Verb RunAs}"
) ELSE (
    REM Copy command+arguments (passed as a parameter) into a ps1 file
    REM Start PowerShell with Elevated access (prompting UAC confirmation)
    REM     and run the ps1 file
    REM     then close elevated window when finished
    REM Output captured results

    IF EXIST %temp%\trans.txt del %temp%\trans.txt
    Echo %* ^> %temp%\trans.txt *^>^&1 > %temp%\tmp.ps1
    Echo $error[0] ^| Add-Content %temp%\trans.txt -Encoding Default >> %temp%\tmp.ps1
    PowerShell -Command "& {Start-Process PowerShell.exe -Wait -ArgumentList '-ExecutionPolicy Bypass -File ""%temp%\tmp.ps1""' -Verb RunAs}"
    Type %temp%\trans.txt
)

0

Yükseltilmiş bir kısayolla kullanmak için geçici bir ortam değişkeni kullanabilir (

start.cmd

setx valueName_betterSpecificForEachCase %~dp0
"%~dp0ascladm.lnk"

ascladm.lnk (kısayol)

_ properties\advanced\"run as administrator"=yes

(yol değişikliklerini yapmak için geçici olarak oluşturmanız gerekir env.Variable)

_ properties\target="%valueName_betterSpecificForEachCase%\ascladm.cmd"

_ properties\"start in"="%valueName_betterSpecificForEachCase%"

ascladm.cmd

setx valueName_betterSpecificForEachCase=
reg delete HKEY_CURRENT_USER\Environment /F /V valueName_betterSpecificForEachCase
"%~dp0fileName_targetedCmd.cmd"

) (hedeflenenCmd yükseltilmiş cmd penceresinde yürütülür)

3 dosya olmasına rağmen, her şeyi (targetCmd dahil) bazı alt klasöre yerleştirebilir (klasörAdı'nı yamalara eklemeyi unutmayın) ve "start.cmd" yi hedefin bir adıyla yeniden adlandırabilirsiniz.

Benim için bunu yapmanın en doğal yolu gibi görünüyor, ancak cmd gerekli komuta sahip değil


Yukarıdaki tüm çözümleri okudum ve anladım. Senin adımlarını anlamıyorum. En iyi artıları ve eksileri olan çözümü seçiyorum.
Dzmitry Lahoda

0

ExecElevated.exe (13KB) aracının işi yapacağından emin değilim .... ama olabilir. Ya da en azından benim yaptığım gibi bu sayfaya gelen benzer ihtiyaçları olan başkaları için faydalı olun (ancak çözümü bulamadım, bu yüzden aracı .Net'te kendim oluşturdum).

Yükseltilmiş belirteçli bir uygulamayı yürütür (yönetici modunda). Ancak onaylamak için bir UAC iletişim kutusu alacaksınız! (belki UAC devre dışı bırakıldıysa, test etmediyse).

Ve aracı çağıran hesabın da yöneticisi olmalıdır. tabii ki hakları.

Kullanım örneği:

ExecuteElevated.exe "C:\Utility\regjump.exe HKCU\Software\Classes\.pdf"

2
Sadece "Bu henüz test edilmemiş olabilir" ve tabii ki "emin değilim" yanıtlarını seviyorum ....
Giridhar Karnik

1
bağlantı koptu.
Dzmitry Lahoda

Bağlantı yeniden kuruldu, bunun için özür dilerim
MrCalvin

0

Dheeraj Bhaskar'ın Powershell ile yönteminde, en azından Powershell'in Windows 10 enkarnasyonu için eksik bir boşluk var.

Sudo.bat dosyasındaki komut satırı şöyle olmalıdır:

powershell.exe -Command "Start-Process cmd \"/k cd /d %cd% \" -Verb RunAs"

% Cd% sonrasındaki fazladan boşluğa dikkat edin

;) Frode


0

Explorer ile entegre etmenin bir yolu burada. Windows Gezgini'nde herhangi bir klasöre sağ tıkladığınızda ekstra bir menü öğesi açılır:

Windows Gezgini Entegrasyonu

İşte adımlar:

  1. Şu anahtarı oluşturun: \ HKEY_CLASSES_ROOT \ Folder \ shell \ dosherewithadmin
  2. Varsayılan değerini, menü öğesi metni olarak görünmesini istediğiniz şeye değiştirin. Ex "Yönetici Olarak DOS Kabuğu"
  3. Bu başka bir anahtarı oluşturun: \ HKEY_CLASSES_ROOT \ Folder \ shell \ dosherewithadmin \ command
  4. Varsayılan değerini buna değiştirin, ipsis litteris: powershell.exe -Command "Start-Process -Verb RunAs 'cmd.exe' -Args '/ k pushd"% 1 "'"
  5. Bitti. Şimdi herhangi bir klasöre sağ tıklayın ve öğenizi diğer öğelerin içinde göreceksiniz.

* Herhangi bir sürücüde çalışmasına izin vermek için cd yerine pushd kullanın. :-)


-1

Aşağıdaki sözdizimini kullanabilirsiniz, ben de aynı soruyu sormuştum ve bir betik gerekmesi gerektiğini düşünmemiştim.

runas / profil / kullanıcı: etki alanı \ kullanıcı adı cmd

Bu benim için çalıştı, ağınızda farklı olabilir.


-1

Sadece şu komutu kullanın: runas / noprofile / user: yönetici cmd


-2

Bu aşağıdaki komutu cmd'de kullanarak kolayca yaptım

runas / netonly / kullanıcı: Yönetici \ Yönetici cmd

bu komutu yazdıktan sonra, Yönetici şifrenizi girmeniz gerekir (Yönetici şifrenizi bilmiyorsanız, boş bırakın ve Enter'a basın veya benim için çalışmış bir şey yazın) ..


bana yardım etmedi
Dzmitry Lahoda

@DzmitryLahoda aldığınız hatayı bana kısaca anlatır mısınız?
Harish Regada

-2

Windows + X tuşuna basın ve artık yönetici haklarına sahip Powershell veya Komut İstemi'ni seçebilirsiniz. Yöneticiyseniz çalışır. Sistem sizin değilse işlev kullanılamayabilir.


-5

Yükseltilmiş bir cmd'yi açmanın birkaç yolu vardır, ancak yalnızca yönteminiz standart komut isteminden çalışır. Sadece koymak gerek useryok username:

runas /user:machinename\adminuser cmd

Microsoft topluluğundan ilgili yardıma bakın .


4
Bu, yükseltilmiş bir komut çalıştırmakla aynı şey değildir, çünkü yükseltilmiş bir cmd penceresi açtığımda ve "whoami" yazdığımda, yükseltilmemiş bir pencereyle aynı sonucu getiriyor. Her iki durumda da "whoami / all" komutunu çalıştırdığımda, aynı kullanıcı için izinler açısından farklılıkları görebiliyorum.
Constantino Cronemberger

-5

runas /user:domainuser@domain cmdYükseltilmiş bir istemi başarıyla açan kullandım .


Başka bir kullanıcının kimlik bilgilerini gerektirir. Zaten Yöneticiyseniz ve bir uygulamayı sağ tıklayıp yönetici olarak çalıştırmayı seçtiğinizde olduğu gibi yükseltilmiş ayrıcalıklarla çalıştırmak istiyorsanız ve parola istenmiyorsa, yalnızca bir onay iletişim kutusu, o zaman başka bir şeye ihtiyacınız var. Buraya o cevabı aramaya geldim ama burada görünmüyor.
Paul-Sebastian Manole
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.