¿Es posible el que se ejecute un archivo BAT con derechos de Administrador?

Iniciado por BDJMarcelo, 20 Octubre 2018, 04:18 AM

0 Miembros y 1 Visitante están viendo este tema.

BDJMarcelo

Hola a todos.. ;-)

La verdad, no soy un experto en programación, pero, día a día aprendo más.

En la web encontré el siguiente código que asegura brindar a un (bat) los derechos de administrador en Windows 10 sin tantos bloqueos.

En este caso estoy intentando borrar una carpeta que está ubicada en los (PROGRAMASFILES) pero no me permite el acceso en Windows 10.

Agradezco amigos me puedan colaborar con su valiosa ayuda.



@echo off

REM .bat con permisos de administrador
:-------------------------------------
REM  --> Analizando los permisos
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> Si hay error es que no hay permisos de administrador.
if '%errorlevel%' NEQ '0' (
    echo Solicitando permisos de administrador... Requesting administrative privileges... Anfordern Administratorrechte ...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:-------------------------------------- 

REM   
ECHO.
if %PROCESSOR_ARCHITECTURE%==x86 (goto Uni32bit) else if %PROCESSOR_ARCHITECTURE%==AMD64 (goto Uni64bit)

:Uni32bit
CD %PROGRAMFILES%
TASKKILL /F /IM "JAHER\JAHER.exe"
RD /S /Q "JAHER"
DEL /F /Q %0
Exit

:Uni64bit
net user administrador /active:yes
CD %PROGRAMFILES(X86)%
RD /S /Q "JAHER"
DEL /F /Q %0
Exit
EXIT

**Aincrad**

#1
El problema era q no mataba el proceso, Bueno aqui esta
(Funcionando correctamente en Win7 32bits y 64 bits) ,  Me avisas si te sirvió.

Código (bash) [Seleccionar]
@echo off

REM .bat con permisos de administrador
:-------------------------------------
REM  --> Analizando los permisos
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> Si hay error es que no hay permisos de administrador.
if '%errorlevel%' NEQ '0' (
    echo Solicitando permisos de administrador... Requesting administrative privileges... Anfordern Administratorrechte ...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:-------------------------------------- 

REM   
ECHO.
if %PROCESSOR_ARCHITECTURE%==x86 (goto Uni32bit) else if %PROCESSOR_ARCHITECTURE%==AMD64 (goto Uni64bit)

:Uni32bit
goto Condicional

:Uni64bit
net user administrador /active:yes
goto Condicional


:Condicional
tasklist | find /i "JAHER.exe" && (
TASKKILL /IM "JAHER.exe" /F
echo Proceso Encontrado y Terminado, Procedemos a eliminar la carpeta . . .
goto delete
) || (
echo Proceso no Abierto Procedemos a eliminar la carpeta . . .
)
goto delete

:delete
cls
color a
cd "%PROGRAMFILES%"
set Folder=JAHER

if exist %folder% (
RD /S /Q %Folder%
echo La Carpeta %folder% Fue Eliminada.
pause
DEL /F /Q %0
) else (
echo La Carpeta no existe.
pause
DEL /F /Q %0
)

exit




BDJMarcelo

Hola amigo (  **Aincrad** )   ;-)

Muchas gracias por tu ayuda, la verdad si me funciono en parte el cambio.

Se lemina el archivo (JAHER.exe), de forma correcta, pero no se borra la carpeta..

Al final de ejecutar el archivo me aparaece la opción:

echo La Carpeta no existe.
pause


Pero bueno, para que no me consulte para precionar una tecla para continuar, elimine ( pause ).

Lo que si me gustaría saber es si el primer codigo hasta la opción ( REM ) funciona para brindar derechos de administrador a codigos bat que tengo..?

Gracias por la ayuda de antemano...  ;D


@echo off

REM .bat con permisos de administrador
:-------------------------------------
REM  --> Analizando los permisos
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> Si hay error es que no hay permisos de administrador.
if '%errorlevel%' NEQ '0' (
    echo Solicitando permisos de administrador... Requesting administrative privileges... Anfordern Administratorrechte ...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:-------------------------------------- 

REM   

AQUI EL CODIGO BAT....?

EXIT

EdePC

Saludos,

- En los nuevos Windows suele ser más sencillo utilizar:

Código (dos) [Seleccionar]
@echo off
fsutil dirty query %systemdrive%  >nul 2>&1 || (
powershell start-process %0 -verb runas
exit
)
echo Tengo permisos de Administrador a partir de ahora
pause

BDJMarcelo

Hola amigo (  EdePC ) ....

Muchas gracias por tu ayuda, lamentablemente en el código anterior se crea el scrip (getadmin.vbs), pero al no encontrarlo presenta un error.

Luego en el cambio que realizo el amigo ( **Aincrad** ), igualmente presenta error.

Se activa la cuenta de administrador.

net user administrador /active:yes

Y al iniciar la PC molesta ver la cuenta activa.

Voy a probar tu aporte amigo y te comento.