script run program password bat windows batch-file cmd admin

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



windows execute command as administrator (26)

Más problemas

Como lo señaló @Lectrode, si intenta ejecutar el comando net session mientras el servicio del servidor está detenido, recibirá el siguiente mensaje de error:

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

En este caso, la variable %errorLevel% se establecerá en 2 .

Nota El servicio del 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 toca el registro ni ningún archivo / carpeta del sistema;
  • funciona independientemente de la configuración regional del sistema;
  • Da resultados correctos incluso en Modo Seguro.

Así que inicié una máquina virtual de Windows XP y empecé a desplazarme por la lista de aplicaciones en la carpeta C:/Windows/System32 , tratando de obtener algunas ideas. Después de las pruebas y los errores, este es el enfoque sucio (destinado al juego de palabras) que he encontrado:

fsutil dirty query %systemdrive% >nul

El comando fsutil dirty requiere derechos de administrador para ejecutarse, y de lo contrario fallará. %systemdrive% es una variable de entorno que devuelve la letra de unidad donde está instalado el sistema operativo. La salida se redirige a nul , por lo tanto se ignora. La variable %errorlevel% se establecerá en 0 solo después de la ejecución exitosa.

Esto es lo que dice la documentación:

Fsutil sucio

Consulta o establece el bit sucio de un volumen. Cuando se configura el bit sucio de un volumen, autochk comprueba automáticamente el volumen en busca de errores la próxima vez que se reinicia la computadora.

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

El bit sucio de un volumen indica que el sistema de archivos puede estar en un estado incoherente. El bit sucio se puede configurar porque:

  • El volumen está en línea y tiene cambios sobresalientes.
  • Se realizaron cambios en el volumen y la computadora se apagó antes de que los cambios se confirmaran en el disco.
  • Se detectó corrupción en el volumen.

Si el bit sucio se configura cuando la computadora se reinicia, chkdsk se ejecuta para verificar la integridad del sistema de archivos y para intentar solucionar cualquier problema con el volumen.

Ejemplos

Para consultar el bit sucio en la unidad C, escriba:

fsutil dirty query C:

Más investigación

Si bien 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 , por lo que tenemos que recurrir a otra cosa.

Durante mis pruebas anteriores, noté que ejecutar el comando sfc sin ningún parámetro resultaría en:

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

Es decir: sin parámetros, sin partido . La idea es que podemos analizar la salida y comprobar si recibimos algo más que un error:

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

La salida de error primero se redirige a la salida estándar, que luego se canaliza al comando de find . En este punto, debemos buscar el único parámetro compatible con todas las versiones de Windows desde Windows 2000: /SCANNOW . La búsqueda no distingue entre mayúsculas y minúsculas, y la salida se descarta redirigiéndola a nul .

Aquí hay un extracto de la documentación:

Sfc

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

Observaciones

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

Uso de la muestra

Aquí hay algunos ejemplos de pegar y ejecutar:

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
    ---
  • Windows PE

¿Cómo compruebo si el script por lotes actual tiene derechos de administrador?

Sé cómo hacerlo llamar a sí mismo con runas, pero no cómo comprobar los derechos de administrador. Las únicas soluciones que he visto son trabajos de pirateo o uso de programas externos. Bueno, en realidad no me importa si es un trabajo de hackeo siempre y cuando funcione en Windows XP y más reciente.


Cuestiones

La solución de blak3r / Rushyo funciona bien para todo, excepto para Windows 8. La ejecución de AT en Windows 8 da como resultado:

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

(vea la captura de pantalla # 1) y devolverá %errorLevel% 1 .

Investigación

Entonces, busqué otros comandos que requieren permisos elevados. rationallyparanoid.com tenía una lista de unos pocos, así que ejecuté cada comando en los dos extremos opuestos de los sistemas operativos Windows (XP y 8) actuales con la esperanza de encontrar un comando al que se le denegaría el acceso a ambos sistemas operativos cuando se ejecutara con permisos estándar.

Finalmente, encontré uno - NET SESSION . Una solución verdadera , limpia y universal que no implica:

  • La creación o interacción con datos en lugares seguros.
  • analizando los datos devueltos desde los bucles FOR
  • buscando cadenas para "Administrador"
  • utilizando AT (incompatible con Windows 8) o WHOAMI (incompatible con Windows XP).

Cada uno de los cuales tiene sus propios problemas de seguridad, usabilidad y portabilidad.

Pruebas

He confirmado independientemente 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)

Implementación / Uso

Entonces, para usar esta solución, simplemente haga 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 eres vago: https://dl.dropbox.com/u/27573003/Distribution/Binaries/check_Permissions.bat

