[TIP] Ejecutar cualquier script cmd o bat con permisos de Administrador

Colapsar
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • jmtella
    Administrator
    • Nov
    • 20578

    [TIP] Ejecutar cualquier script cmd o bat con permisos de Administrador

    Algunas veces necesitamos ejecutar script con permisos de administrador, El presente esqueleto, analiza si tenemos perisos y en caso de no tenerlos eleva los privilegios a Administrador.

    Unicamente teneis que coloar cuerto codigo a partir de la etiqueta :cuerpo.

    Código:
    @echo off
    cd /d "%~dp0"
    if NOT "%cd%"=="%cd: =%" (
       echo El directorio actual contine espacios en el path.
       echo Este comando debe estar en un path que no contenga espacios. 
       rundll32.exe cmdext.dll,MessageBeepStub
       pause
       echo.
       goto :EOF
    )
    
    if {%1} EQU {[adm]} goto :data
    REG QUERY HKU\S-1-5-19\Environment >NUL 2>&1 && goto :data
    
    set command="""%~f0""" [adm] %*
    setlocal enabledelayedexpansion
    set "command=!command:'=''!"
    
    powershell -NoProfile Start-Process -FilePath '%COMSPEC%' ^
    -ArgumentList '/c """!command!"""' -Verb RunAs 2>NUL
    goto :EOF
    
    :data
    setlocal enabledelayedexpansion
    if {%1} EQU {[adm]} (
       set adm=%1
       shift
    ) ELSE (set adm=)
    
    :cuerpo
    REM ==============================================
    REM Poner aqui el codigo a ejecutar
    REM ==============================================
    
    
    
    
    REM ==============================================
    :fin
    if {%adm%} EQU {[adm]} (
       echo.
       echo [Pulse 0 para salir]
       choice /c 0 /n
    )
  • jquilezl
    Super Moderator
    • Dec
    • 724

    #2
    Funciona, y no se salta el UAC, lo que es un alivio.

    Comentario

    • Vicky
      Senior Member
      • Jan
      • 273

      #3
      Ahora mismo no se me ocurre ningún bat... que tenga para elevar permisos, pero seguro que alguno hay, me parece una función estupenda.

      Gracias.
      Vicky
      Un Saludo.

      Comentario

      • Warner2469
        Junior Member
        • Oct
        • 1

        #4
        Uff muchas gracias, lo probaré en un script que necesita dar ENTER con %Sendkey% y necesita permiso administrado!

        Comentario

        • exegom
          Junior Member
          • Oct
          • 1

          #5
          Que joyita, lo usé para reiniciar servicios
          Una aclaración, tuve que borrar las líneas que están abajo de :cuerpo quedando así


          Código:
          :data
          setlocal enabledelayedexpansion
          if {%1} EQU {[adm]} (
             set adm=%1
             shift
          ) ELSE (set adm=)
          
          :cuerpo
          net stop SERVICIO
          net start SERVICIO
          
          :fin
          if {%adm%} EQU {[adm]} (
             echo.
             echo [Pulse 0 para salir]
             choice /c 0 /n
          )
          Probado en W10 y W11
          Muchas gracias!

          Comentario

          • noSign
            Super Moderator
            • Dec
            • 4380

            #6
            Originalmente publicado por exegom Ver Mensaje
            Que joyita, lo usé para reiniciar servicios
            Una aclaración, tuve que borrar las líneas que están abajo de :cuerpo quedando así


            Código:
            :data
            setlocal enabledelayedexpansion
            if {%1} EQU {[adm]} (
            set adm=%1
            shift
            ) ELSE (set adm=)
            
            :cuerpo
            net stop SERVICIO
            net start SERVICIO
            
            :fin
            if {%adm%} EQU {[adm]} (
            echo.
            echo [Pulse 0 para salir]
            choice /c 0 /n
            )
            Probado en W10 y W11
            Muchas gracias!
            Melón, te lo indica el script original

            "Poner aquí el código a ejecutar"

            Al igual que el tuyo no funciona si no colocas el SERVICIO determinado.

            Como curiosidad, los script con punto final en echo, me dan error.:
            "echo." no se reconoce como un comando interno o externo
            Lo llevo solucionando eliminando el punto, pero es un coñ4z0

            Comentario

            • jmtella
              Administrator
              • Nov
              • 20578

              #7
              Originalmente publicado por noSign Ver Mensaje

              ....

              Como curiosidad, los script con punto final en echo, me dan error.:
              "echo." no se reconoce como un comando interno o externo
              Lo llevo solucionando eliminando el punto, pero es un coñ4z0
              echo. tiene que pegar un salto de linea... si no lo pega, algo está mal...

              Prueba en una consola... debe pegar el salto...

              Comentario

              • noSign
                Super Moderator
                • Dec
                • 4380

                #8
                Originalmente publicado por jmtella Ver Mensaje

                echo. tiene que pegar un salto de linea... si no lo pega, algo está mal...

                Prueba en una consola... debe pegar el salto...
                Unas veces funciona, otras aparece "Echo." ese texto en pantalla y otras el error.

                Código:
                @echo off
                echo.
                Set /P ".=Primer texto a imprimir " <nul
                Call :ColorText 0A "Esto es Verde"
                Set /P ".= Recupero color por defecto " <nul
                Call :ColorText 0C "Pero esto sera ROJO" end
                set /P ".= Y esto como linea aparte" <nul
                goto :EOF
                
                
                REM =============================
                :ColorText [%1 = Color] [%2 = Text]
                pushd %temp%
                set /P ".= .">"%~2"<nul
                findstr /v /a:%1 /R "^$" "%~2" nul 2>nul
                if "%3"=="end" echo.
                del "%~2">nul 2>nul
                popd
                exit /b
                Este script si lo reconoce sin errores

                Comentario

                • noSign
                  Super Moderator
                  • Dec
                  • 4380

                  #9
                  En este script si que me da error (es el configurador de Office YAOCTRI_Configurator.cmd de @abbodi1406 en MDL ojo no ejecutarlo, porque está imcompleto, el foro no deja enviar mas de 3000 caracteres ni *.cmd)

                  Código:
                  @setlocal DisableDelayedExpansion
                  @echo off
                  set "_cmdf=%~f0"
                  if exist "%SystemRoot%\Sysnative\cmd.exe" (
                  setlocal EnableDelayedExpansion
                  start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" "
                  exit /b
                  )
                  if exist "%SystemRoot%\SysArm32\cmd.exe" if /i %PROCESSOR_ARCHITECTURE%==AMD64 (
                  setlocal EnableDelayedExpansion
                  start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" "
                  exit /b
                  )
                  set "SysPath=%SystemRoot%\System32"
                  set "Path=%SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
                  if exist "%SystemRoot%\Sysnative\reg.exe" (
                  set "SysPath=%SystemRoot%\Sysnative"
                  set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%"
                  )
                  
                  
                  :check
                  if "!CTRsource:~-1!"=="\" set "CTRsource=!CTRsource:~0,-1!"
                  cls
                  echo %line%
                  echo Source  : "!CTRsource!"
                  echo %line%
                  echo.
                  copy /y nul "!CTRsource!\Office\#.rw" 1>nul 2>nul && (
                  set CTRtype=Local
                  if exist "!CTRsource!\Office\#.rw" del /f /q "!CTRsource!\Office\#.rw"
                  ) || (
                  set CTRtype=DVD
                  )
                  
                  
                  :TheEnd
                  echo.
                  echo Press 9 or X to exit.
                  choice /c 9X /n
                  if errorlevel 1 (exit /b) else (rem.)
                  goto :eof
                  ​

                  Comentario

                  • jmtella
                    Administrator
                    • Nov
                    • 20578

                    #10
                    No tiene sentido. El ECHO. te debe funcionar siempre. Pruebalo en cualquier otra maquina y verás.

                    Algo raro, que no he visto nunca, te pasa en esa maquina.-..

                    Comentario

                    Trabajando...
                    X