Desde dentro de un archivo por lotes, me gustaría probar si estoy ejecutando con privilegios de administrador / elevados.
El nombre de usuario no cambia cuando se selecciona "Ejecutar como administrador", por lo que no funciona.
Si hubiera un comando disponible universalmente, que no tiene ningún efecto, pero requiere privilegios administrativos, entonces podría ejecutarlo y buscar un código de error para probar los privilegios. Hasta ahora, no he encontrado tal comando. Los comandos que he encontrado parecen devolver un solo código de error no específico, que podría indicar cualquier cosa, y son propensos a fallar por una variedad de razones.
Solo me importa Windows 7, aunque la compatibilidad con sistemas operativos anteriores estaría bien.
windows
command-line
cmd
Jeff
fuente
fuente
echo > somefile
en un directorio que requeriría privilegios de administrador. produciría un archivo como efecto secundario, pero podría verificar si hay colisiones y crear un nombre de archivo único como solución.Respuestas:
ADENDA : Para Windows 8 esto no funcionará; vea esta excelente respuesta en su lugar.
Encontré esta solución aquí: http://www.robvanderwoude.com/clevertricks.php
Suponiendo que eso no funcione y ya que estamos hablando de Win7, podría usar lo siguiente en Powershell si es adecuado:
Si no es así (y probablemente no, ya que propuso explícitamente archivos por lotes), entonces podría escribir lo anterior en .NET y devolver un código de salida de un exe basado en el resultado para que lo use su archivo por lotes.
fuente
AT
no funciona en Windows 8, pero encontré una solución mejor. Lo he publicado como respuesta a otra pregunta, aquí: stackoverflow.com/questions/4051883/… .ping
reemplazar la faltasleep
:)Este truco solo requiere un comando: escriba
net session
en el símbolo del sistema.Si NO es un administrador , recibirá un mensaje de acceso denegado.
Si es administrador , recibirá un mensaje diferente, el más común es:
Desde MS Technet :
fuente
There are no entries in the list.
en Windows 10 Pronet session >nul 2>&1 || (echo not admin&goto :eof)
Me gusta la sugerencia de Rushyo de usar AT, pero esta es otra opción:
Este enfoque también le permitiría distinguir entre un administrador no administrador y un administrador no elevado si así lo desea. Los administradores no elevados todavía tienen BUILTIN \ Administrators en la lista de grupos, pero no está habilitado.
Sin embargo, esto no funcionará en algunos sistemas de idiomas distintos del inglés. En su lugar, intente
(Esto debería funcionar en Windows 7, pero no estoy seguro de las versiones anteriores).
fuente
whoami/groups
y luego escanear las líneas manualmente. No tomaría mucho tiempo y el comando encaja en su cerebro.Más o menos lo que otros han puesto antes, pero como una línea que se puede poner al principio de un comando por lotes. (Bueno, generalmente después de @echo off.)
fuente
La forma más fácil de hacer esto en Vista, Win 7 y superior es enumerar los grupos de tokens y buscar el nivel de integridad actual (o el sid del administrador, si solo la pertenencia al grupo es importante):
Compruebe si estamos ejecutando elevado:
Comprueba si pertenecemos a administradores locales:
Compruebe si pertenecemos a administradores de dominio:
El siguiente artículo enumera los SID de nivel de integridad que usa Windows: http://msdn.microsoft.com/en-us/library/bb625963.aspx
fuente
Aquí hay una pequeña modificación de la respuesta de Harry que se enfoca en el estatus elevado; Estoy usando esto al comienzo de un archivo install.bat:
Esto definitivamente funcionó para mí y el principio parece ser sólido; de Chris Jackson de MSFT :
fuente
la solución:
no funciona en Windows 10
para todas las versiones de Windows puede hacerlo:
fuente
Leí muchas (¿la mayoría?) De las respuestas, luego desarrollé un archivo bat que me funciona en Win 8.1. Pensé en compartirlo.
Espero que alguien encuentre esto útil :)
fuente
Una versión "not-a-one-liner" de https://stackoverflow.com/a/38856823/2193477
fuente
Sé que llego muy tarde a esta fiesta, pero aquí está mi única línea para determinar la administración.
No se basa en el nivel de error, solo en
systeminfo
:Devuelve sí o no, según el estado de administrador del usuario ...
También establece el valor de la variable "admin" para que sea igual a sí o no según corresponda.
fuente
Si está ejecutando como un usuario con derechos de administrador, la variable de entorno SessionName NO se definirá y aún no tiene derechos de administrador al ejecutar un archivo por lotes.
Debe usar el comando "net session" y buscar un código de retorno de error "0" para verificar los derechos de administrador.
Ejemplo; - la primera declaración de eco es el carácter de campana
net session >nul 2>&1 if not %errorlevel%==0 (echo echo You need to start over and right-click on this file, echo then select "Run as administrator" to be successfull. echo.&pause&exit)
fuente
Aquí hay un método simple que he usado en Windows 7 a Windows 10. Básicamente, simplemente uso el comando "SI EXISTE" para buscar la carpeta Windows \ System32 \ WDI \ LogFiles. La carpeta WDI existe en cada instalación de Windows desde al menos 7 en adelante, y requiere privilegios de administrador para acceder. La carpeta WDI siempre tiene una carpeta LogFiles dentro. Por lo tanto, ejecutar "SI EXISTE" en la carpeta WDI \ LogFiles devolverá verdadero si se ejecuta como administrador y falso si no se ejecuta como administrador. Esto se puede usar en un archivo por lotes para verificar el nivel de privilegios y pasar a los comandos que desee en función de ese resultado.
Aquí hay un breve fragmento de código de ejemplo:
Tenga en cuenta que este método asume que los permisos de seguridad predeterminados no se han modificado en la carpeta WDI (lo que es poco probable que suceda en la mayoría de las situaciones, pero consulte la advertencia n. ° 2 a continuación). Incluso en ese caso, es simplemente una cuestión de modificar el código para buscar un archivo / carpeta común diferente que requiera acceso de administrador (System32 \ config \ SAM puede ser un buen candidato alternativo), o incluso podría crear el suyo propio específicamente para eso. propósito.
Sin embargo, hay dos advertencias sobre este método:
Deshabilitar UAC probablemente lo romperá con el simple hecho de que todo se ejecutará como administrador de todos modos.
Intentar abrir la carpeta WDI en el Explorador de Windows y luego hacer clic en "Continuar" cuando se le solicite agregará derechos de acceso permanentes para esa cuenta de usuario, rompiendo así mi método. Si esto sucede, se puede solucionar eliminando la cuenta de usuario de los permisos de seguridad de la carpeta WDI. Si por alguna razón el usuario DEBE poder acceder a la carpeta WDI con el Explorador de Windows, entonces tendrá que modificar el código para verificar una carpeta diferente (como se mencionó anteriormente, crear la suya propia específicamente para este propósito puede ser una buena opción) .
Entonces, admito que mi método no es perfecto ya que puede romperse, pero es un método relativamente rápido que es fácil de implementar, es igualmente compatible con todas las versiones de Windows 7, 8 y 10, y siempre que esté consciente de las advertencias mencionadas. sido 100% efectivo para mí.
fuente
Funciona para Win7 Enterprise y Win10 Enterprise
fuente