Jak otworzyć podwyższone cmd za pomocą wiersza poleceń w systemie Windows?


109

Jak otworzyć wiersz polecenia z podwyższonym poziomem uprawnień za pomocą wierszy poleceń w normalnym cmd?

Na przykład używam, runas /username:admin cmdale polecenie cmd, które zostało otwarte, nie wydaje się być podniesione! Jakieś rozwiązania?


Wypróbowałem wszystkie odpowiedzi. Najbardziej użyteczną odpowiedzią bez żadnego oprogramowania i najmniejszej liczby działań jest stackoverflow.com/a/40942828/9217577
TheGuardener

Odpowiedzi:


166

Napotkałem ten sam problem i jedynym sposobem, w jaki mogłem otworzyć CMD jako administrator z CMD, było wykonanie następujących czynności:

  1. Otwórz CMD
  2. Napisz powershell -Command "Start-Process cmd -Verb RunAs"i naciśnijEnter
  3. Pojawi się wyskakujące okienko z prośbą o otwarcie CMD jako administrator

2
Dobra odpowiedź. Dodałem i edytuję. Kiedyś uruchamiałem go w jednym wierszu poleceń!
Preet Sangha

1
Utworzyłem za pomocą tego plik wsadowy i zapisałem go jako admincmd.bat w folderze Windows, więc wszystko, co muszę zrobić, to wpisać „admincmd” i nacisnąć Enter i otworzy się polecenie administratora (dodałem również kolejną linię do pliku wsadowego z „ exit ”, więc zamyka okno cmd bez administratora)
Tony Brix

Dlaczego nie umieścić cmd (i innych parametrów) na końcu. Posiadanie polecenia jest dziwne z punktu widzenia czytelności.
Eric Fossum

38

Zgodnie z dokumentacją model zabezpieczeń systemu Windows ...

nie przyznaje nigdy uprawnień administracyjnych. Nawet administratorzy działają ze standardowymi uprawnieniami, gdy wykonują zadania inne niż administracyjne, które nie wymagają podwyższonych uprawnień.

Dostępna jest opcja Utwórz to zadanie z uprawnieniami administratora w oknie dialogowym Utwórz nowe zadanie ( Menedżer zadań> Plik> Uruchom nowe zadanie ), ale nie ma wbudowanego sposobu na efektywne podniesienie uprawnień za pomocą wiersza poleceń.

Istnieją jednak narzędzia innych firm (wewnętrznie opierające się na interfejsach API systemu Windows), których można użyć do podniesienia uprawnień z poziomu wiersza poleceń:

NirCmd :

  1. Pobierz go i rozpakuj.
  2. nircmdc elevate cmd

windosu :

  1. Zainstaluj go: npm install -g windosu(wymaga zainstalowanego node.js )
  2. sudo cmd

3
Dziękuję, w nircmdc elevate route delete 0.0.0.0 mask 0..0.0 192.168.1.1końcu zadziałało. Inne runas /user:...sposoby wymagały podania hasła, mimo że był już administratorem (tryb wsadowy zabity).
Marcos

Dzięki zanircmdc elevate cmd
tim

4
Po intalling nircmd, aby działać jak Linux sudo, należy utworzyć sudo.batplik w drogę z tej treści: nircmd elevate %*. Wtedy możesz na przykład zrobićsudo net stop W3SVC
Kip

1
myślę, że windosu jest zdecydowanie najprostszym i najbardziej eleganckim sposobem na zrobienie tego, zwłaszcza jeśli jesteś programistą… dzięki stary. Czuję się jak w systemie nix: D
Emmanuel Mahuni

kochany windosu:)
Finlay Roelofs

32

Nie mam wystarczającej reputacji, aby dodać komentarz do pierwszej odpowiedzi, ale dzięki sile aliasów możesz uciec po prostu wpisując:

powershell "start cmd -v runAs"

To tylko krótsza wersja doskonałego rozwiązania user3018703:

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

26