Explicación

NET SESSION es un comando estándar que se usa para "administrar las conexiones de la computadora del servidor. Utilizado sin parámetros, [se] muestra información sobre todas las sesiones con la computadora local".

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

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

Capturas de pantalla

Windows 8 AT %errorLevel% :

NET SESSION en Windows XP x86 - Windows 8 x64 :

Gracias, @Tilka, por cambiar tu respuesta aceptada por la mía. :)


Algunos servidores deshabilitan los servicios que requiere el comando "net session". Esto da como resultado que la verificación del administrador siempre indique que no tiene derechos de administrador cuando puede tenerlos.


Edit: copyitright ha señalado que esto no es confiable. Aprobar el acceso de lectura con UAC permitirá a dir para tener éxito. Tengo un poco más de script para ofrecer otra posibilidad, pero no es de solo 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

Vieja respuesta abajo

Advertencia: poco fiable

Basándome en varias otras buenas respuestas aquí y en los puntos planteados por and31415, descubrí que soy un fanático de lo siguiente:

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

Pocas dependencias y rápidas.


El whoami / grupos no funciona en un caso. Si tiene el UAC totalmente desactivado (no solo la notificación desactivada), y comenzó a partir de un aviso del Administrador, emitió:

runas /trustlevel:0x20000 cmd

correrás sin elevar, pero emitiendo:

whoami /groups

dirá que estás elevado. Está incorrecto. Aquí es por qué está mal:

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 UAC está completamente deshabilitado 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 no se está ejecutando de forma elevada, pero whoami /groups afirma que sí.

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%

Debería hacer net session dos veces porque si alguien lo hizo de antemano, obtendrá la información incorrecta.


La forma más limpia de verificar los privilegios de administrador usando un script 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 solo utiliza CMD.exe integrado, por lo que debería ser muy rápido. También verifica las capacidades reales del proceso en lugar de las SID o las membresías de grupos, por lo que se prueba el permiso efectivo . Y esto funciona desde Windows 2003 y XP. Los procesos de usuario normales o los procesos no elevados fallan en la sonda de directorio, donde, como administrador o proceso elevado, se realizan correctamente.


La solución de Anders funcionó para mí, pero no estaba seguro de cómo invertirla para obtener lo contrario (cuando no era administrador).

Aquí está mi solución. Tiene dos casos, uno de IF y ELSE, y algunos ascii art para asegurar que la gente realmente lo lea. :)

Versión mínima

Rushyo publicó esta solución aquí: ¿Cómo detectar si CMD se está ejecutando como Administrador / tiene privilegios elevados?

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

Versión que agrega mensajes de error, pausas y salidas.

@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 (incluidas las versiones de 32/64 bits).

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


Literalmente, docenas de respuestas en esta y otras preguntas vinculadas y en otras partes de SE, todas deficientes de esta forma u otra, han demostrado claramente que Windows no proporciona una utilidad de consola integrada confiable. Por lo tanto, es hora de lanzar su propio.

El siguiente código C, basado en Detectar si el programa se está ejecutando con todos los derechos de administrador , funciona en Win2k + 1 , en cualquier lugar y en todos los casos (UAC, dominios, grupos transitivos ...), porque hace lo mismo que el sistema cuando comprueba los permisos. Señala el resultado tanto con un mensaje (que puede silenciarse con un interruptor) como con el código de salida.

Solo necesita compilarse una vez, luego puede copiarlo en .exetodas partes, solo depende de kernel32.dlly 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; }

1 MSDN afirma que las API son XP + pero esto es falso. CheckTokenMembership es 2k + y el otro es aún mayor . El último enlace también contiene una forma mucho más complicada que funcionaría incluso en NT.


Lo siguiente intenta crear un archivo en el directorio de Windows. Si tiene éxito lo eliminará.

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

Tenga en cuenta que 06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 es un GUID que se generó hoy y se supone que es improbable que entre en conflicto con un nombre de archivo existente.


Nota: la comprobación con cacls para / system32 / config / system SIEMPRE fallará en WOW64, (por ejemplo, desde% systemroot% / syswow64 / cmd.exe / 32 bit Total Commander), por lo que los scripts que se ejecutan en el shell de 32 bits en el sistema de 64 bits se repetirán para siempre ... Mejor sería verificar los derechos en el directorio Prefetch:

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

Win XP to 7 probado, sin embargo falla en WinPE como en windows 7 install.wim no existe tal dir ni cacls.exe

También en winPE AND wow64 falla la verificación con openfiles.exe:

OPENFILES > nul

En Windows 7, el nivel de error será "1" con información de que "el sistema de destino debe ser un sistema operativo de 32 bits"

Ambos cheques probablemente también fallarán en la consola de recuperación.

Lo que funciona en Windows XP - 8 32/64 bit, en WOW64 y en WinPE son: pruebas de creación de directorios (si el administrador de IF no bloqueó el directorio de Windows con permisos para todos ...) y

net session

y

reg add HKLM /F

cheques

También una nota más en algunas ventanas XP (y probablemente también en otras versiones, dependiendo de las modificaciones del administrador), dependiendo de las entradas del registro que llamen directamente a bat / cmd desde el script .vbs fallará con la información de que los archivos bat / cmd no están asociados con nada ...

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

Llamar a cmd.exe con el parámetro del archivo bat / cmd por otro lado funciona bien:

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


Tengo dos formas de verificar el acceso privilegiado, ambas son bastante confiables y muy portátiles en casi todas las versiones 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 confiables, debido a su simplicidad, y es muy poco probable que el comportamiento de este comando tan primitivo cambie. Ese no es el caso de otras herramientas CLI integradas como net session que pueden ser deshabilitadas por las políticas de admin / network, o comandos como fsutils que cambiaron la salida en Windows 10.

* Funciona en XP y posteriores

2. Método

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

A veces, no le gusta la idea de tocar el disco del usuario, incluso si es tan inofensivo como usar fsutils o crear una carpeta vacía, no se puede demostrar, pero puede resultar en un error catastrófico si algo sale mal. En este escenario, simplemente puede comprobar el registro para privilegios.

Para esto, puede intentar crear una clave en HKEY_LOCAL_MACHINE utilizando los permisos predeterminados, obtendrá Acceso denegado y ERRORLEVEL == 1 , pero si ejecuta como administrador, imprimirá "el comando se ejecutó con éxito" y ERRORLEVEL == 0 . Como la clave ya existe, no tiene efecto en el registro. Esta es probablemente la forma más rápida, y el REG está ahí por mucho tiempo.

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

* Funciona en XP y posteriores

Ejemplo de trabajo

Un script que borra la carpeta temporal.

@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


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


una forma más

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

fltmc comando fltmc está disponible en todos los sistemas de Windows desde XP, por lo que debería ser bastante portátil.

Una solución más probada en XP , 8.1 , 7 (desafortunadamente no funciona en todas win10 máquinas win10 ; vea los comentarios). Hay una variable específica =:: que se presenta solo si la sesión de la consola no tiene privilegios de administrador. Como no tan fácil de crear la variable que contiene = en su nombre, esta es una manera comparativamente confiable de verificar el permiso de administrador (y bastante rápido ya que no llama ejecutables externos)

setlocal enableDelayedExpansion set "dv==::" if defined !dv! ( echo has NOT admin permissions ) else ( echo has admin permissions )


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


No solo chequea sino GETE los derechos de administrador automáticamente.
También conocido como UAC automático para Win 7/8 / 8.1 ff. : El siguiente es realmente genial con una característica más: este fragmento de lote no solo comprueba los derechos de administrador, sino que los obtiene automáticamente. (y pruebas antes, si viven en un sistema operativo con capacidad UAC).

Con este truco no necesitas más tiempo para hacer clic derecho en tu archivo por lotes "con derechos de administrador". Si lo ha olvidado, para iniciarlo con derechos elevados, ¡UAC aparece automáticamente! Además, al principio se prueba, si el SO necesita / proporciona UAC, por lo que se comporta correctamente, 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 combina algunos buenos patrones de lotes, especialmente (1) la prueba de administración en este hilo por Ben Hooper y (2) la activación de UAC leída en BatchGotAdmin y citada en el sitio de lotes por robvanderwoude (respect). (3) Para la identificación del sistema operativo mediante el "patrón VER | FINDSTR" simplemente no encuentro la referencia.)

