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) oWHOAMI
(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:
-
@echo off
- Deshabilitar la visualización de comandos
-
goto check_Permissions
- Saltar al bloque de código
:check_Permissions
- Saltar al bloque de código
-
net session >nul 2>&1
- Ejecutar comando
- Ocultar la salida visual del comando por
- Redireccionando el flujo de salida estándar (identificador numérico 1 /
STDOUT
) anul
- Redireccionando el flujo de salida de error estándar (controlador numérico 2 /
STDERR
) al mismo destino que el controlador numérico 1
- Redireccionando el flujo de salida estándar (identificador numérico 1 /
-
if %errorLevel% == 0
- Si el valor del código de salida (
%errorLevel%
) es0
, esto significa que no se han producido errores y, por lo tanto, el comando anterior inmediato se ejecutó con éxito
- Si el valor del código de salida (
-
else
- Si el valor del código de salida (
%errorLevel%
) no es0
, esto significa que se han producido errores y, por lo tanto, el comando anterior inmediato se ejecutó sin éxito
- Si el valor del código de salida (
- El código entre los paréntesis respectivos se ejecutará según los criterios que se cumplan
Capturas de pantalla
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 .exe
todas partes, solo 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;
}
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" yERRORLEVEL == 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 CON
reinicializa 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 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 ...
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 session
aunque 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 end
vuelva 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 : >nul
y 2>nul
está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
)