Prosty sposób, po wypróbowaniu innych odpowiedzi tutaj

Metoda 1: BEZ programu innej firmy (użyłem tego)

  1. Utwórz plik o nazwie sudo.bat(możesz zastąpićsudo dowolną nazwą) z następującą zawartością powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
  2. Przenieś sudo.batdo folderu w swoimPATH ; jeśli nie wiesz, co to oznacza, po prostu przenieś te pliki doc:\windows\
  3. Teraz sudobędzie działać w oknie dialogowym Uruchom ( win+r) lub w pasku adresu eksploratora (to najlepsza część :))

Metoda 2: Z programem innej firmy

  1. Pobierz NirCmd i rozpakuj go.
  2. Utwórz plik o nazwie sudo.bat(możesz zastąpićsudo dowolną nazwą) z następującą zawartością nircmdc elevate cmd /k "cd /d %cd%"
  3. Przenieś nircmdc.exei sudo.batdo folderu w swoimPATH ; jeśli nie wiesz, co to oznacza, po prostu przenieś te pliki doc:\windows\
  4. Teraz sudobędzie działać w oknie dialogowym Uruchom ( win+r) lub w pasku adresu eksploratora (to najlepsza część :))

Chociaż oba rozwiązania działają, niestety spowodują, że okno dialogowe UAC pojawi się na górze (w kolejności z), ale nie będzie skupione . (Testowane na Win10x64 v1607 build14393.447.)
Ogmios,

@Ogmios to raczej dziwne. czy okno dialogowe działa poprawnie, jeśli nie jest zainicjowane w ten sposób? Korzystam z tego bardzo szczęśliwie bez takich problemów. Może to z powodu innej konfiguracji, którą zmieniłeś?
Dheeraj Bhaskar

Tak, okno dialogowe UAC działa zgodnie z oczekiwaniami we wszystkich innych sytuacjach (napotkałem). To jedyny wyjątek. Oczywiście zmieniłem swój system na inne sposoby, ale nie znalazłem niczego, co mogłoby mieć ukryty wpływ na to okno dialogowe.
Ogmios,

@Ogmios, przepraszam, kolego, nie mogę wymyślić nic innego, co możesz zrobić, aby to naprawić. Prawdopodobnie powinieneś wypróbować inne rozwiązania, aby sprawdzić, czy są dla Ciebie lepsze. Pozdrawiam
Dheeraj Bhaskar,

Chociaż powershell nie jest stroną trzecią, nie jest to program giełdowy, a ty piszesz program innej firmy, aby osiągnąć cel.
undrline

13

Cały czas korzystam z programów nirsoft (np. Nircmdc) i sysinternals (np. Psexec). Są bardzo pomocni.

Ale jeśli nie chcesz lub nie możesz korzystać z programu innej firmy, oto inny sposób, czysty system Windows.

Krótka odpowiedź : na podwyższonym poziomie możesz utworzyć zaplanowane zadanie z podwyższonymi uprawnieniami, które możesz później wywołać, gdy nie masz podwyższonych uprawnień.

Odpowiedź średniej długości : na podwyższonym poziomie utwórz zadanie z (ale wolę GUI harmonogramu zadań):

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

Później, bez konieczności podnoszenia poziomu, wywołaj za pomocą

schtasks /run /tn cmd_elev

Długa odpowiedź : jest wiele niepewnych szczegółów; zobacz mój wpis na blogu "Uruchom program BEZ UAC, przydatny przy starcie systemu oraz w plikach wsadowych (użyj harmonogramu zadań)"


8

Poniższy plik wsadowy otworzy wiersz polecenia z podwyższonym poziomem uprawnień ze ścieżką ustawioną na ten sam katalog, z którego został wywołany plik wsadowy

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

5

Moim ulubionym sposobem jest użycie PsExec.exe firmy SysInternals, dostępnego pod adresem http://technet.microsoft.com/en-us/sysinternals/bb897553

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

Przełącznik „-h” to ten, który robi magię:

-h Jeśli system docelowy to Vista lub nowszy, uruchom proces z podniesionym tokenem konta, jeśli jest dostępny.


1
Aby to zadziałało, musisz edytować właściwości psexec.exe i na karcie kompatybilności zaznaczyć "Uruchom jako administrator". W przeciwnym razie pojawi się błąd: PSEXESVC nie jest zainstalowany. Ale psexec powoduje problemy z klawiszem tab w cmd.exe. Nie można używać tabulacji do uzupełniania nazw folderów.
Peter Quiring

Nie jestem pewien, w którym środowisku próbowałeś, ale nie musiałem zmieniać ustawienia „Uruchom jako administrator” (czy próbujesz uruchomić cmd.exe na zdalnym komputerze z Twojego?). Nie ma też problemów z klawiszem tabulatora, mogę z powodzeniem uzupełniać nazwy plików i folderów (przynajmniej testowane na Win8.1 i Win10, uruchamiane zarówno z linii poleceń cmd, jak i PowerShell)
David Rodriguez

Używam Win10 i uruchamiam go lokalnie. Nie wiem, dlaczego to się przytrafia mnie, a nie tobie. Mam nircmd do pracy i nie powoduje to problemu z zakładką.
Peter Quiring

Zauważyłem również, że nie można autouzupełniania za pomocą klawisza tabulatora, ale przynajmniej otworzyłoby to podniesiony monit cmd w kontekście innego użytkownika, czego poprzednie metody nie wydawały się osiągać, gdy próbowałem. Flaga `` -h '' jest świetna (Windows 10), działa świetnie.
user1840734

4

Utwórz plik wsadowy, aby zapisać poświadczenia faktycznego konta administratora, używając /savecredprzełącznika. Spowoduje to wyświetlenie monitu o poświadczenia za pierwszym razem, a następnie zapisze zaszyfrowane hasło w menedżerze poświadczeń. Następnie przy każdym kolejnym uruchomieniu partia będzie działać jako pełny administrator, ale nie będzie monitować o poświadczenia, ponieważ są one przechowywane w postaci zaszyfrowanej w menedżerze poświadczeń, a użytkownik końcowy nie może uzyskać hasła. Poniższe okno powinno otworzyć CMD z podwyższonym poziomem uprawnień z pełnymi uprawnieniami administratora i poprosić o hasło tylko za pierwszym razem:

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

3

Chociaż oba rozwiązania dostarczone przez Dheeraj Bhaskar działają, niestety spowodują, że okno dialogowe UAC pojawi się na górze (kolejność z), ale nie będzie skupione (okno z fokusem to okno cmd / powershell wywołującego), więc muszę albo chwyć mysz i kliknij „tak” lub wybierz okno UAC za pomocą Alt + Shift + Tab. (Testowane na Win10x64 v1607 build14393.447; UAC = „[...] nie przyciemniaj [...]” .)

Poniższe rozwiązanie jest nieco niezręczne, ponieważ używa dwóch plików, ale zachowuje prawidłową kolejność fokusu, więc nie są wymagane żadne dodatkowe działania myszy / klawiatury (poza potwierdzeniem okna dialogowego UAC: Alt + Y ).

  1. cmdadm.lnk (właściwości skrótu / Zaawansowane ... / Uruchom jako administrator = WŁ.) %SystemRoot%\System32\cmd.exe /k "cd /d"
  2. su.bat @start cmdadm.lnk %cd%

Biegnij z su.


Niestety nie mogę tego odtworzyć. Zawsze, gdy używam któregokolwiek z moich rozwiązań. Mój monit UAC jest skoncentrowany i na topie
Dheeraj Bhaskar

3

Używam już od jakiegoś Elevateczasu.

To opis - This utility executes a command with UAC privilege elevation. This is useful for working inside command prompts or with batch files.

Kopiuję bin.x86-64\elevate.exez folderu .zipdo C:\Program Files\elevatei dodaję tę ścieżkę do pliku PATH.

