script run how example create commands batch bat batch-file administrator runas

batch file - run - Batch Script para ejecutar como administrador



execute cmd command in bat file (12)

Estoy escribiendo un programa de comprobación de cliente / servidor pero debe ejecutarse como administrador.

Quiero que esto se ejecute de forma silenciosa en mi red y usuarios, y no quiero que aparezca el mensaje "Ejecutar como" Administrador. ¿Hay algún código de inicio que pueda colocar en el archivo por lotes para que se ejecute automáticamente como Administrador?


Soluciones que no funcionaron.

No: la solución - crear un acceso directo [-> Compatibilidad -> "ejecutar este programa como administrador"] no funciona.

Esta opción está desactivada en Windows 7. Incluso con UAC desactivado

No: el runas /env /user:domain/Administrator <program.exe/command you want to execute> tampoco es suficiente porque le pedirá al usuario la contraseña de administrador.

Solucion que funciono

Sí: deshabilitar UAC -> Crear un trabajo usando el programador de tareas, esto funcionó para mí.

  • Cree un trabajo en el programador de tareas y hágalo funcionar como un usuario con permisos de administrador.
  • Marca explícitamente: "Ejecutar con los privilegios más altos"
  • Desactive UAC para que no haya ningún mensaje para ejecutar esta tarea

Puede dejar que el script habilite UAC posteriormente editando el registro si lo desea. En mi caso, esta secuencia de comandos se ejecuta una sola vez mediante la creación de una máquina virtual de Windows, donde UAC está deshabilitado en la imagen.

Sigo buscando el mejor enfoque para un script ejecutado como administrador sin demasiados problemas.


A continuación hay una solución alternativa:

  1. Crear un acceso directo del archivo .bat
  2. Abra las propiedades del acceso directo. Debajo de la pestaña de acceso directo, haga clic en avanzado .
  3. Marque "Ejecutar como administrador"

Ejecutar el acceso directo ejecutará su script por lotes como administrador.


Como no he encontrado ningún script simple hasta ahora, aquí están mis dos centavos:

set ELEVATE_APP=Full command line without parameters for the app to run set ELEVATE_PARMS=The actual parameters for the app echo Set objShell = CreateObject("Shell.Application") >elevatedapp.vbs echo Set objWshShell = WScript.CreateObject("WScript.Shell") >>elevatedapp.vbs echo Set objWshProcessEnv = objWshShell.Environment("PROCESS") >>elevatedapp.vbs echo objShell.ShellExecute "%ELEVATE_APP%", "%ELEVATE_PARMS%", "", "runas" >>elevatedapp.vbs DEL elevatedapp.vbs


Cree un acceso directo y configure el acceso directo para que siempre se ejecute como administrador.

How-To Geek forum Cree un archivo por lotes para ejecutar cmd como solución de administrador :

Haga un archivo por lotes en un editor y nombreit.bat y luego cree un acceso directo a él. Nameit.bat - acceso directo. luego haga clic derecho en Nameit.bat - acceso directo -> Propiedades-> pestaña Acceso directo -> Avanzado y haga clic en Ejecutar como administrador. Ejecutarlo desde el acceso directo.


Hice esta pequeña modificación en el script de Matt para permitir que se ejecute desde un solo script (solo agréguelo al comienzo de cualquier script que requiera la invocación de UAC), pero lea a continuación el código para encontrar una solución aún mejor que he encontrado en una Blog:

:: ### START UAC SCRIPT ### if "%2"=="firstrun" exit cmd /c "%0" null firstrun if "%1"=="skipuac" goto skipuacstart :checkPrivileges NET FILE 1>NUL 2>NUL if ''%errorlevel%'' == ''0'' ( goto gotPrivileges ) else ( goto getPrivileges ) :getPrivileges if ''%1''==''ELEV'' (shift & goto gotPrivileges) setlocal DisableDelayedExpansion set "batchPath=%~0" setlocal EnableDelayedExpansion ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%/OEgetPrivileges.vbs" ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%/OEgetPrivileges.vbs" "%temp%/OEgetPrivileges.vbs" exit /B :gotPrivileges setlocal & pushd . cd /d %~dp0 cmd /c "%0" skipuac firstrun cd /d %~dp0 :skipuacstart if "%2"=="firstrun" exit :: ### END UAC SCRIPT ### :: ### START OF YOUR OWN BATCH SCRIPT BELOW THIS LINE ###

