Jak uruchomić program z wiersza poleceń z podwyższonymi uprawnieniami

44

Czy istnieje sposób na uruchomienie programu lub polecenia z podwyższonymi uprawnieniami, gdy jestem już w wierszu polecenia bez podniesionego poziomu uprawnień?

Dokładnie ta sama akcja, która zostałaby wykonana, gdy kliknę skrót programu i wybierz Uruchom jako administrator .

Polecenie runas prawdopodobnie nie jest rozwiązaniem - prosi o hasło, ale chcę tylko okno dialogowe UAC .

Lukas Cenovsky
źródło

Odpowiedzi:

14

Wygląda na to, że to narzędzie - Ukryty Start - zrobi to, co chcesz, jeśli użyjesz przełącznika / uac. Oto przykładowy wiersz poleceń:

hstart /UAC "notepad.exe"

Spowoduje to wyświetlenie okna dialogowego UAC zamiast pytania o hasło, tak jak robi to runas.

wprowadź opis zdjęcia tutaj

JeffP
źródło
2
Ostrzeżenie: ta mała użyteczność to 20 $. Dla osób z małą kieszenią zamiast tego użyj RunAdmin :)
WeGoToMars
Nie pojawia się to w systemie Windows 10
będzie
50

Istnieje sposób, aby to zrobić w PowerShell:

PS> Start-Process powershell -Verb runAs
Rustam
źródło
19
Wydaje się, że działa dobrze. Z wiersza poleceń możesz na przykład zrobićpowershell -Command "Start-Process 'C:\program.exe' -Verb runAs"
marsze
7
Należy to zaznaczyć jako właściwą / najlepszą odpowiedź IMO - działa bez narzędzi innych firm.
crimbo
5
Opierając się na @marsze - Fwiw, argumenty w najprostszym przypadku przechodzą w swoją wartość pojedynczego cudzysłowu, np powershell -Command "Start-Process 'gvim' 'c:\windows\system32\drivers\etc\hosts' -Verb runAs". Dzięki!
ruffin
Jak mogę potokować wyjście wiersza polecenia z podwyższonym poziomem uprawnień do mojego aktualnie wykonywanego skryptu?
kołodziej
@wheeler, jestem prawie pewien, że nie możesz tego zrobić, ale możesz zwrócić kod wyjścia:$p = Start-Process powershell -Verb runAs -ArgumentList "-Command ``"& { ``$Host.SetShouldExit(123) }``"" -PassThru; $p.ExitCode
Rustam
6

Opierając się na Rustama „s odpowiedzi , możesz:

  • Utwórz su.batplik wsadowy gdzieś w domyślnym% PATH%, używając następującej jednowierszowej:@powershell start -verb runas %*
  • Dodaj tę funkcję do swojego profilu PowerShell $ :function su {start -verb runas @args}

Teraz możesz wydawać su <command> [parameters]w dowolnej powłoce!

Nicolas Melay
źródło
2

RunAdmin to małe narzędzie (150 KB), które pozwala uruchamiać program z wiersza poleceń z podwyższonymi uprawnieniami (pokaże UAC). W przeciwieństwie do Hidden Start jest bezpłatny.

WeGoToMars
źródło
2

Działa to na wszystkich platformach, w tym na systemie Windows 10. Moje potrzeby są proste, być może możesz dostosować podejście, jeśli potrzebujesz zasilania .

Wymyśliłem mały skrypt o nazwie, sudo.cmdnazwany dla polecenia sudo systemu Linux. Działa wystarczająco dobrze, jak myśli. Naszkicowałem wymagania, kroki, które należy wykonać, a skrypt jest na dole z przykładem. Najpierw słowo ostrzeżenia.

OSTRZEŻENIE : Domyślnie polecenie jest uruchamiane w katalogu systemu Windows. cdNajpierwbędziesz chciał znaleźć sięw bezpiecznym miejscu.

wymagania :

  • Uruchom polecenie z Administratorem uprawnionym z systemu Windows .CMD
    lub powłoki cmd.
  • wymagają normalnej kontroli uprawnień systemu Windows do polecenia
    • Innymi słowy, polecenie NIE zadziała, dopóki nie zaloguję się na konto uprzywilejowane.
  • Wykonaj polecenie z uprawnieniami administratora i kontynuuj po wywołaniu w skrypcie. Poczekaj, aż polecenie się zakończy.
  • Bądź prosty, aby zawsze działał
  • Nie muszę wprowadzać hasła za każdym razem, jeśli jestem już zalogowany.
    • Lepszą metodą byłoby wprowadzenie hasła raz, podobnie jak prawdziwe sudopolecenie w systemie Linux.

