Estoy buscando escribir un script que tome la entrada del usuario, luego haga cambios en todo el sistema. Necesito que esto sea muy genérico, pero simplemente, en la parte superior, lo necesito para verificar si se está ejecutando 'Como administrador'. Si no es así, entonces quiero mostrar un mensaje para decirles eso; si es así, quiero que continúe. ¿Hay una forma constante de verificar esto? No estoy buscando iniciar una nueva sesión como Administrador, solo quiero detectar si actualmente se ejecuta como administrador
windows
command-line
El canadiense Luke REINSTATE MONICA
fuente
fuente
Respuestas:
Encontré esto en Stack Overflow :
fuente
net session >nul 2>&1 && echo Success || echo Failure
. Esta sintaxis compacta me parece más conveniente.Esto verifica el alto nivel de integridad. (funciona para Windows Vista y superior)
fuente
whoami
falta en XP.Muchas, muchas respuestas a esta y muchas otras preguntas en SE ( 1 , 2 , 3 , por nombrar algunas), todas las cuales son deficientes de esta forma u otra, han demostrado claramente que Windows no proporciona una utilidad incorporada confiable . Entonces, es hora de lanzar el tuyo.
Sin más trucos sucios:
Compile el siguiente programa (siga las instrucciones) u obtenga una copia precompilada . Esto solo debe hacerse una vez, luego puede copiarlo en
.exe
todas partes (por ejemplo, junto con Sysinternals Suite ).El código funciona en Win2k + 1 , con y sin UAC, dominio, grupos transitivos, lo que sea, porque se usa de la misma manera que el sistema en sí mismo cuando verifica los permisos.
chkadmin
imprime "Admin" o "No admin" y establece el código de salida en 0 o 1, respectivamente. La salida se puede suprimir con el/q
interruptor.chkadmin.c
:Para compilar, ejecute en el símbolo del sistema del SDK de Windows:
(si usa VS2012 +, se necesitan más ajustes si necesita apuntar a 2k / XP )
El método es cortesía de /programming/4230602/detect-if-program-is-running-with-full-administrator-rights/4230908#4230908
1 MSDN afirma que las API son XP + pero esto es falso.
CheckTokenMembership
es 2k + y el otro es aún más antiguo .fuente
La forma más limpia de verificar los privilegios de administrador usando un script CMD, que he encontrado, es algo como esto:
Este método solo usa CMD.exe incorporado, por lo que debería ser muy rápido. También verifica las capacidades reales del proceso en lugar de verificar SID o membresías de grupo, por lo que se prueba el permiso efectivo . Y esto funciona desde Windows 2003 y XP. Los procesos de usuario normales o los procesos sin elevación fallan en la sonda de directorio, donde como administrador o procesos elevados tienen éxito.
Esta prueba falla si el
Everyone
,BUILTIN\Users
u otro grupo similar recibe permiso de lectura para el sistema de perfiles. De acuerdo, esa es una configuración no estándar que no sea en máquinas configuradas como controladores de dominio de Windows que otorgan derechos de lectura / ejecución 'NT AUTHORITY \ Authenticated Users' para el perfil del sistema.fuente
verify
.cd .
Tiendo a usar (cd space dot) que establece el nivel de error en 0, no produce salida y también es útil para crear un archivo de longitud cero a través decd . >somefile
. Dicho esto, probé 'dir' en Windows 2000, XP, Vista, 2003, 2008, 2012, 7, 8 y 10. Para todos esos 'dir' borrará el nivel de error a 0 en caso de éxito si se ha configurado antes de 'dir'. Por lo tanto, no estoy seguro de por qué William usó 'verificar' para borrar primero el nivel de error.