Mi modificación utiliza dos argumentos de archivo como puede ver, lo cual no es particularmente elegante, pero cumple con su cometido (y siempre puede esconderlos en el extremo de la cola reservando los primeros argumentos utilizando marcadores de posición ficticios). Además, el script de AFAIK Matt no admite espacios en las rutas de archivos y esta limitación también se aplica a mi modificación de este script.

Este problema parece ser inherente a la forma en que VBS maneja estas rutas, pero en el enlace a continuación hay una solución aún mejor basada en VBS para invocar UAC que se ejecuta desde un solo script sin la necesidad de una solución como esta usando argumentos de archivo y eso también admite espacios en rutas de archivos:

http://pcloadletter.co.uk/2012/12/11/uac-elevation-for-batch-script/

La secuencia de comandos en este enlace realiza llamadas a VBS ligeramente diferentes como notará, lo que por alguna razón evita el problema con espacios.


Mi solución, si no necesita tener un archivo .bat, es convertir el archivo por lotes en un archivo .exe, luego podrá configurar la ejecución como administrador.


No pierda su tiempo, use este comando de una línea para ejecutar la línea de comandos como administrador:

echo createobject("shell.application").shellexecute "cmd.exe",,,"runas",1 > runas.vbs & start /wait runas.vbs & del /f runas.vbs

Si desea iniciar cualquier aplicación con privilegios de administrador, simplemente escribirá la ruta del agujero para esta aplicación como esta notepad ++ en los archivos de mi programa, por ejemplo:

echo createobject("shell.application").shellexecute "%programfiles%/Notepad++/notepad++.exe",,,"runas",1 > runas.vbs & start /wait runas.vbs



Si todas las respuestas anteriores no son de su agrado, puede usar autoIT para ejecutar su archivo (o cualquier otro archivo) como un usuario específico con sus credenciales.

Muestra de una secuencia de comandos que ejecutará un programa utilizando los privilegios de los usuarios.

installAdmin() Func installAdmin() ; Change the username and password to the appropriate values for your system. Local $sUserName = "xxxxx" Local $sPassword = "xxx" Local $sDirectory = "C:/ASD4VM/Download/" Local $sFiletoRun = "Inst_with_Privileges.bat" RunAsWait($sUserName, @ComputerName, $sPassword, 0, $sDirectory & $sFiletoRun) EndFunc ;==>Example

AutoIT se puede encontrar aquí. -> Utiliza un formato .ua3 que se compila en un archivo .exe que se puede ejecutar.


Usted tiene un par de opciones.

  1. Si necesita hacerlo utilizando solo un archivo por lotes y comandos nativos, consulte ¿Cómo puedo elevar automáticamente mi archivo por lotes, para que solicite derechos de administrador de UAC si es necesario? .

  2. Si las utilidades de terceros son una opción, puede usar una herramienta como Elevate . Es un ejecutable al que llama con el programa que desea ejecutar elevado como parámetro.
    Así: elevate net share ...


es posible mediante la sintaxis:

RUNAS [/profile] [/env] [/netonly] /user:user Program Key : /profile Option to load the user''s profile (registry) /env Use current environment instead of user''s. /netonly Use the credentials specified only for remote connections. /user Username in form USER@DOMAIN or DOMAIN/USER (USER@DOMAIN is not compatible with /netonly) Program The command to execute

ejemplo:

runas /env /user:domain/Administrator <program.exe/command you want to execute>


@echo off call :isAdmin if %errorlevel% == 0 ( goto :run ) else ( echo Requesting administrative privileges... goto :UACPrompt ) exit /b :isAdmin fsutil dirty query %systemdrive% >nul exit /b :run <YOUR BATCH SCRIPT HERE> exit /b :UACPrompt echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%/getadmin.vbs" echo UAC.ShellExecute "cmd.exe", "/c %~s0 %~1", "", "runas", 1 >> "%temp%/getadmin.vbs" "%temp%/getadmin.vbs" del "%temp%/getadmin.vbs" exit /B`