Executar como administrador na linha de comando no Windows 8


11

Estou tentando executar o bloco de notas como administrador para poder editar meu arquivo de hosts na linha de comando.

Eu tentei runas /user:(myusername)\administrator "notepad c:\windows\system32\drivers\etc\hosts", então digitei minha senha e recebo

RUNAS ERROR: Não foi possível executar - bloco de notas c: \ windows \ system32 \ drivers \ etc \ hosts 1327: restrições de conta estão impedindo que este usuário entre. ou uma restrição de política foi aplicada.

PS: Se eu der permissão à minha conta de usuário, posso editá-la sem executar como administrador. Mas eu gostaria de saber como fazer isso sem precisar alterar as permissões no arquivo de hosts.

Respostas:


7

Ok, a razão pela qual isso não funciona é o modelo de segurança no Windows Vista e mais recente. Uma conta no grupo de administradores ainda executa tudo que não é explicitamente elevado como um usuário limitado. A exceção é a Administratorconta, que executa tudo elevado. Por esse motivo, geralmente é considerado ruim usá-lo como sua conta de login e normalmente está desativado.

Você pode habilitá-lo e depois runasinvocar como essa conta. Isso apresenta alguns problemas - agora você está executando o ambiente de um usuário diferente, que pode ter diferentes variáveis ​​de ambiente definidas. 1

A melhor maneira de fazer isso seria realmente elevar-se como seu usuário atual via UAC. Infelizmente, o prompt de comando padrão não inclui esse recurso - mas os programas de terceiros e o PowerShell e WSHell (VBScript) internos podem fazê-lo.


Tomando emprestado da minha outra resposta , você pode invocar o comando do PowerShell diretamente com powershell -c:

powershell -c start -verb runas notepad C:\Windows\System32\drivers\etc\hosts

que basicamente diz ao PowerShell para executar o seguinte (com o startalias de Start-Process):

Start-Process -Verb "runas" notepad C:\Windows\System32\drivers\etc\hosts

O truque aqui é passar o verbo runas, acionando o UAC.

Nem Start-Process -Verb runaso cmd padrão runaspassará no diretório de trabalho atual ; portanto, sempre use o caminho completo em todos os comandos que você elevar dessa maneira.

Observe também que alguns argumentos como -cpodem colidir com Start-Processargumentos; portanto, a maneira mais segura é:

powershell "-c start -verb runas commandname -argumentlist 'arg1 arg2'"

1 Nota: isso se aplica apenas às variáveis ​​de ambiente do usuário . As variáveis ​​de ambiente definidas em um processo pai não são transmitidas pelo UAC ! Isso também se aplica a runas, e é ainda pior lá, porque você não receberá os vars do usuário correto.


Não funcionou para mim com aspas duplas.
Vince

@Ghodmode Você poderia dar um exemplo da linha que tentou executar? Se você está se referindo ao último exemplo, tente mover a primeira cotação para depois da -c. (assim -c "start, em vez de "-c start)
Bob

Observe que o processo do PowerShell não precisa ser executado elevado para executar um programa como administrador.
jiggunjer

Estranho que ele estivesse funcionando antes de uma atualização do Windows 10 2019-03.
Qwerty


-1

Uma coisa que você pode tentar é abrir o prompt de comando como administrador e executar o bloco de notas por lá. Apenas digite Notepad. Depois de fazer isso a partir daí, clique em arquivo, abra e navegue até o arquivo hosts e abra-o. Finalmente, você pode salvar como normalmente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.