(Con respecto a algunas restricciones menores, cuando "NET SESSION" no funciona como se menciona en otra respuesta, siéntase libre de insertar otro de esos comandos. Para mí, ejecutar el modo seguro de Windows o los servicios estándar especiales no están disponibles y no son casos de uso importantes. - Para algunos administradores tal vez lo son.


Aquí está el valor de mis 2 centavos:

Necesitaba un lote para ejecutarse dentro de un entorno de dominio durante el proceso de inicio de sesión del usuario, dentro de un entorno de "sala de trabajo", al ver a los usuarios cumplir con una política de "bloqueo" y una vista restringida (principalmente distribuida a través de conjuntos de GPO).

Un conjunto de GPO de dominio se aplica antes de que una secuencia de comandos de inicio de sesión vinculada a un usuario de AD La creación de una secuencia de comandos de inicio de sesión de GPO fuera demasiado antigua ya que el perfil "nuevo" de los usuarios no se había creado / cargado / o estaba listo a tiempo para aplicar un "eliminar y / o La barra de tareas "Pin" y los elementos del menú Inicio vbscript + agregan algunos archivos locales.

por ejemplo: el entorno de perfil de ''usuario predeterminado'' propuesto requiere un acceso directo ".URL ''(.lnk) ubicado dentro de"% ProgramData% / Microsoft / Windows / Start Menu / Programs * MyNewOWA.url * "y la" C: / Users / Public / Desktop / * MyNewOWA.url * "ubicaciones, entre otros elementos

Los usuarios tienen varias máquinas dentro del dominio, donde solo estas PC de ''sala de trabajo'' requieren estas políticas.

Estas carpetas requieren derechos de ''administrador'' para modificar, y aunque el ''usuario de dominio'' es parte del grupo local de ''administrador'', UAC fue el siguiente desafío.

Encontré varias adaptaciones y amalgamado aquí. También tengo algunos usuarios con dispositivos BYOD que requieren otros archivos con problemas de permisos. No lo he probado en XP (un sistema operativo demasiado antiguo), pero el código está presente, me encantaría retroalimentar.

:: ------------------------------------------------------------------------ :: 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

Las PC de dominio deben regirse tanto como sea posible por los conjuntos de GPO. Las máquinas de grupo de trabajo / independientes pueden ser gobernadas por este script.

Recuerde, una solicitud de UAC se abrirá al menos una vez con una PC de grupo de trabajo BYOD (tan pronto como se requiera la primera elevación a ''Perms de administrador''), pero a medida que la política de seguridad local se modifique para uso de administrador a partir de este momento, Las ventanas emergentes desaparecerán.

Una PC de dominio debe tener la política de "ConsentPromptBehaviorAdmin" de GPO establecida dentro de su política de "bloqueo" ya creada, como se explica en la sección "REFERENCIAS" del script.

De nuevo, ejecute la importación secedit.exe del archivo ''.inf'' predeterminado si está atascado en el debate "A UAC o No a UAC" :-).

por cierto: @boileau revisa tu falla en el:

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

Al ejecutar solo "% SYSTEMROOT% / system32 / cacls.exe" o "% SYSTEMROOT% / system32 / config / system" o ambos desde el símbolo del sistema, ya sea elevado o no, verifique el resultado en la pizarra.


Aquí hay otro para agregar a la lista ;-)

(intente crear un 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 )

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


Creo que la forma más sencilla es tratar 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 la %date%variable puede incluir el día de la semana, solo obtenga la fecha de la última parte del DATEcomando:

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 ...


Otra forma 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 ...


PowerShell alguien?

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" } }


Alternativa: utilice una utilidad externa que esté diseñada para este propósito, por ejemplo, IsAdmin.exe (software gratuito sin restricciones).

Códigos de salida:

0 - Usuario actual no miembro del grupo Administradores

1 - Usuario actual de miembros de Administradores y en ejecución elevada.

2 - Usuario actual miembro de los administradores, pero sin ejecutar elevado


Encontré un usuario que puede usar net sessionaunque no sean administradores. No miré por qué. Mi solución es probar si el usuario puede crear 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 ::::::


>nul 2>&1 "%SYSTEMROOT%/system32/cacls.exe" "%SYSTEMROOT%/system32/config/system"&&( echo admin... )


@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 molestarán con muchas más de 1 líneas sin esto.

:start

Punto donde comienza el programa.

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

Establece el nombre de archivo del directorio a crear.

md /windows/%randname% 2>nul

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

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

Si la variable de entorno ERRORLEVEL es cero, entonces el mensaje echo echo success.
Ve al final (no sigas adelante).

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

Si ERRORLEVEL es uno, muestre un mensaje de error y vaya al final.

goto start

En caso de que el nombre de archivo ya exista, goto endvuelva a crear la carpeta (de lo contrario, el comando no permitirá que se ejecute).

:end

Especifique el punto final.

rd /windows/%randname% 2>nul

Eliminar el directorio creado.

pause >nul

Pausa para que el usuario pueda ver el mensaje.

Nota : >nuly 2>nulestán filtrando la salida de estos comandos.


@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...


whoami /groups | find "S-1-16-12288" > nul if not errorlevel 1 ( echo ... connected as admin )