Wtedy GitBash mogę uruchomić coś takiego jak elevate sc stop W3SVCwyłączenie IISusługi.

Uruchomienie polecenia powoduje wyświetlenie UACokna dialogowego, odpowiednio skoncentrowanego za pomocą klawiatury, a po zaakceptowaniu okna wracam do mojej powłoki.


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

zapisz ten skrypt jako „god.cmd” w swoim systemie32 lub w innym miejscu, do którego prowadzi ścieżka ....

jeśli otworzysz cmd w e: \ mypictures \ i wpiszesz god, zapyta Cię o poświadczenia i przeniesie Cię z powrotem w to samo miejsce co administratora ...


1
powershell jest fajny, ale potrzebuje modułów ... im oldscool ... po prostu potrzebuję systemu ...
jOte-

Czy ta metoda / sztuczka podnoszenia uprawnień działa również w przypadku długich ścieżek / nazw plików? A może zamiast tego powinienem użyć „% ~ snx0” lub „% ~ dpsnx0”?
script'n'code

2

Podobnie jak w przypadku niektórych innych powyższych rozwiązań, utworzyłem plik elevate plik wsadowy, który uruchamia okno PowerShell z podwyższonym poziomem uprawnień, omijając zasady wykonywania, aby umożliwić uruchamianie wszystkiego, od prostych poleceń po pliki wsadowe po złożone skrypty PowerShell. Zalecam umieszczenie go w folderze C: \ Windows \ System32 dla ułatwienia użytkowania.

Oryginalne elevatepolecenie wykonuje swoje zadanie, przechwytuje dane wyjściowe, zamyka zwołane okno programu PowerShell, a następnie wraca, zapisując przechwycone dane wyjściowe w oryginalnym oknie.

Stworzyłem dwa warianty elevatepi elevatex, które odpowiednio wstrzymują i utrzymują otwarte okno PowerShell, aby uzyskać więcej pracy.

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

A na wypadek, gdyby mój link kiedykolwiek umarł, oto kod oryginalnego pliku wsadowego Elevate:

@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

Można użyć tymczasowej zmiennej środowiskowej do użycia ze skrótem z podwyższonym poziomem uprawnień (

start.cmd

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

ascladm.lnk (skrót)

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

(aby wprowadzić zmiany ścieżki, musisz tymczasowo utworzyć 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"

) (targetCmd jest wykonywany w podwyższonym oknie cmd)

Chociaż są to 3 pliki, możesz umieścić wszystko (w tym targetCmd) w jakimś podfolderze (nie zapomnij dodać nazwy folderu do poprawek) i zmienić nazwę „start.cmd” na jedyną nazwę celu

Dla mnie wygląda to na najbardziej natywny sposób robienia tego, podczas gdy cmd nie ma potrzebnego polecenia


Przeczytałem wszystkie powyższe rozwiązania i zrozumiałem je. nie rozumiem twoich kroków. wybieram rozwiązanie z najlepszymi zaletami i wadami.
Dzmitry Lahoda

0

Nie jestem pewien, czy narzędzie ExecElevated.exe (13KB) wykona zadanie ... ale może. Lub przynajmniej być przydatnym dla innych o podobnych potrzebach, którzy odwiedzili tę stronę tak jak ja (ale nie znalazłem rozwiązania, więc ostatecznie stworzyłem narzędzie samodzielnie w .Net).

Uruchomi aplikację z podwyższonym tokenem (w trybie administratora). Ale otrzymasz okno dialogowe UAC, aby potwierdzić! (może nie, jeśli UAC zostało wyłączone, nie testowałem tego).

Konto wywołujące narzędzie musi również mieć administratora. oczywiście prawa.

Przykład użycia:

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

2
Po prostu uwielbiam odpowiedzi z „To może jeszcze nie działać” i oczywiście tę z „nie jestem pewien” ....
Giridhar Karnik

1
link jest uszkodzony.
Dzmitry Lahoda

Link przywrócony, przepraszam za to
MrCalvin

0

W metodzie Dheeraj Bhaskar z Powershell brakuje w niej miejsca, przynajmniej w przypadku wcielenia Powershell w Windows 10.

Linia poleceń w jego sudo.bat powinna brzmieć

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

Zwróć uwagę na dodatkową spację po% cd%

;) Frode


