Ejecutar como administrador desde la línea de comandos en Windows 8

11

Estoy tratando de ejecutar el Bloc de notas como administrador para poder editar mi archivo de hosts desde la línea de comandos.

Lo he intentado runas /user:(myusername)\administrator "notepad c:\windows\system32\drivers\etc\hosts", luego ingreso mi contraseña y obtengo

ERROR DE RUNAS: no se puede ejecutar - Bloc de notas c: \ windows \ system32 \ drivers \ etc \ hosts 1327: las restricciones de la cuenta impiden que este usuario inicie sesión. Por ejemplo: las contraseñas en blanco no están permitidas, los tiempos de inicio de sesión son limitados, o se ha aplicado una restricción de política.

PD: Sé que si doy permiso a mi cuenta de usuario, puedo editarlo sin ejecutarlo como administrador. Pero me gustaría saber cómo hacer esto sin tener que cambiar los permisos en el archivo de hosts.

Kirill Fuchs
fuente

Respuestas:

7

Ok, la razón por la que esto no funciona es el modelo de seguridad en Windows Vista y versiones posteriores. Una cuenta en el grupo de administradores aún ejecuta todo lo que no está explícitamente elevado como un usuario limitado. La excepción es la Administratorcuenta, que ejecuta todo lo elevado. Por esta razón, se considera generalmente malo usarlo como su cuenta de inicio de sesión, y normalmente está deshabilitado.

Puede habilitarlo y luego runasinvocarlo como esa cuenta. Esto presenta algunos problemas: ahora está ejecutando con el entorno de un usuario diferente, que podría tener diferentes variables de entorno establecidas. 1

La mejor manera de hacer esto sería realmente elevarse como su usuario actual a través de UAC. Desafortunadamente, el símbolo del sistema estándar no incluye esa capacidad, pero tanto los programas de terceros como el PowerShell y WSHell (VBScript) integrados pueden hacerlo.


Tomando prestado de mi otra respuesta , puede invocar el comando PowerShell directamente con powershell -c:

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

que básicamente le dice a PowerShell que ejecute lo siguiente ( starttiene un alias Start-Process):

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

El truco aquí es pasar el verbo runas, disparando UAC.

Ni Start-Process -Verb runasel cmd estándar runaspasarán el directorio de trabajo actual , así que siempre use la ruta completa en cualquier comando que eleve de esta manera.

También tenga en cuenta que algunos argumentos como -cpueden chocar con los Start-Processargumentos, por lo que la forma más segura es:

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

1 Nota: esto solo se aplica a las variables de entorno del usuario . Las variables de entorno que establezca en un proceso padre no se transmiten por UAC ! Esto también se aplica runas, y es aún peor allí porque ni siquiera obtendrá los vars del usuario correcto.

Beto
fuente
No me funcionó con las comillas dobles.
Vince
@Ghodmode ¿Podría dar un ejemplo de la línea que intentó ejecutar? Si te refieres al último ejemplo, intenta mover la primera cita después de -c. (así que en -c "startlugar de "-c start)
Bob
Tenga en cuenta que el proceso de PowerShell no tiene que ejecutarse de forma elevada para ejecutar un programa como administrador.
jiggunjer
Es extraño que funcionara antes de una actualización de Windows 10 2019-03.
Qwerty
-1

Una cosa que podría intentar es abrir el símbolo del sistema como administrador y ejecutar el bloc de notas por allí. Solo escribe Notepad. Después de hacer eso desde allí, puede hacer clic en el archivo y luego abrir y navegar al archivo de hosts y abrirlo. Finalmente, puede guardar como de costumbre.

TylerDaNerd
fuente