¿Cómo puedo comprobar si la secuencia de comandos por lotes tiene derechos de administrador?

Sé cómo hacer que se llame a sí mismo con runas, pero no cómo comprobar los derechos de administrador. La única solución que he visto son de crudo hack de puestos de trabajo o el uso de programas externos. Bueno, en realidad no me importa si es un hack de trabajo mientras se trabaja en Windows XP y versiones más recientes.

InformationsquelleAutor flacs | 2010-10-29

27 Comentarios

  1. 424

    Problemas

    blak3r /Rushyo‘s solución funciona muy bien para todo, excepto de Windows 8. Ejecución de AT en Windows 8 resultados en:

    The AT command has been deprecated. Please use schtasks.exe instead.
    
    The request is not supported.
    

    (ver captura de pantalla #1) y volverá %errorLevel% 1.

     

    Investigación

    Así que, fui a buscar otros comandos que requieren permisos elevados. rationallyparanoid.com tenía una lista de unos pocos, así que me fui corriendo cada comando en los dos extremos opuestos de la actual so de Windows (XP y 8) en la esperanza de encontrar un comando que se le niega el acceso a ambos OSs cuando se ejecuta con los permisos estándar.

    Finalmente, encontré una NET SESSION. Un verdadero, limpio, solución universal que no implican:

    • la creación o de la interacción con los datos en ubicaciones seguras
    • el análisis de datos obtenidos a partir de FOR bucles
    • buscar cadenas de caracteres para «Administrador»
    • utilizando AT (Windows 8 incompatibles) o WHOAMI (Windows XP incompatibles).

    Cada uno de los cuales tiene su propia seguridad, la usabilidad y los problemas de portabilidad.

     

    Pruebas

    He confirmado independientemente de que esto funciona en:

    • Windows XP x86
    • Windows XP x64
    • Windows Vista x86
    • Windows Vista x64
    • Windows 7 x86
    • Windows 7 x64
    • Windows 8 x86
    • Windows 8 x64

    (ver captura de pantalla #2)

     

    Aplicación /Uso

    Así, el uso de esta solución, simplemente hacer algo como esto:

    @echo off
    goto check_Permissions
    
    :check_Permissions
        echo Administrative permissions required. Detecting permissions...
    
        net session >nul 2>&1
        if %errorLevel% == 0 (
            echo Success: Administrative permissions confirmed.
        ) else (
            echo Failure: Current permissions inadequate.
        )
    
        pause >nul
    

    Disponible aquí, si usted es perezoso: https://dl.dropbox.com/u/27573003/Distribution/Binaries/check_Permissions.bat

     

    Explicación

    NET SESSION es un estándar de comando que se utiliza para «administrar el servidor de conexiones de equipo. Se utiliza sin parámetros, [que] muestra información acerca de todas las sesiones con el equipo local.»

    Así que, aquí está el proceso básico de mi implementación dada:

    1. @echo off
      • Desactivar la visualización de los comandos de
    2. goto check_Permissions
      • Saltar a la :check_Permissions bloque de código
    3. net session >nul 2>&1
      • Comando ejecutar
      • Ocultar visual salida de comando
        1. Redirigir la salida estándar (numérico de la manija 1 /STDOUT) corriente a nul
        2. Redirigir la salida de error estándar (flujo numérico de la manija 2 /STDERR) para el mismo destino como numérico de la manija 1
    4. if %errorLevel% == 0
      • Si el valor del código de salida (%errorLevel%) es 0 entonces esto significa que no se han producido errores y, por lo tanto, la inmediata anterior comando ejecutó con éxito
    5. else
      • Si el valor del código de salida (%errorLevel%) no es 0 entonces esto significa que se han producido errores y, por lo tanto, la inmediata anterior comando ejecutó sin éxito
    6. El código entre los respectivos paréntesis serán ejecutadas dependiendo de que se cumplan los criterios

     

    Capturas de pantalla

    Windows 8, EN %errorLevel%:

    Secuencia de comandos por lotes: cómo comprobar los derechos de administrador

     

    NET SESSION en Windows XP x86 de Windows 8 x64:

    Secuencia de comandos por lotes: cómo comprobar los derechos de administrador

     

    Gracias, @Tilka, para cambiar su respuesta a la mía. 🙂

    • +1 trabajo Impresionante! Una buena investigación. Tu post debe merece ser aceptado nuevo contestar.
    • buen trabajo amigo…..gracias +1
    • Este es azaming!
    • Esta solución normalmente funciona bien, pero si el «Servidor» (LanmanServer) se detiene el servicio, el código de error «Servidor de servicio no se ha iniciado» es el mismo código de error que recibes por «Acceso denegado» que resulta en un falso negativo. En otras palabras, hay casos en los que puede ejecutar esta comprobación con privilegios administrativos y se le devolverá el mismo error como sería sin esos privilegios.
    • He publicado una solución alternativa, que no tiene el mismo problema: stackoverflow.com/questions/4051883/…
    • el enlace de dropbox es obsoleta. cómo acerca de pegar el archivo bat en gist.github.com ?
    • seguro que no entiendo por qué no sólo el funcionamiento de un elevado cmd.exe (a través de un acceso directo) en lugar de este netsession cosas que pueden fallar. también, lo que significa que funciona en xp. windows xp no tiene la elevación, se había opuesto (muy pocos sabían acerca de ese frente, aunque).
    • ah OK elevados cmd.exe produce tonto cuadro de mensaje. pero aún así ¿qué es esto acerca de Windows XP?
    • Este código devuelve un falso positivo (al menos en Windows 7) si el usuario es un Usuario avanzado. Los usuarios avanzados también pueden «elevar» y, a continuación, ejecute net session con éxito (ERRORLEVEL = 0) – pero que en realidad no tiene derechos de administrador. El uso de openfiles (ver respuesta por parte de Lucrecio a continuación) no tiene este problema.
    • También se puede simplemente hacer net session >NUL 2>NUL && echo is admin || echo isnt admin
    • También whoami /grupos tiene un caso extremo, donde se obtiene la información incorrecta. Consulte stackoverflow.com/questions/4051883/…
    • También funciona en Windows 10 x64
    • Wow. El esfuerzo! Gracias
    • Este se bloquea el mensaje si el dispositivo de red no está funcionando plenamente (por ejemplo: Windows debugging). fltmc >nul 2>&1 funciona mejor en ese sentido.

  2. 74

    Anders solución funcionó para mí, pero yo no estaba seguro de cómo invertirlo para obtener el contrario (cuando no un administrador).

    Aquí está mi solución. Tiene dos de los casos, un SI y OTRO caso, y algunos de arte ascii para asegurar que las personas que realmente lo leen. 🙂

    Versión Mínima

    Rushyo publicado esta solución aquí: Cómo detectar si CMD ejecuta como Administrador/ha privilegios elevados?

    NET SESSION >nul 2>&1
    IF %ERRORLEVEL% EQU 0 (
        ECHO Administrator PRIVILEGES Detected! 
    ) ELSE (
        ECHO NOT AN ADMIN!
    )
    

    Versión que añade un mensaje de Error, se Detiene y Sale

    @rem ----[ This code block detects if the script is being running with admin PRIVILEGES If it isn't it pauses and then quits]-------
    echo OFF
    NET SESSION >nul 2>&1
    IF %ERRORLEVEL% EQU 0 (
        ECHO Administrator PRIVILEGES Detected! 
    ) ELSE (
       echo ######## ########  ########   #######  ########  
       echo ##       ##     ## ##     ## ##     ## ##     ## 
       echo ##       ##     ## ##     ## ##     ## ##     ## 
       echo ######   ########  ########  ##     ## ########  
       echo ##       ##   ##   ##   ##   ##     ## ##   ##   
       echo ##       ##    ##  ##    ##  ##     ## ##    ##  
       echo ######## ##     ## ##     ##  #######  ##     ## 
       echo.
       echo.
       echo ####### ERROR: ADMINISTRATOR PRIVILEGES REQUIRED #########
       echo This script must be run as administrator to work properly!  
       echo If you're seeing this after clicking on a start menu icon, then right click on the shortcut and select "Run As Administrator".
       echo ##########################################################
       echo.
       PAUSE
       EXIT /B 1
    )
    @echo ON
    

    Funciona en WinXP –> Win8 (incluyendo 32/64 bits).

    EDICIÓN: 8/28/2012 Actualizado para ser compatible con Windows 8. @BenHooper lo señaló en su respuesta a continuación. Por favor upvote su respuesta.

    • AT no funciona en Windows 8, pero he encontrado una solución mejor. He publicado como una respuesta aquí, en realidad: stackoverflow.com/questions/4051883/… (o podría simplemente desplácese hacia abajo, lo que sea).
    • Me pregunto si las dos líneas de if %errorLevel% == / EQU en primer código de bloque es un ERROR.. por favor corregir.
    • Seguro que fue. Gracias por la captura. He actualizado.
    • Posible que desee reemplazar el «Rushyo publicado esta solución aquí» con su comentario acerca de mí ahora que estás usando mi solución? 🙂
    • No trabajo para el Grupo de Administradores de Dominio agregado al Grupo de Administradores en el equipo local y el inicio de sesión con el Administrador de dominio de usuario.
    • No veo por qué eso sería materia. Está usted seguro de que comprende la secuencia de comandos correctamente? Es la comprobación de «elevado» privilegios » no se trata de si el usuario ha iniciado sesión en es una Función de Administrador.
    • ERRORLEVEL puede ser preestablecido de hacer la «IF %ERRORLEVEL% EQU 0» prueba inútil. Considerar algo como: SESIÓN de RED > nul 2>&1 && (echo bien) || (echo mal)

  3. 37

    Más problemas

    Como se ha señalado por @Lectrode, si intenta ejecutar el net session comando mientras el Servidor se detiene el servicio, recibirá el siguiente mensaje de error:

    The Server service is not started.
    
    More help is available by typing NET HELPMSG 2114
    

    En este caso el %errorLevel% variable se establece en 2.

    Nota El servicio de Servidor no se inicia en Modo Seguro (con o sin red).

    Buscando una alternativa

    Algo que:

    • se puede ejecutar fuera de la caja en Windows XP y versiones posteriores (32 y 64 bits);
    • no tocar el registro, o cualquier sistema de archivo/carpeta;
    • funciona independientemente de la configuración regional del sistema;
    • da resultados correctos incluso en Modo Seguro.

    Así que me arranca una vainilla de Windows XP de la máquina virtual y me empezó a desplazarse por la lista de aplicaciones en la C:\Windows\System32 carpeta, tratando de obtener algunas ideas. Después de ensayos y errores, este es el sucio (retruécano previsto) el enfoque que he llegado con:

    fsutil dirty query %systemdrive% >nul
    

    La fsutil dirty comando requiere derechos de administrador para ejecutar, y se producirá un error de otra manera. %systemdrive% es un variable de entorno que devuelve la letra de la unidad donde está instalado el sistema operativo. La salida se redirige a nul, lo ignora. El %errorlevel% variable se establece en 0 sólo a la ejecución exitosa.

    Aquí es lo que la documentación dice:

    Fsutil dirty

    Consultas o establece un volumen de bit. Cuando un volumen de dirty bit está establecido, autochk comprueba automáticamente el volumen de errores la próxima vez que se reinicie el equipo.

    Sintaxis

    fsutil dirty {query | set} <VolumePath>
    

    Parámetros

    query           Queries the specified volume's dirty bit.
    set             Sets the specified volume's dirty bit.
    <VolumePath>    Specifies the drive name followed by a colon or GUID.
    

    Observaciones

    Un volumen del bit indica que el sistema de archivos puede estar en un estado incoherente. El bit se puede establecer porque:

    • El volumen es online y tiene cambios pendientes.
    • Se realizaron cambios en el volumen y el equipo se apaga antes de que los cambios fueron cometidos en el disco.
    • Se detectaron daños en el volumen.

    Si el bit se establece cuando se reinicie el equipo, chkdsk se ejecuta para comprobar la integridad del sistema de archivos, y para intentar solucionar cualquier problema con el volumen.

    Ejemplos

    A consulta el bit de la unidad C, escriba:

    fsutil dirty query C:
    

    Más investigación

    Mientras que la solución anterior funciona desde Windows XP en adelante, vale la pena agregar que Windows 2000 y Windows PE (Entorno Preinstalado) no vienen con fsutil.exe, así que tenemos que recurrir a algo más.

    Durante mis pruebas anteriores me di cuenta de que la ejecución de la sfc comando sin parámetros se originaría en:

    • un error, si usted no tiene suficientes privilegios;
    • una lista de los parámetros disponibles y su uso.

    Que es: no hay parámetros, ninguna de las partes. La idea es que podamos analizar el resultado y comprobar si llegamos a nada, pero un error:

    sfc 2>&1 | find /i "/SCANNOW" >nul
    

    La salida de error es el primer redirige la salida estándar, que se transfiere a la find comando. En este punto, hemos de buscar la sólo parámetro que es se admite en todas las versiones de Windows desde Windows 2000: /SCANNOW. La búsqueda distingue entre mayúsculas y minúsculas, y la salida es descartada por redirigirla a nul.

    Aquí es un extracto de la documentación:

    Sfc

    Analiza y verifica la integridad de todos los archivos de sistema protegidos y reemplaza las versiones incorrectas por versiones correctas.

    Observaciones

    Debe haber iniciado sesión como miembro del grupo Administradores para ejecutar sfc.exe.

    El Ejemplo De Uso

    Aquí están algunos de pegar y correr, ejemplos:

    Windows XP y versiones posteriores

    @echo off
    
    call :isAdmin
    if %errorlevel% == 0 (
    echo Running with admin rights.
    ) else (
    echo Error: Access denied.
    )
    
    pause >nul
    exit /b
    
    :isAdmin
    fsutil dirty query %systemdrive% >nul
    exit /b
    

    Windows 2000 /Windows PE

    @echo off
    
    call :isAdmin
    if %errorlevel% == 0 (
    echo Running with admin rights.
    ) else (
    echo Error: Access denied.
    )
    
    pause >nul
    exit /b
    
    :isAdmin
    sfc 2>&1 | find /i "/SCANNOW" >nul
    exit /b
    

    Se aplica a

    • Windows 2000
    • Windows XP
    • Windows Vista
    • Windows 7
    • Windows 8
    • Windows 8.1

    • De Windows PE
    • +1 soluciones Excelentes. El SFC solución, en particular, parece ser un seguro de verificación para todos los sistemas operativos en cuestión. Si yo venir a través de cualquier problema con cualquiera de estos informaré aquí.
    • Para cualquiera que quiera usar el SFC de verificación para todos los sistemas, usted necesita para obtener un poco creativo. Por alguna razón, a partir de Windows 8 SFC salidas de los caracteres individuales solamente. Con el fin de analizar correctamente la salida, usted necesita hacer lo siguiente: setlocal enabledelayedexpansion for /f "tokens=* delims=" %%s in ('sfc 2^>^&1^|MORE') do @set "output=!output!%%s" echo "%output%"|findstr /I /C:"/scannow">nul 2>&1 (3 líneas). Esto debería funcionar en Windows 2000 a través de Windows 2012 R2. En una nota de lado, yo prefiero FINDSTR ya que generalmente los procesos de cosas más rápido de ENCONTRAR.
    • Gran trabajo, @and31415! No he probado personalmente su fsutil solución, pero, por lo que puedo ver, parece mucho más flexible que la de mi solución. Aunque, no es tan elegante, tal vez. 😉 Me alegra ver que, entre nosotros, que estamos recibiendo un excelente, fácil y flexible de administración de detección de solución de inmovilizado. 🙂
    • Cuando se ejecuta FSUTIL puede dejar fuera de la letra de la unidad y ejecutar sólo fsutil dirty query >nul elevados cuando devuelve un poco de ayuda de texto y %errorlevel%=0
    • Windows 10 ya no devuelve un valor distinto de cero nivel de error para fsutil dirty query >nul, sin embargo fsutil dirty query %systemdrive% >nul todavía funciona
    • ¿El sfc versión que funcione con Windows 10?
    • Si uno quiere negar, hacer esto de esta manera: if NOT .%errorlevel% == .0.

  4. 17
    >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"&&(
     echo admin...
    )
    
    • Parece que en algunos casos la prueba no siempre, incluso después de ser elevado. En mi caso cuando el guión fue llamado por mi solicitud.
    • Sólo se advirtió que cacls no funciona en WinPE
  5. 17

    una forma más de

    fltmc >nul 2>&1 && (
      echo has admin permissions
    ) || (
      echo has NOT admin permissions
    )
    

    fltmc comando está disponible en cada sistema de windows desde XP por lo que este debe ser bastante portable.


    Uno más de la solución de prueba en XP,8.1,7 (lamentablemente no funciona en todos los win10 máquinas – ver los comentarios.) – hay una variable específica =:: que sólo se presenta si la sesión de consola no tiene privilegios de administrador.Como no es tan fácil crear una variable que contiene = en el nombre de este es relativamente fiable para comprobar admin permiso (y bastante rápido, ya que no llame externo ejecutables)

    setlocal enableDelayedExpansion
    set "dv==::"
    if defined !dv! ( 
       echo has NOT admin permissions
    ) else (
       echo has admin permissions
    )
    
    • Además… fltmc funciona bien en WinPE 🙂 Gracias!
    • Gran solución. Probado y funcionando en windows 10.
    • Epic… ¿el set «dv==::» solución tiene algunos inconvenientes y limitaciones?
    • Bueno, por alguna razón el !dv! método siempre me dice que soy Administrador, aunque yo no los he clic con el botón derecho «Ejecutar como Administrador» el archivo de proceso por lotes (Windows 10). Realmente pensé que este método fue impecable. Me encantó este método porque no dependía de programas externos. Ahora estoy triste y no sé qué es lo que falla/poco fiables para mí 🙁
    • Yo no tenía win10 de la máquina de prueba en la que hay 🙁 . A pesar de la existencia de =:: variable es más bien un error representa una no existente , por lo que probablemente se fija en win10.
    • Probablemente hayan parcheado que sí. Fue divertido mientras duró.
    • Veo =:: se define por la no administración CMD en windows 10 1709. De todos modos no es una manera confiable, usted puede fácilmente la fuerza para ser definido, incluso en la administración CMD sesiones: subst :: c:\ & for %a in (::) do %a & set,

  6. 14

    solución alternativa:

    @echo off
    pushd %SystemRoot%
    openfiles.exe 1>nul 2>&1
    if not %errorlevel% equ 0 (
        Echo here you are not administrator!
    ) else (
        Echo here you are administrator!
    )
    popd
    Pause
    
    • Puede agregar una explicación a su respuesta?
    • corregido más detalle …
    • Mientras que este código puede responder a la pregunta que usted debe añadir un poco de explicación sobre el por qué lo hace.
    • Sí! Esto funciona correctamente incluso cuando el usuario es un Usuario de Poder (a diferencia de la «sesión de red»). No hay ninguna necesidad de que el pushd/popd, aunque. Sólo el funcionamiento de openfiles y comprobación de ERRORLEVEL es suficiente.
    • He estado usando esta solución y ha sido un trabajo agradable. El problema es que openfiles.exe no funciona en WinPE, de manera que el script devolverá siempre que el usuario no es administrador.
    • Documentación para openfiles.exe se puede encontrar en technet.microsoft.com/de-de/library/bb490961.aspx. 1> y 2>&1 se explica en la microsoft.com/resources/documentation/windows/xp/all/proddocs/…. nul se refiere a la null device
    • Parece que también funciona en Windows 10.

  7. 13

    No sólo de verificación, pero CONSEGUIR que los derechos de administrador de forma automática

    aka Automática de la UAC para Win 7/8/8.1 ff.
    : La siguiente es una genial uno con una característica más: Este lote fragmento no sólo de verificación de derechos de administrador, pero se hace de forma automática! (y pruebas antes, si viven en un UAC capaces OS.)

    Con este truco ya no tienes más tiempo para click derecho en el archivo por lotes «con derechos de administrador». Si usted se ha olvidado, para comenzar con la elevación de los derechos, UAC automáticamente! Además, en la primera se prueba, si OS necesidades y/o proporciona UAC, por lo que se comporta correcta por ejemplo, para Win 2000/XP hasta Win 8.1 probado.

    @echo off
    REM Quick test for Windows generation: UAC aware or not ; all OS before NT4 ignored for simplicity
    SET NewOSWith_UAC=YES
    VER | FINDSTR /IL "5." > NUL
    IF %ERRORLEVEL% == 0 SET NewOSWith_UAC=NO
    VER | FINDSTR /IL "4." > NUL
    IF %ERRORLEVEL% == 0 SET NewOSWith_UAC=NO
    
    
    REM Test if Admin
    CALL NET SESSION >nul 2>&1
    IF NOT %ERRORLEVEL% == 0 (
    
        if /i "%NewOSWith_UAC%"=="YES" (
            rem Start batch again with UAC
            echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
            echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
            "%temp%\getadmin.vbs"
            del "%temp%\getadmin.vbs"
            exit /B
        )
    
        rem Program will now start again automatically with admin rights! 
        rem pause
        goto :eof
    )
    

    El fragmento de código que combina algunos buenos lotes de patrones en común, especialmente de (1) la administración de la prueba en este hilo por Ben Hooper y (2) la UAC activación de leer en BatchGotAdmin y citado en el sitio de lote por robvanderwoude (respeto). (3) Para el sistema operativo identificaton por «VER | FINDSTR patrón» no puedo encontrar la referencia.)

    (Sobre algunas de las muy pequeñas restricciones, cuando «SESIÓN de RED» no funcionan como se menciona en otra respuesta, siéntase libre para insertar otro de esos comandos. Para mí que se ejecuta en modo seguro de Windows o especiales servicios estándar de abajo son tales y no un uso importante de los casos – para algunos administradores tal vez lo están).

    • Esto es genial! Nota una cosa – llamada desde el Visual Basic funciona como start – se abre la secuencia de comandos en una ventana nueva. Si usted desea ver los resultados – añadir una pause al final de la secuencia de comandos. También, es difícil de detectar, cuando estamos «permanecer» elevada, y cuando no es una repetición. Usted puede usar un argumento de línea de comandos para que: github.com/tgandor/meats/blob/master/lang_lawyer/cmd/…
    • Lo que si UAC requiere que el usuario introduzca su contraseña? Supongo que este código no darles derechos de Administrador de forma automática sin necesidad de que el usuario introduzca su contraseña de la primera 😉
    • No, claro que no. Pero si la contraseña es necesario o no, no es una diferencia: Lo que quise decir con «automáticamente» es, por supuesto, que los activadores de guión de Windows para PEDIR automáticamente por los derechos, no más. Sin una construcción de este tipo, la secuencia de comandos por lotes de fallar, si se inicia haciendo doble clic o similar. Para evitar que el usuario tenga que saber de antemano que el guión requiere de elevados derechos y tuvo que empezar de esa manera.
    • Así que mi script le permite al autor de un lote de archivos de desplazar el momento de la elevación necesarios para un momento durante la ejecución del lote que él o ella quiere. O en otras palabras: Para permitir más conveniente la ejecución de lo normal «doubleclick». Porque considero batchfiles normalmente utilizado por los profesionales o los usuarios con muy buenos conocimientos de Windows subyacente technologiy, yo no explicar en detalle.
  8. 11

    Tengo dos formas de control de acceso privilegiado, ambos son bastante fiables, y muy portable a través de casi cada versión de windows.

    1. Método

    set guid=%random%%random%-%random%-%random%-%random%-%random%%random%%random%
    
    mkdir %WINDIR%\%guid%>nul 2>&1
    rmdir %WINDIR%\%guid%>nul 2>&1
    
    IF %ERRORLEVEL%==0 (
        ECHO PRIVILEGED!
    ) ELSE (
        ECHO NOT PRIVILEGED!
    )
    

    Este es uno de los métodos más fiables, debido a su simplicidad, y el comportamiento de este muy primitivo comando es muy poco probable que cambie. Que no es el caso de otros construido en herramientas de línea de comandos como sesión de red que pueden ser desactivadas por admin/políticas de red, o comandos como fsutils que cambió la salida de Windows 10.

    * Funciona en XP y versiones posteriores

    2. Método

    REG ADD HKLM /F>nul 2>&1
    
    IF %ERRORLEVEL%==0 (
        ECHO PRIVILEGED!
    ) ELSE (
        ECHO NOT PRIVILEGED!
    )
    

    A veces no te gusta la idea de tocar el disco del usuario, incluso si es tan inofensivo como el uso de fsutils o crear una carpeta vacía, es
    es improbable, pero puede resultar en una falla catastrófica si algo va mal. En este escenario sólo puede comprobar el registro de los privilegios.

    Para esto usted puede tratar de crear una clave en HKEY_LOCAL_MACHINE el uso de permisos predeterminados obtendrá Acceso Denegado y la ERRORLEVEL == 1, pero si se ejecuta como Admin, se imprimirá «comando ejecutado con éxito» y ERRORLEVEL == 0. Dado que la clave ya existe él no tiene ningún efecto en el registro. Esta es probablemente la manera más rápida, y la REG está allí por un largo tiempo.

    * No disponible en pre NT (Win 9X).

    * Funciona en XP y versiones posteriores


    Ejemplo de trabajo

    Una secuencia de comandos que borrar la carpeta temp

    HTML:

    @echo off
    :main
        echo.
        echo. Clear Temp Files script
        echo.
    
        call :requirePrivilegies
    
        rem Do something that require privilegies
    
        echo. 
        del %temp%\*.*
        echo. End!
    
        pause>nul
    goto :eof
    
    
    :requirePrivilegies
        set guid=%random%%random%-%random%-%random%-%random%-%random%%random%%random%
        mkdir %WINDIR%\%guid%>nul 2>&1
        rmdir %WINDIR%\%guid%>nul 2>&1
        IF NOT %ERRORLEVEL%==0 (
            echo ########## ERROR: ADMINISTRATOR PRIVILEGES REQUIRED ###########
            echo # This script must be run as administrator to work properly!  #
            echo # Right click on the script and select "Run As Administrator" #
            echo ###############################################################
            pause>nul
            exit
        )
    goto :eof

    • Me gusta mucho el método del registro. Realmente puedo recordar, no tener que buscarlo cada vez que lo use.
  9. 6

    La forma más limpia para comprobar privilegios de administrador mediante una secuencia de comandos CMD, que he encontrado, es algo como esto:

    @echo off
    
    REM  Calling verify with no args just checks the verify flag,
    REM   we use this for its side effect of setting errorlevel to zero
    verify >nul
    
    REM  Attempt to read a particular system directory - the DIR
    REM   command will fail with a nonzero errorlevel if the directory is
    REM   unreadable by the current process.  The DACL on the
    REM   c:\windows\system32\config\systemprofile directory, by default,
    REM   only permits SYSTEM and Administrators.
    dir %windir%\system32\config\systemprofile >nul 2>nul
    
    REM  Use IF ERRORLEVEL or %errorlevel% to check the result
    if not errorlevel 1 echo has Admin privs
    if     errorlevel 1 echo has only User privs

    Este método sólo se utiliza CMD.exe builtins, por lo que debe ser muy rápido. También comprueba las capacidades reales del proceso más que la comprobación de la muerte de cuna o grupo de pertenencias, por lo que el eficaz permiso es probado. Y esto funciona tan lejos como Windows 2003 y XP. Normal de los procesos de usuario o nonelevated procesos de fallar el directorio de la sonda, donde como Admin o elevación de los procesos de éxito.

    • copyitright señaló que este no es fiable. Si usted visita la carpeta %windir%\system32\config\systemprofile en una ventana del Explorador y aprobar con la UAC la ventana de CMD con éxito puede dir el contenido. Conduce a pensar que han de elevación cuando no.
    • Szabo: correcto: i.imgur.com/fLJ8Igk.gif
  10. 5

    La siguiente intenta crear un archivo en el directorio de Windows. Si se consigue se va a eliminar.

    copy /b/y NUL %WINDIR%CF2EB6-94E6-4a60-91D8-AB945AE8CF38 >NUL 2>&1
    if errorlevel 1 goto:nonadmin
    del %WINDIR%CF2EB6-94E6-4a60-91D8-AB945AE8CF38 >NUL 2>&1
    :admin
    rem here you are administrator
    goto:eof
    :nonadmin
    rem here you are not administrator
    goto:eof
    

    Nota que 06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 es un GUID que se generó el día de hoy y se supone que es improbable un conflicto con un nombre de archivo existente.

    • +1 porque la aceptan respuesta causado infinidad de comandos de windows que se abre cuando el script se llama desde mi aplicación.
    • +1 para la velocidad (esto es mucho más rápido)
    • was generated today and it is assumed to be improbable to conflict with an existing filename. excepto si dos personas usan este código
  11. 5

    En la secuencia de comandos por lotes Elevar.cmd (ver este enlace), que he escrito para obtener derechos de administrador, yo la he hecho de la siguiente manera:

    :checkPrivileges
      NET FILE 1>NUL 2>NUL
      if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )
    

    Este es probado en Windows 7, 8, 8.1, 10 e incluso Windows XP y no necesita ningún tipo de recursos, tales como un directorio especial, archivo o clave del registro.

  12. 4

    La whoami /grupos de no trabajar en un caso. Si usted tiene UAC totalmente apagado (no sólo de notificación de apagado), y se inicia a partir de un Administrador del sistema, a continuación, elaborado el:

    runas /trustlevel:0x20000 cmd
    

    va a correr no elevada, pero emisión:

    whoami /groups
    

    va a decir que usted está elevada. Lo que está mal. He aquí por qué es malo:

    Cuando se ejecuta en este estado, si IsUserAdmin (https://msdn.microsoft.com/en-us/library/windows/desktop/aa376389(v=vs 85).aspx) devuelve FALSE y el UAC está completamente desactivado, y GetTokenInformation devuelve TokenElevationTypeDefault ( http://blogs.msdn.com/b/cjacks/archive/2006/10/24/modifying-the-mandatory-integrity-level-for-a-securable-object-in-windows-vista.aspx ), entonces el proceso es no ejecución elevado, pero whoami /groups afirma que es.

    realmente, la mejor manera de hacer esto desde un archivo por lotes es:

    net session >nul 2>nul
    net session >nul 2>nul
    echo %errorlevel%
    

    Que debe hacer net session dos veces, porque si alguien hizo un at antes de la mano, obtendrá la información incorrecta.

    • whoami /groups no está proporcionando la información incorrecta. Es sólo que runas /trustlevel te pone en un lugar inesperado: la ejecución sin privilegios de administrador, pero con alto nivel de integridad. Usted puede confirmar esto con Process Explorer. (Esto puede ser un error en runas pero no es un bug, en whoami.)
    • Harry, puedo oír lo que estás diciendo, pero ¿puede explicar esto? No entiendo el comentario con respecto a runas /trustlevel Cuando eres un administrador local, y UAC deshabilitado, la expedición de ese comando runas de un administrador del sistema que usted pone en un «usuario básico» seguridad de contexto. Mientras que en ese modo, no se pueden realizar operaciones administrativas. Tratar de «sesión de red», o fsutil» o cualquier otra utilidad que requiere acceso de administrador. Sin embargo, «whoami /grupos» le dice a usted que es elevada. Cuando no estás. El hecho de que llamar a GetTokenInformation devuelve «TokenElevationTypeDefault» indica que.
    • No estoy seguro de que entiendo lo que quieres decir por «whoami /grupos le dice a usted que es elevado»; no literalmente la cadena de salida «está elevado», no? ¿Qué parte de la salida de whoami /grupos están mirando?
    • Harry, veo que no estaba clara. El primer fondo, para que usted y yo estamos en la misma página. hay un puñado de trucos de la gente utiliza en la determinación de si un símbolo del sistema se está ejecutando actualmente en un estado que tiene acceso de administrador. Técnicas comunes son el uso de la incorporada ejemplo, el comando fsutil, en, whoami y «sesión de red». El uso de «a» está en desuso. Si usted busca en esta página, podrás ver ejemplos de utilización de fsutil, whoami y «sesión de red». Ver aquí para más ejemplos de whoami: stackoverflow.com/questions/7985755/…
    • Además, el uso de la frase «correr elevado» no es exactamente correcto. Lo que yo (y otros) debe decir «se ejecuta con privilegios de administrador». Si UAC está apagado, eso es simplemente ejecutando durante el inicio de sesión como administrador local pero no de forma explícita bajado la confianza de nivel como con runas. Si UAC está habilitado, esto significa que el usuario está ejecutando en un símbolo del sistema elevado.
    • Mi punto es que su respuesta como está escrito, dice que whoami /groups está dando información equivocada, que no lo es. Si lo que en realidad significa que whoami /groups está dando la información que puede ser malinterpretado, habría que decir que en su lugar, y proporcionar detalles.
    • Harry, yo aprecio sus comentarios. Así que vamos a hablar acerca de los detalles. «whoami /grupos» los informes de que el usuario es el Grupo llamado «Obligatorio Etiqueta\Alto Nivel Obligatorio». Eso es incorrecto, cuando el usuario no se está ejecutando con privilegio de administrador, que es el caso. No es que es de ser mal interpretado. El usuario no puede tener un Alto Nivel Obligatorio, mientras no se ejecuta en un contexto administrativo, que puede ser verificada con la GetTokenInformation llamada al método.
    • No creo que el kernel previene activamente un token que no tiene acceso de administrador a tener un alto nivel de integridad. Yo no trate de escribir el código de mi cuenta para comprobar los detalles, pero el Proceso de Explorer confirmó lo que whoami /grupos estaba diciendo, y parece poco probable que ellos estarían mal. Puedes mostrar el código que estás usando para comprobar esto? Puedo probarlo en mi sistema y ver si puedo obtener los mismos resultados o no. (NB: fichas construidas por el sistema operativo debe siempre tienen un alto nivel de integridad si y sólo si se tiene acceso de administrador, que es la razón por la que dije que este puede ser un fallo en runas.)
    • he escrito y publicado algunas código para probar esto.

  13. 2
    whoami /groups | find "S-1-16-12288" > nul
    if not errorlevel 1 (
      echo ...  connected as admin
    )
    
    • El problema aquí es, que se comprueba si el usuario tiene derechos de administrador. Pero la secuencia de comandos por lotes podría ejecutar sin derechos de administrador.
    • Además de whoami no es compatible con Windows XP.
    • También whoami /grupos tiene un caso extremo, donde se obtiene la información incorrecta. Consulte stackoverflow.com/questions/4051883/…
  14. 2

    Algunos servidores deshabilitar los servicios que el comando «net session» requiere.
    Esto se traduce en que la administración compruebe siempre diciendo que usted no tiene derechos de administrador para que pueda tener.

  15. 2

    Edición: copyitright ha señalado que este no es fiable. Aprobar el acceso de lectura con UAC permitirá dir a tener éxito. Tengo un poco más de secuencia de comandos para ofrecer otra posibilidad, pero no sólo-lectura.

    reg query "HKLM\SOFTWARE\Foo" >NUL 2>NUL && goto :error_key_exists
    reg add "HKLM\SOFTWARE\Foo" /f >NUL 2>NUL || goto :error_not_admin
    reg delete "HKLM\SOFTWARE\Foo" /f >NUL 2>NUL || goto :error_failed_delete
    goto :success
    
    :error_failed_delete
      echo Error unable to delete test key
      exit /b 3
    :error_key_exists
      echo Error test key exists
      exit /b 2
    :error_not_admin
      echo Not admin
      exit /b 1
    :success
      echo Am admin
    

    Viejo respuesta por debajo de

    Advertencia: no confiables


    Basado en un número de otras buenas respuestas aquí y puntos señalados por and31415 me encontré con que yo soy un fan de los siguientes:

    dir "%SystemRoot%\System32\config\DRIVERS" 2>nul >nul || echo Not Admin
    

    Pocas dependencias y rápido.

    • Esta solución se utiliza para trabajar para mí, pero desde que me he navegado hasta la ubicación y accede a la carpeta que usted necesita privilegios elevados para el ERRORLEVEL/código de salida es siempre 0 ahora, a pesar de ejecutar la secuencia de comandos como usuario estándar.
  16. 1

    Nota:
    La comprobación con cacls para \system32\config\system
    SIEMPRE se producirá un error en WOW64, (por ejemplo, %systemroot%\syswow64\cmd.exe /32 bits Total Commander) para secuencias de comandos que se ejecutan en 32 bits de shell en el sistema de 64 bits se realizará un bucle de siempre…
    Mejor sería la comprobación de los derechos de Prefetch directorio:

    >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\Prefetch\"
    

    Win XP a 7 probado, sin embargo no en WinPE como en windows 7 instalar.wim no hay tal dir ni cacls.exe

    También en winPE Y wow64 falla de verificación con openfiles.exe :

    OPENFILES > nul
    

    En Windows 7 se errorlevel con «1» con la información de que «sistema de Destino debe ser de 32 bits del sistema operativo»

    Tanto de entrada como probablemente también producirá un error en la consola de recuperación.

    Lo que funciona en Windows XP – 8 32/64 bits, en WOW64 y en WinPE son: dir creación de pruebas (SI la administración no la alfombra bombardeado directorio de Windows con permisos para todo el mundo…) y

    net session
    

    y

    reg add HKLM /F
    

    cheques.

    También una nota más en algunos windows XP y otras versiones, probablemente demasiado, dependiendo de administración de retoques) dependiendo de las entradas del registro de llamar directamente a bat/cmd de .script vbs se producirá con la información de que el bat/cmd archivos no están asociados con cualquier cosa…

    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
    cscript "%temp%\getadmin.vbs" //nologo
    

    De llamadas cmd.exe con el parámetro de bat/cmd archivo en la otra mano funciona OK:

    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "cmd.exe", "/C %~s0", "", "runas", 1 >> "%temp%\getadmin.vbs"
    cscript "%temp%\getadmin.vbs" //nologo
    
  17. 1

    Literalmente, docenas de respuestas en este y vinculado preguntas y en otros lugares en SÍ, todos los cuales son deficientes en esta u otra manera, han mostrado claramente que Windows no ofrece una fiable integrado en la consola de utilidad. Así, es el momento para desplegar su propio.

    El siguiente código C, basado en Detectar si se está ejecutando un programa con derechos de administrador total de, trabaja en Win2k+1, en cualquier lugar y en todos los casos (UAC, dominios, grupos transitivas…) – porque hace lo mismo que el propio sistema cuando comprueba los permisos. Esto es señal de que el resultado de ambos con un mensaje (que puede ser silenciada con un interruptor) y el código de salida.

    Sólo necesita ser compilado una vez, entonces usted puede simplemente copiar la .exe en todas partes – que sólo depende de kernel32.dll y advapi32.dll (he subido una copia).

    chkadmin.c:

    #include <malloc.h>
    #include <stdio.h>
    #include <windows.h>
    #pragma comment (lib,"Advapi32.lib")
    
    int main(int argc, char** argv) {
        BOOL quiet = FALSE;
        DWORD cbSid = SECURITY_MAX_SID_SIZE;
        PSID pSid = _alloca(cbSid);
        BOOL isAdmin;
    
        if (argc > 1) {
            if (!strcmp(argv[1],"/q")) quiet=TRUE;
            else if (!strcmp(argv[1],"/?")) {fprintf(stderr,"Usage: %s [/q]\n",argv[0]);return 0;}
        }
    
        if (!CreateWellKnownSid(WinBuiltinAdministratorsSid,NULL,pSid,&cbSid)) {
            fprintf(stderr,"CreateWellKnownSid: error %d\n",GetLastError());exit(-1);}
    
        if (!CheckTokenMembership(NULL,pSid,&isAdmin)) {
            fprintf(stderr,"CheckTokenMembership: error %d\n",GetLastError());exit(-1);}
    
        if (!quiet) puts(isAdmin ? "Admin" : "Non-admin");
        return !isAdmin;
    }

    1MSDN reclamaciones de la Api de XP+, pero esto es falso. CheckTokenMembership es 2k+ y el otro es incluso más. El último enlace también contiene una mucho más complicado que funcione incluso en el NT.

  18. 1

    PowerShell nadie?

    param (
        [string]$Role = "Administrators"
    )
    
    #check for local role
    
    $identity  = New-Object Security.Principal.WindowsIdentity($env:UserName)
    $principal = New-Object Security.Principal.WindowsPrincipal($identity)
    
    Write-Host "IsInRole('$Role'): " $principal.IsInRole($Role)
    
    #enumerate AD roles and lookup
    
    $groups = $identity::GetCurrent().Groups
    foreach ($group in $groups) {
        $trans = $group.Translate([Security.Principal.NTAccount]);
        if ($trans.Value -eq $Role) {
           Write-Host "User is in '$Role' role"
        }
    }
    
  19. 1

    Aquí es otro que añadir a la lista 😉

    (un intento de creación de archivo en la ubicación del sistema)

    CD.>"%SystemRoot%\System32\Drivers\etc\_"
    MODE CON COLS=80 LINES=25
    
    IF EXIST "%SystemRoot%\System32\Drivers\etc\_" (
    
      DEL "%SystemRoot%\System32\Drivers\etc\_"
    
      ECHO Has Admin privileges
    
    ) ELSE (
    
      ECHO No Admin privileges
    
    )
    

    La MODE CON reinicializa la pantalla y surpresses cualquier texto/errores al no tener el permiso para escribir en la ubicación del sistema.

  20. 0

    Alternativa: Uso externo utilidad diseñada para este propósito, por ejemplo, IsAdmin.exe (sin restricciones freeware).

    Códigos de salida:

    0 – usuario Actual no sea miembro del grupo Administradores

    1 – usuario Actual miembro de los Administradores y ejecución de elevada

    2 – usuario Actual miembro de los Administradores, pero no se ejecuta elevada

  21. 0
    @echo off
    ver
    set ADMDIR=C:\Users\Administrator
    dir %ADMDIR% 1>nul 2>&1
    echo [%errorlevel%] %ADMDIR%
    if "%errorlevel%"=="0" goto main
    :: further checks e.g. try to list the contents of admin folders
    :: wherever they are stored on older versions of Windows
    echo You need administrator privileges to run this script: %0
    echo Exiting...
    exit /b
    
    :main
    echo Executing with Administrator privileges...
    
  22. 0
    @echo off
    :start
    set randname=%random%%random%%random%%random%%random%
    md \windows\%randname% 2>nul
    if %errorlevel%==0 (echo You're elevated!!!
    goto end)
    if %errorlevel%==1 (echo You're not elevated :(:(
    goto end)
    goto start
    :end
    rd \windows\%randname% 2>nul
    pause >nul
    

    Voy a explicar el código línea por línea:

    @echo off
    

    Los usuarios se molesta con muchas más de 1 líneas sin este.

    :start
    

    Punto donde se inicia el programa.

    set randname=%random%%random%%random%%random%%random%
    

    Establecer el nombre de archivo de un directorio a crear.

    md \windows\%randname% 2>nul
    

    Crea el directorio en <DL>:\Windows (reemplazar <DL> con la letra de unidad).

    if %errorlevel%==0 (echo You're elevated!!!
    goto end)
    

    Si la variable de entorno ERRORLEVEL es cero, entonces echo mensaje de éxito.

    Ir hasta el final (no proceder más).

    if %errorlevel%==1 (echo You're not elevated :(:(
    goto end)
    

    If ERRORLEVEL es uno, el echo de que el mensaje de error y continuar hasta el final.

    goto start
    

    En caso de que el nombre de archivo ya existe, volver a crear la carpeta (de lo contrario el goto end comando no dejar que este se ejecute).

    :end
    

    Especificar el punto final

    rd \windows\%randname% 2>nul
    

    Eliminar el directorio creado.

    pause >nul
    

    Pausa para que el usuario pueda ver el mensaje.

    Nota: El >nul y 2>nul son el filtrado de la salida de estos comandos.

    • Sí sé que cuando usted está registrado como usuario Administrador (no un usuario con cuenta de administrador escriba) va a ser siempre elevados, pero eso no es un bug!
  23. 0

    net user %username% >nul 2>&1 && echo admin || echo not admin

    • Esto parece ir mal, lo que indica que si un usuario tiene derechos de administrador, pero esto no está relacionado con la cuestión de si el actual cmd.exe se ejecuta con derechos de administrador
    • nope, muestra si los actuales cmd.exe tiene acceso administrativo a los usuarios de la base de datos o no, por lo que funciona incluso en el caso de «sesión de red», no. de forma alternativa, «net config >nul 2>&1 && echo admin || echo no admin» que hace el trabajo. Ambas construcciones se ha probado con éxito en windows xp bajo el invitado, usuario de poder y administarative cuentas con LanmanServer detenido (errorlevel 2 para cmd.exe ejecutar en virtud del invitado y el poder del usuario, errorlevel 0 para cmd.exe en virtud de derechos de administrador). Funciona en Vista y más tarde con la mencionada UAC problemas – no sé, por lo que sería bueno que si alguien puede probarlo.
    • He probado con dos ventanas de cmd (win7x64), se inició con y sin derechos de administrador. En ambos casos se muestra admin
  24. 0

    Creo que la forma más sencilla está tratando de cambiar la fecha del sistema (que requiere derechos de administrador):

    date %date%
    if errorlevel 1 (
       echo You have NOT admin rights
    ) else (
       echo You have admin rights
    )
    

    Si %date% variable puede incluir el día de la semana, acaba de obtener la fecha de la última parte de DATE comando:

    for /F "delims=" %%a in ('date ^<NUL') do set "today=%%a" & goto break
    :break
    for %%a in (%today%) do set "today=%%a"
    date %today%
    if errorlevel 1 ...
    
    • No puede ayudar pero downvote un destructivo «el consejo».
    • Incluso dejando de lado el sistema de cambio de tiempo sin una buena razón, se tiro en el pie (de todos los tipos de efectos extraños en software) – si usted está utilizando actual de tiempo, usted todavía está sesgado por el momento en que el comando se ejecuta.
    • Tal vez usted podría describir sólo uno de los «efectos extraños en el software» que puede ocurrir cuando se cambia la fecha a la misma fecha en un cmd.exe sesión de…
    • wiki.dovecot.org/TimeMovedBackwards
    • Véase también superuser.com/questions/27263/…
    • No uno de sus enlaces es ni remotamente relacionado con mi método. Creo que no entendieron bien mi solución. Este método sólo puede tener uno de dos posibles resultados: no se cambia nada (si el usuario no tiene derechos de administrador), o el FECHA se cambia PARA EL MISMO VALOR de (si el usuario tiene derechos de administrador). Mi método NO CAMBIA EL TIEMPO! los invito a leer mi respuesta y explicar en lenguaje sencillo las razones de su downvote… :(
    • La fecha puede cambiar si se ejecuta este a la medianoche. El motivo principal por aquí, sin embargo, es que hacer un cambio, más aún, un sistema amplio y fundamental, sin una necesidad real, sólo para comprobar algo, es lo Malo ™ y una receta para el desastre. Por lo que sólo es tolerable el castigo como último recurso, cuando realmente no hay otra manera (ejemplo, e incluso allí, se puede evitar), y por lo tanto nada de esto es inaceptable en una respuesta que se supone que son para enseñar a los bien prácticas.
    • Y el 2º enlace se muestra un caso donde el método simplemente no funcione, independientemente de cualquier cosa.
    • Si mal no recuerdo, los usuarios avanzados pueden cambiar la hora y la fecha, ya NT.

  25. 0

    Me encontré con un usuario que puede utilizar net session pesar de que no son admin. No me fijé en qué. Mi solución es probar si el usuario puede hacer una carpeta en la carpeta de windows.

    Aquí está mi código:

    ::::::: :testadmin function START :::::::
    :: this function tests if current user is admin.  results are returned as "true" or "false" in %isadmin%
    :: Test "%isadmin" after calling this function
    :: Usage: "call :testadmin"
    echo Your script entered the :testadmin function by error.  Usage: "call :testadmin"
    pause
    exit /b
    :testadmin
    
     rd %windir%\local_admin_test > nul 2> nul
     md %windir%\local_admin_test > nul 2> nul
     if [%errorlevel%]==[0] set isadmin=true
     if not [%errorlevel%]==[0] set isadmin=false
     rd %windir%\local_admin_test > nul 2> nul
    
     if [%isadmin%]==[true] (
       echo User IS admin.
     )
     if not [%isadmin%]==[true] (
       echo User IS NOT admin.
       timeout 30
       :: or use "pause" instead of "timeout"
       exit /b
     )
    exit /b
    :::::: :testadmin function END ::::::
    
  26. -1

    Aquí está mi de 2 centavos que vale la pena:

    Necesitaba un lote a ejecutar dentro de un entorno de Dominio durante el proceso de inicio de sesión, dentro de un «taller» medio ambiente, al ver que los usuarios se adhieran a un «bloqueo» de la política y visión restringida (distribuyen principalmente a través de GPO conjuntos).

    Un GPO de Dominio conjunto se aplica antes de un usuario de AD vinculado script de inicio de sesión
    La creación de un GPO de inicio de sesión guión era demasiado por maduro como el de los usuarios «nuevo» perfil no había sido creado/cargado/o listo en el momento de aplicar una «eliminar y/o Pin» de la barra de tareas y Menú de Inicio de elementos de vbscript + agregar algunos archivos locales.

    por ejemplo: La propuesta de valor predeterminado de usuario » perfil medio ambiente requiere de una «.La dirección URL’ (.lnk) acceso directo colocado dentro de la «%ProgramData%\Microsoft\Windows\Menú Inicio\Programas*MyNewOWA.url*», y la
    «C:\Users\Public\Desktop\*MyNewOWA.url*» la ubicación, entre otros elementos

    Los usuarios tener múltiples máquinas en el dominio, donde sólo estos set ‘taller’ equipos requieren estas políticas.

    Estas carpetas requieren de un ‘Admin’ derechos para modificar, y aunque el ‘Dominio de Usuario» es parte de la local ‘Admin’ grupo – UAC fue el siguiente reto.

    Encontrado diversas adaptaciones y amalgamado aquí. Tengo algunos usuarios con los dispositivos BYOD así que se requiere de otros archivos con perm problemas.
    No lo he probado en XP (un poco demasiado viejo un sistema operativo), pero el código está presente, el amor de feed back.

        :: ------------------------------------------------------------------------
    :: You have a royalty-free right to use, modify, reproduce and distribute
    :: the Sample Application Files (and/or any modified version) in any way
    :: you find useful, provided that you agree that the author provides
    :: no warranty, obligations or liability for any Sample Application Files.
    :: ------------------------------------------------------------------------
    :: ********************************************************************************
    ::* Sample batch script to demonstrate the usage of RunAs.cmd
    ::*
    ::* File:           RunAs.cmd
    ::* Date:           12/10/2013
    ::* Version:        1.0.2
    ::*
    ::* Main Function:  Verifies status of 'bespoke' Scripts ability to 'Run As - Admin'
    ::*                 elevated privileges and without UAC prompt
    ::*
    ::* Usage:          Run RunAs.cmd from desired location
    ::*         Bespoke.cmd will be created and called from C:\Utilities location
    ::*         Choose whether to delete the script after its run by removing out-comment
    ::*                 (::) before the 'Del /q Bespoke.cmd' command
    ::*
    ::* Distributed under a "GNU GPL" type basis.
    ::*
    ::* Revisions:
    ::* 1.0.0 - 08/10/2013 - Created.
    ::* 1.0.1 - 09/10/2013 - Include new path creation.
    ::* 1.0.2 - 12/10/2013 - Modify/shorten UAC disable process for Admins
    ::*
    ::* REFERENCES:
    ::* Sample "*.inf" secpol.msc export from Wins 8 x64 @ bottom, 
    ::* Would be default but for 'no password complexities'
    ::*
    ::* To recreate UAC default: 
    ::* Goto:Secpol, edit out Exit, modify .inf set, export as "Wins8x64.inf" 
    ::* and import using secedit cmd provided
    ::*
    :: ********************************************************************************
    @echo off & cls
    color 9F
    Title RUN AS
    Setlocal
    :: Verify local folder availability for script
    IF NOT EXIST C:\Utilities (
    mkdir C:\Utilities & GOTO:GenBatch
    ) ELSE (
    Goto:GenBatch
    )
    :GenBatch
    c:
    cd\
    cd C:\Utilities
    IF NOT EXIST C:\Utilities\Bespoke.cmd (
    GOTO:CreateBatch
    ) ELSE (
    Goto:RunBatch
    )
    :CreateBatch
    Echo. >Bespoke.cmd
    Echo :: ------------------------------------------------------------------------ >>Bespoke.cmd
    Echo :: You have a royalty-free right to use, modify, reproduce and distribute >>Bespoke.cmd
    Echo :: the Sample Application Files (and/or any modified version) in any way >>Bespoke.cmd
    Echo :: you find useful, provided that you agree that the author provides >>Bespoke.cmd
    Echo :: has no warranty, obligations or liability for any Sample Application Files. >>Bespoke.cmd
    Echo :: ------------------------------------------------------------------------ >>Bespoke.cmd
    Echo. >>Bespoke.cmd
    Echo :: ******************************************************************************** >>Bespoke.cmd
    Echo ::* Sample batch script to demonstrate the usage of Bespoke.cmd >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* File:           Bespoke.cmd >>Bespoke.cmd
    Echo ::* Date:           10/10/2013 >>Bespoke.cmd
    Echo ::* Version:        1.0.1 >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Main Function:  Allows for running of Bespoke batch with elevated rights and no future UAC 'pop-up' >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Usage:          Called and created by RunAs.cmd run from desired location >>Bespoke.cmd
    Echo ::*                 Found in the C:\Utilities folder >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Distributed under a "GNU GPL" type basis. >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Revisions: >>Bespoke.cmd
    Echo ::* 1.0.0 - 09/10/2013 - Created. >>Bespoke.cmd
    Echo ::* 1.0.1 - 10/10/2013 - Modified, added ability to temp disable UAC pop-up warning. >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* REFERENCES: >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Exit code (%%^ErrorLevel%%) 0 - No errors have occurred, i.e. immediate previous command ran successfully >>Bespoke.cmd
    Echo ::* Exit code (%%^ErrorLevel%%) 1 - Errors occurred, i.e. immediate previous command ran Unsuccessfully >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* MS OS version check >>Bespoke.cmd
    Echo ::* http://msdn.microsoft.com/en-us/library/windows/desktop/ms724833%28v=vs.85%29.aspx >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Copying to certain folders and running certain apps require elevated perms >>Bespoke.cmd
    Echo ::* Even with 'Run As ...' perms, UAC still pops up. >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* To run a script or application in the Windows Shell >>Bespoke.cmd
    Echo ::* http://ss64.com/vb/shellexecute.html >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Machines joined to a corporate Domain should have the UAC feature set from, and >>Bespoke.cmd
    Echo ::* pushed out from a DC GPO policy >>Bespoke.cmd
    Echo ::* e.g.: 'Computer Configuration - Policies - Windows Settings - Security Settings -  >>Bespoke.cmd
    Echo ::* Local Policies/Security Options - User Account Control -  >>Bespoke.cmd
    Echo ::* Policy: User Account Control: Behavior of the elevation prompt for administrators >>Bespoke.cmd
    Echo ::*         in Admin Approval Mode  Setting: Elevate without prompting >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo :: ******************************************************************************** >>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo @Echo off ^& cls>>Bespoke.cmd
    Echo color 9F>>Bespoke.cmd
    Echo Title RUN AS ADMIN>>Bespoke.cmd
    Echo Setlocal>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo Set "_OSVer=">>Bespoke.cmd
    Echo Set "_OSVer=UAC">>Bespoke.cmd
    Echo VER ^| FINDSTR /IL "5." ^>NUL>>Bespoke.cmd
    Echo IF %%^ErrorLevel%%==0 SET "_OSVer=PreUAC">>Bespoke.cmd
    Echo IF %%^_OSVer%%==PreUAC Goto:XPAdmin>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo :: Check if machine part of a Domain or within a Workgroup environment >>Bespoke.cmd
    Echo Set "_DomainStat=">>Bespoke.cmd
    Echo Set "_DomainStat=%%USERDOMAIN%%">>Bespoke.cmd
    Echo If /i %%^_DomainStat%% EQU %%^computername%% (>>Bespoke.cmd
    Echo Goto:WorkgroupMember>>Bespoke.cmd
    Echo ) ELSE (>>Bespoke.cmd
    Echo Set "_DomainStat=DomMember" ^& Goto:DomainMember>>Bespoke.cmd
    Echo )>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo :WorkgroupMember>>Bespoke.cmd
    Echo :: Verify status of Secpol.msc 'ConsentPromptBehaviorAdmin' Reg key >>Bespoke.cmd
    Echo reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin ^| Find /i "0x0">>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo If %%^ErrorLevel%%==0 (>>Bespoke.cmd
    Echo    Goto:BespokeBuild>>Bespoke.cmd
    Echo ) Else (>>Bespoke.cmd
    Echo    Goto:DisUAC>>Bespoke.cmd
    Echo )>>Bespoke.cmd
    Echo :DisUAC>>Bespoke.cmd
    Echo :XPAdmin>>Bespoke.cmd
    Echo :DomainMember>>Bespoke.cmd
    Echo :: Get ADMIN Privileges, Start batch again, modify UAC ConsentPromptBehaviorAdmin reg if needed >>Bespoke.cmd
    Echo ^>nul ^2^>^&1 ^"^%%^SYSTEMROOT%%\system32\cacls.exe^"^ ^"^%%^SYSTEMROOT%%\system32\config\system^">>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo IF ^'^%%^Errorlevel%%^'^ NEQ '0' (>>Bespoke.cmd
    Echo    echo Set objShell = CreateObject^^("Shell.Application"^^) ^> ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
    Echo    echo objShell.ShellExecute ^"^%%~s0^"^, "", "", "runas", 1 ^>^> ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
    Echo    ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
    Echo    del ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
    Echo    exit /B>>Bespoke.cmd
    Echo ) else (>>Bespoke.cmd
    Echo    pushd ^"^%%^cd%%^">>Bespoke.cmd
    Echo    cd /d ^"^%%~dp0^">>Bespoke.cmd
    Echo    @echo off>>Bespoke.cmd
    Echo )>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo IF %%^_OSVer%%==PreUAC Goto:BespokeBuild>>Bespoke.cmd
    Echo IF %%^_DomainStat%%==DomMember Goto:BespokeBuild>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 0 /f>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo :BespokeBuild>>Bespoke.cmd
    Echo :: Add your script requiring elevated perm and no UAC below: >>Bespoke.cmd
    Echo.>>Bespoke.cmd
    :: PROVIDE BRIEF EXPLINATION AS TO WHAT YOUR SCRIPT WILL ACHIEVE
    Echo ::
    :: ADD THE "PAUSE" BELOW ONLY IF YOU SET TO SEE RESULTS FROM YOUR SCRIPT
    Echo Pause>>Bespoke.cmd
    Echo Goto:EOF>>Bespoke.cmd
    Echo :EOF>>Bespoke.cmd
    Echo Exit>>Bespoke.cmd
    Timeout /T 1 /NOBREAK >Nul
    :RunBatch
    call "Bespoke.cmd"
    :: Del /F /Q "Bespoke.cmd"
    :Secpol
    :: Edit out the 'Exit (rem or ::) to run & import default wins 8 security policy provided below
    Exit
    :: Check if machine part of a Domain or within a Workgroup environment
    Set "_DomainStat="
    Set _DomainStat=%USERDOMAIN%
    If /i %_DomainStat% EQU %computername% (
    Goto:WorkgroupPC
    ) ELSE (
    Echo PC Member of a Domain, Security Policy determined by GPO
    Pause
    Goto:EOF
    )
    :WorkgroupPC
    reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin | Find /i "0x5"
    Echo.
    If %ErrorLevel%==0 (
    Echo Machine already set for UAC 'Prompt'
    Pause
    Goto:EOF
    ) else (
    Goto:EnableUAC
    )
    :EnableUAC
    IF NOT EXIST C:\Utilities\Wins8x64Def.inf (
    GOTO:CreateInf
    ) ELSE (
    Goto:RunInf
    )
    :CreateInf
    :: This will create the default '*.inf' file and import it into the 
    :: local security policy for the Wins 8 machine
    Echo [Unicode]>>Wins8x64Def.inf
    Echo Unicode=yes>>Wins8x64Def.inf
    Echo [System Access]>>Wins8x64Def.inf
    Echo MinimumPasswordAge = ^0>>Wins8x64Def.inf
    Echo MaximumPasswordAge = ^-1>>Wins8x64Def.inf
    Echo MinimumPasswordLength = ^0>>Wins8x64Def.inf
    Echo PasswordComplexity = ^0>>Wins8x64Def.inf
    Echo PasswordHistorySize = ^0>>Wins8x64Def.inf
    Echo LockoutBadCount = ^0>>Wins8x64Def.inf
    Echo RequireLogonToChangePassword = ^0>>Wins8x64Def.inf
    Echo ForceLogoffWhenHourExpire = ^0>>Wins8x64Def.inf
    Echo NewAdministratorName = ^"^Administrator^">>Wins8x64Def.inf
    Echo NewGuestName = ^"^Guest^">>Wins8x64Def.inf
    Echo ClearTextPassword = ^0>>Wins8x64Def.inf
    Echo LSAAnonymousNameLookup = ^0>>Wins8x64Def.inf
    Echo EnableAdminAccount = ^0>>Wins8x64Def.inf
    Echo EnableGuestAccount = ^0>>Wins8x64Def.inf
    Echo [Event Audit]>>Wins8x64Def.inf
    Echo AuditSystemEvents = ^0>>Wins8x64Def.inf
    Echo AuditLogonEvents = ^0>>Wins8x64Def.inf
    Echo AuditObjectAccess = ^0>>Wins8x64Def.inf
    Echo AuditPrivilegeUse = ^0>>Wins8x64Def.inf
    Echo AuditPolicyChange = ^0>>Wins8x64Def.inf
    Echo AuditAccountManage = ^0>>Wins8x64Def.inf
    Echo AuditProcessTracking = ^0>>Wins8x64Def.inf
    Echo AuditDSAccess = ^0>>Wins8x64Def.inf
    Echo AuditAccountLogon = ^0>>Wins8x64Def.inf
    Echo [Registry Values]>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole\SecurityLevel=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole\SetCommand=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\CachedLogonsCount=1,"10">>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ForceUnlockLogon=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\PasswordExpiryWarning=4,5>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ScRemoveOption=1,"0">>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorAdmin=4,5>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorUser=4,3>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableCAD=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\DontDisplayLastUserName=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableInstallerDetection=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableSecureUIAPaths=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableUIADesktopToggle=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableVirtualization=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\FilterAdministratorToken=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\LegalNoticeCaption=1,"">>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\LegalNoticeText=7,>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\PromptOnSecureDesktop=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ScForceOption=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ShutdownWithoutLogon=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\UndockWithoutLogon=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ValidateAdminCodeSignatures=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers\AuthenticodeEnabled=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\AuditBaseObjects=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\CrashOnAuditFail=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\DisableDomainCreds=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\EveryoneIncludesAnonymous=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\ForceGuest=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\FullPrivilegeAuditing=3,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\LimitBlankPasswordUse=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\MSV1_0\NTLMMinClientSec=4,536870912>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\MSV1_0\NTLMMinServerSec=4,536870912>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\NoLMHash=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymous=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymousSAM=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers\AddPrinterDrivers=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\SecurePipeServers\Winreg\AllowedExactPaths\Machine=7,System\CurrentControlSet\Control\ProductOptions,System\CurrentControlSet\Control\Server Applications,Software\Microsoft\Windows NT\CurrentVersion>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\SecurePipeServers\Winreg\AllowedPaths\Machine=7,System\CurrentControlSet\Control\Print\Printers,System\CurrentControlSet\Services\Eventlog,Software\Microsoft\OLAP Server,Software\Microsoft\Windows NT\CurrentVersion\Print,Software\Microsoft\Windows NT\CurrentVersion\Windows,System\CurrentControlSet\Control\ContentIndex,System\CurrentControlSet\Control\Terminal Server,System\CurrentControlSet\Control\Terminal Server\UserConfig,System\CurrentControlSet\Control\Terminal Server\DefaultUserConfiguration,Software\Microsoft\Windows NT\CurrentVersion\Perflib,System\CurrentControlSet\Services\SysmonLog>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Session Manager\Kernel\ObCaseInsensitive=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management\ClearPageFileAtShutdown=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Session Manager\ProtectionMode=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\optional=7,Posix>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\AutoDisconnect=4,15>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\EnableForcedLogOff=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\EnableSecuritySignature=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\NullSessionPipes=7,>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\RequireSecuritySignature=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\RestrictNullSessAccess=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\EnablePlainTextPassword=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\EnableSecuritySignature=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\RequireSecuritySignature=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LDAP\LDAPClientIntegrity=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\MaximumPasswordAge=4,30>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\RequireSignOrSeal=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\RequireStrongKey=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\SealSecureChannel=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\SignSecureChannel=4,1>>Wins8x64Def.inf
    Echo [Privilege Rights]>>Wins8x64Def.inf
    Echo SeNetworkLogonRight = *S-1-1-0,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeBackupPrivilege = *S-1-5-32-544,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeChangeNotifyPrivilege = *S-1-1-0,*S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551,*S-1-5-90-^0>>Wins8x64Def.inf
    Echo SeSystemtimePrivilege = *S-1-5-19,*S-1-5-32-544>>Wins8x64Def.inf
    Echo SeCreatePagefilePrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeDebugPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeRemoteShutdownPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeAuditPrivilege = *S-1-5-19,*S-1-5-20>>Wins8x64Def.inf
    Echo SeIncreaseQuotaPrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544>>Wins8x64Def.inf
    Echo SeIncreaseBasePriorityPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeLoadDriverPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeBatchLogonRight = *S-1-5-32-544,*S-1-5-32-551,*S-1-5-32-559>>Wins8x64Def.inf
    Echo SeServiceLogonRight = *S-1-5-80-0,*S-1-5-83-^0>>Wins8x64Def.inf
    Echo SeInteractiveLogonRight = Guest,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeSecurityPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeSystemEnvironmentPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeProfileSingleProcessPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeSystemProfilePrivilege = *S-1-5-32-544,*S-1-5-80-3139157870-2983391045-3678747466-658725712-1809340420>>Wins8x64Def.inf
    Echo SeAssignPrimaryTokenPrivilege = *S-1-5-19,*S-1-5-20>>Wins8x64Def.inf
    Echo SeRestorePrivilege = *S-1-5-32-544,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeShutdownPrivilege = *S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeTakeOwnershipPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeDenyNetworkLogonRight = Guest>>Wins8x64Def.inf
    Echo SeDenyInteractiveLogonRight = Guest>>Wins8x64Def.inf
    Echo SeUndockPrivilege = *S-1-5-32-544,*S-1-5-32-545>>Wins8x64Def.inf
    Echo SeManageVolumePrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeRemoteInteractiveLogonRight = *S-1-5-32-544,*S-1-5-32-555>>Wins8x64Def.inf
    Echo SeImpersonatePrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-6>>Wins8x64Def.inf
    Echo SeCreateGlobalPrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-6>>Wins8x64Def.inf
    Echo SeIncreaseWorkingSetPrivilege = *S-1-5-32-545,*S-1-5-90-^0>>Wins8x64Def.inf
    Echo SeTimeZonePrivilege = *S-1-5-19,*S-1-5-32-544,*S-1-5-32-545>>Wins8x64Def.inf
    Echo SeCreateSymbolicLinkPrivilege = *S-1-5-32-544,*S-1-5-83-^0>>Wins8x64Def.inf
    Echo [Version]>>Wins8x64Def.inf
    Echo signature="$CHICAGO$">>Wins8x64Def.inf
    Echo Revision=1>>Wins8x64Def.inf
    :RunInf
    :: Import 'Wins8x64Def.inf' with ADMIN Privileges, to modify UAC ConsentPromptBehaviorAdmin reg
    >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%%\system32\config\system"
    IF '%Errorlevel%' NEQ '0' (
    echo Set objShell = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo objShell.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
    "%temp%%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B
    Secedit /configure /db secedit.sdb /cfg C:\Utilities\Wins8x64Def.inf /overwrite
    Goto:CheckUAC
    ) else (
    Secedit /configure /db secedit.sdb /cfg C:\Utilities\Wins8x64Def.inf /overwrite
    @echo off
    )
    :CheckUAC
    reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin | Find /i "0x5"
    Echo.
    If %ErrorLevel%==0 (
    Echo ConsentPromptBehaviorAdmin set to 'Prompt'
    Pause
    Del /Q C:\Utilities\Wins8x64Def.inf
    Goto:EOF
    ) else (
    Echo ConsentPromptBehaviorAdmin NOT set to default
    Pause
    )
    ENDLOCAL
    :EOF
    Exit
    

    Dominio de la PC debe ser regida tanto como sea posible por GPO establece.
    Grupo de trabajo/máquinas Independientes, pueden estar regidas por esta secuencia de comandos.

    Recuerde, un mensaje de UAC pop-up al menos una vez con un grupo de trabajo BYOD PC (tan pronto como el primer elevar a ‘Admin perms» es necesaria), pero como la directiva de seguridad local está modificado para uso administrativo a partir de este punto, los pop-ups desaparecerá.

    Un Dominio de PC debe tener la GPO «ConsentPromptBehaviorAdmin» directiva que establece dentro de su ‘ya’, creó el «Bloqueo» de la política – como se explicó en el guión de ‘REFERENCIAS’ sección.

    De nuevo, ejecute el secedit.exe importación de defecto.inf’ archivo si usted está atascado en el conjunto «A UAC o No UAC» debate :-).

    btw:
    @boileau
    Hacer comprobar su fracaso en el:

    >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
    

    Mediante la ejecución sólo «%SYSTEMROOT%\system32\cacls.exe» o «%SYSTEMROOT%\system32\config\system» o tanto desde el símbolo del sistema – elevado o no, comprobar el resultado a través de la junta.

  27. -2

    Otra manera de hacer esto.

    REM    # # # #      CHECKING OR IS STARTED AS ADMINISTRATOR     # # # # #
    FSUTIL | findstr /I "volume" > nul&if not errorlevel 1  goto Administrator_OK
    cls
    echo *******************************************************
    echo ***    R U N    A S    A D M I N I S T R A T O R    ***
    echo *******************************************************
    echo.
    echo.
    echo Call up just as the Administrator. Abbreviation can be done to the script and set:
    echo.
    echo      Shortcut ^> Advanced ^> Run as Administrator
    echo.
    echo.
    echo Alternatively, a single run "Run as Administrator"
    echo or in the Schedule tasks with highest privileges
    pause > nul
    goto:eof
    :Administrator_OK
    REM Some next lines code ...
    
    • ¿Qué es el enlace que supone? Marcado como spam, debido al vínculo.
    • Marque esta respuesta para un código que comprueba y le pide automáticamente: stackoverflow.com/a/30590134/4932683

Dejar respuesta

Please enter your comment!
Please enter your name here