0

Oto sposób na integrację z eksploratorem. Po kliknięciu prawym przyciskiem myszy dowolnego folderu w Eksploratorze Windows pojawi się dodatkowa pozycja menu:

Integracja z Eksploratorem Windows

Oto kroki:

  1. Utwórz ten klucz: \ HKEY_CLASSES_ROOT \ Folder \ shell \ dosherewithadmin
  2. Zmień jego wartość domyślną na dowolną, która ma się pojawiać jako tekst pozycji menu. Np. „DOS Shell as Admin”
  3. Utwórz ten inny klucz: \ HKEY_CLASSES_ROOT \ Folder \ shell \ dosherewithadmin \ command
  4. Zmień wartość domyślną na tę, ipsis litteris: powershell.exe -Command "Start-Process -Verb RunAs 'cmd.exe' -Args '/ k pushd"% 1 "'"
  5. Zrobione. Teraz kliknij prawym przyciskiem myszy dowolny folder, a zobaczysz swój element w innych elementach.

* Użyj pushd zamiast cd, aby umożliwić działanie na dowolnym napędzie. :-)


-1

Możesz użyć następującej składni, miałem to samo pytanie i nie sądziłem, że skrypt powinien być potrzebny.

runas / profile / user: domena \ nazwa użytkownika cmd

To zadziałało dla mnie, może być inaczej w Twojej sieci.



-2

Zrobiłem to łatwo, używając tego polecenia w cmd

runas / netonly / user: Administrator \ Administrator cmd

po wpisaniu tego polecenia musisz podać swoje hasło administratora (jeśli nie znasz swojego hasła administratora, pozostaw je puste i naciśnij Enter lub wpisz coś, zadziałało dla mnie).


nie pomogło mi
Dzmitry Lahoda

@DzmitryLahoda czy możesz poinformować mnie o błędzie, który dostałeś?
Harish Regada

-2

Naciśnij klawisz Windows + X i możesz teraz wybrać Powershell lub Command Prompt z uprawnieniami administratora. Działa, jeśli jesteś administratorem. Ta funkcja może być bezużyteczna, jeśli system nie jest Twój.


-5

Istnieje kilka sposobów otwierania polecenia cmd z podwyższonym poziomem uprawnień, ale tylko Twoja metoda działa ze standardowego wiersza polecenia. Wystarczy umieścić usernie username:

runas /user:machinename\adminuser cmd

Zobacz odpowiednią pomoc od społeczności Microsoft .


4
To nie to samo, co uruchomienie polecenia z podwyższonym poziomem uprawnień, ponieważ kiedy otwieram okno cmd z podwyższonym poziomem uprawnień i wpisuję „whoami”, daje to ten sam rezultat, co okno bez podwyższonego poziomu. Kiedy uruchamiam "whoami / all" w obu przypadkach widzę różnice w uprawnieniach tego samego użytkownika.
Constantino Cronemberger

-5

Użyłem, runas /user:domainuser@domain cmdktóry pomyślnie otworzył podwyższony monit.


Wymaga poświadczeń innego użytkownika. Jeśli jesteś już administratorem i chcesz działać z podwyższonymi uprawnieniami, na przykład po kliknięciu aplikacji prawym przyciskiem myszy i wybraniu opcji Uruchom jako administrator i nie jest wymagane żadne hasło, wystarczy okno dialogowe z potwierdzeniem, potrzebujesz czegoś innego. Przyszedłem tutaj, szukając odpowiedzi, ale wygląda na to, że mnie tu nie ma.
Paul-Sebastian Manole
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.