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 Administrator
cuenta, 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 runas
invocarlo 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 ( start
tiene 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 runas
el cmd estándar runas
pasará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 -c
pueden chocar con los Start-Process
argumentos, 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.