rozwiązanie :

  1. Utwórz skrypt poleceń, aby wykonać wszystkie przekazane argumenty, sudo.cmd
  2. Tworzenie systemu Windows skrót do nazwy skryptu poleceń IT: sudo.lnk.
  3. Umieść sudoskrót w ścieżce systemu Windows, aby był widoczny.
  4. Edytuj właściwości skrótu, Start in:opróżnij ścieżkę.
  5. Kliknij przycisk [ Advanced] - SprawdźRun as Administrator
  6. Włącz skróty na ścieżce systemu Windows, użyj zmiennej środowiskowej PATHEXT, mianowicie.
d:> echo %PATHEXT%
    .lnk;.EXE;.CMD;.BAT;.COM

Po wpisaniu sudo dirw wierszu polecenia system Windows wyświetli

User Account Control

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

  [YES]  [NO]

Wyskakujące okienko kontroli dostępu. Jeśli klikniesz „[ NO]”, nic się nie stanie. System Windows wyświetli komunikat „ Access is denied.”.

Po kliknięciu „[ YES]” polecenie katalogu działa z podwyższonym poziomem uprawnień. Oczywiście prawdopodobnie potrzebujesz czegoś bardziej interesującego, takiego jak zatrzymanie lub zapytanie dotyczące usługi:

 sudo sc query SDRSVC

SDRSVC to nazwa usługi „Kopia zapasowa systemu Windows”, która pokazuje następujące informacje w osobnym oknie Cmd:

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

Sam sudo.cmdskrypt jest bardzo prosty. Jak powiedziałem, moje potrzeby są proste. Chcę tylko zatrzymać i uruchomić usługi podczas wdrażania kodu do testowania.

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

pauseKomenda czeka, aby przejrzeć wyniki. Jeśli pausewyjmiesz okno administracyjne, zamknie się i nie wiesz, czy polecenie zadziałało, czy nie. ERRORLEVELZ polecenia jest zwracany jako dobrze.

będzie
źródło
2

Działa to w systemie Windows 10, nie testowano z innymi wersjami systemu Windows.

Przykład otwierania notatnika z prawami administratora z cmd.exe, który uruchamia PowerShell, który prosi o podniesienie uprawnień.

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

Spowoduje to wyświetlenie okna dialogowego UAC (jeśli jest włączone) z [Tak] [Nie] lub poprosi o hasło administratora.

Innym przykładem otwarcia pliku hosts za pomocą notatnika jest:

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

Więcej informacji: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-6

Alex
źródło
Argumenty pliku wykonywalnego powinny być -ArgumentListparametrem, a nie tylko dodatkowymi parametrami do rozpoczęcia procesu.
Appleshell
0

Spójrz na Start ++ - ma tę funkcjonalność wraz z wieloma innymi przydatnymi rzeczami. Aby uruchomić z monitem UAC, po prostu użyj sudonazwy programu w wierszu polecenia, jak pokazano tutaj:

alternatywny tekst

Oto kilka innych funkcji (możesz także dodać własne):

alternatywny tekst

alternatywny tekst

John T.
źródło
Wygląda również dobrze, ale już używam FARR, który ma podobną funkcjonalność jak Start ++ i więcej (oczywiście z wyjątkiem sudo).
Lukas Cenovsky
2
Link mówi Witamy na: brandontools.com. Ta strona jest zaparkowana ZA DARMO. Chcesz kupić brandontools.com?
xmojmr
1
jak mówi @xmojmr, ta strona jest martwa. Jeśli znasz nową lokalizację (nie znalazłem jej tak szybko), powinieneś zaktualizować link w odpowiedzi.
Abel
-1

Możesz ustawić __COMPAT_LAYER=RunAsAdmin. Następnie polecenia będą działały w osobnej podwyższonej wysokości cmd.

Przykład .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

Wszystkie opcje trybu zgodności są wymienione w pakiecie MS Application Compatibility Toolkit.

Michel
źródło
Ten plik wsadowy jest strasznie uszkodzony. Nie można używać ;jako separatora komentarzy. „Pliki wsadowe nie rozpoznają średnika i generalnie powodują komunikat o błędzie dotyczący złego polecenia.”
DavidPostill