Como executar o programa a partir da linha de comando com direitos elevados

42

Existe uma maneira de executar um programa ou comando com direitos elevados quando já estou em uma linha de comando não elevada?

Exatamente a mesma ação que seria executada quando eu clico no atalho do programa e seleciono Executar como administrador .

O comando runas provavelmente não é uma solução - ele pede uma senha, mas eu só quero a caixa de diálogo UAC .

    
por Lukas Cenovsky 15.10.2009 / 17:33

8 respostas

15

Parece que este utilitário - Início oculto - fará o que você deseja se usar o / interruptor uac. Aqui está um exemplo de linha de comando:

hstart /UAC "notepad.exe"

Isto irá mostrar o diálogo do UAC em vez de pedir uma senha como o runas.

    
por 15.10.2009 / 17:47
47

Há uma maneira de fazer isso no PowerShell:

PS> Start-Process powershell -Verb runAs
    
por 17.09.2014 / 11:52
4

Com base em "> answer , você pode:

  • Crie um arquivo em lote su.bat em algum lugar em seu% PATH% padrão, com o seguinte one-liner: @powershell start -verb runas %*
  • Adicione esta função ao seu PowerShell $ profile :% código%

Agora você pode emitir function su {start -verb runas @args} em qualquer shell!

    
por 14.09.2017 / 17:54
2

RunAdmin é um pequeno utilitário (150Kb) que permite que você execute um programa a partir da linha de comando com direitos elevados (ele mostrará o UAC). E em frente ao Hidden Start é livre.

    
por 27.01.2017 / 20:21
2

Isso funciona para mim em todas as plataformas, incluindo o Windows 10. Minhas necessidades são simples, talvez você possa adaptar a abordagem se precisar de energia .

Eu criei um pequeno script chamado sudo.cmd chamado para o comando sudo do Linux. Funciona bem o suficiente, pensa. Eu descrevi os requisitos, os passos a seguir e o script está próximo do final com um exemplo. Primeiro uma palavra de aviso.

AVISO : O comando é executado no diretório System do Windows por padrão. Você vai querer cd em algum lugar seguro primeiro.

requisitos :

  • Execute o comando com o Administrador com privilégios do windows .CMD
    ou o cmd-shell.
  • exigem as verificações normais de privilégios do Windows no comando
    • Em outras palavras, o comando NÃO funcionará a menos que eu já esteja logado com uma conta privilegiada.
  • Execute o comando com permissão de administrador e continue quando chamado dentro de um script. Então aguarde o comando terminar.
  • Seja simples para que sempre funcione
  • Não é necessário digitar uma senha toda vez, se eu já estiver conectado.
    • Um método melhor seria se eu pudesse inserir a senha uma vez o comando sudo real no Linux.

solução :

  1. Crie um script de comando para executar todos os argumentos passados, sudo.cmd
  2. Crie um atalho do Windows para o nome do script de comando: sudo.lnk .
  3. Coloque o atalho sudo no seu PATH do Windows para que possa ser visto.
  4. Edite as propriedades de atalho, torne o caminho Start in: vazio.
  5. Clique no botão [ Advanced ] - verifique Run as Administrator
  6. Ative atalhos no caminho do Windows, use a variável de ambiente PATHEXT, viz.
d:> echo %PATHEXT%
    .lnk;.EXE;.CMD;.BAT;.COM

Quando você digita sudo dir na linha de comando, o Windows mostrará o

User Account Control

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

  [YES]  [NO]

Pop-up de controle de acesso. Se você clicar em "[ NO ]", nada acontecerá. O Windows mostrará uma mensagem " Access is denied. ".

Quando você clica em "[ YES ]", o comando de diretório é executado com um privilégio elevado. Claro que você provavelmente quer algo mais interessante, como parar ou consultar um serviço:

 sudo sc query SDRSVC

SDRSVC é o nome do serviço para "Serviço de Backup do Windows", isso mostra o seguinte em uma janela separada do 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 . . .

O script sudo.cmd é muito básico. Como eu disse, minhas necessidades são simples. Eu só quero parar e iniciar serviços enquanto implico código para testes.

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

O comando pause espera que você revise os resultados. Se você tirar pause da janela de administração fecha e você não sabe se o comando funcionou ou não. O ERRORLEVEL do comando é retornado também.

    
por 06.06.2017 / 03:35
0

Dê uma olhada no Start ++ - ele tem essa funcionalidade junto com muitas outras coisas úteis. Para rodar com o prompt do UAC, simplesmente use sudo e o nome do seu programa na linha de comando, como mostrado aqui:

Aquiestãoalgunsoutrosrecursos(vocêtambémpodeadicionarosseuspróprios):

    
por 15.10.2009 / 18:48
0

Isso funciona para o Windows 10 e não foi testado em outras versões do Windows.

Um exemplo para abrir o bloco de notas com direitos de administrador do cmd.exe que inicia o powershell que solicita as permissões elevadas.

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

Isso lhe dará uma caixa de diálogo do UAC (se ativada) com [Sim] [Não] ou solicitará a senha do administrador.

Outro exemplo para abrir o arquivo de hosts com o bloco de notas seria:

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

Mais informações: link

    
por 14.03.2018 / 16:49
-1

Você pode definir __COMPAT_LAYER = RunAsAdmin Então os comandos serão executados em um cmd elevado separado

exemplo bat:

;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"
;Disable elevation
set __COMPAT_LAYER=
;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

Todas as opções do Modo de Compatibilidade estão listadas no MS Application Compatibility Toolkit.

    
por 30.01.2017 / 11:42