2 votes

Lancer un fichier de lot sans fenêtre de commandes en tant qu'administrateur?

J'ai essayé de nombreuses solutions, mais elles n'ont pas fonctionné, d'une manière ou d'une autre.

Je peux actuellement lancer un fichier bat sans fenêtre de commande à partir d'un vbs, mais je ne sais pas comment le lancer en tant qu'administrateur.

VBScript (pour pouvoir lancer le fichier batch sans fenêtre de commande) :

Set oShell = CreateObject ("Wscript.Shell") Dim strArgs strArgs = "cmd /c Start.bat" oShell.Run strArgs, 0, false

Batch (Start.bat) :

Start /wait Application.exe Net stop ServiceNameGoesHere

Comment puis-je lancer le fichier batch en tant qu'administrateur tout en le rendant invisible ?

5voto

Dranon Points 262

Vous pouvez utiliser la méthode ShellExecute de l'objet Windows Shell à la place, et utiliser l'opération runas.

Set Shell = CreateObject("Shell.Application")
Shell.ShellExecute "Start.bat", , , "runas", 0

Cela demandera une élévation de privilèges et exécutera Start.bat.

Les arguments de ShellExecute sont (extraits et résumés de la page ShellExecute sur MSDN):

  • sFile [in] - Chaîne du nom de fichier sur lequel effectuer l'opération
  • vArguments [in, facultatif] - Chaîne d'arguments (arguments de ligne de commande)
  • vDirectory [in, facultatif] - Le chemin d'accès complet du répertoire contenant le fichier spécifié par sFile. Si ce paramètre n'est pas spécifié, le répertoire de travail actuel est utilisé.
  • vOperation [in, facultatif] - L'opération à effectuer. Si ce paramètre n'est pas spécifié, l'opération par défaut est effectuée.
  • vShow [in, facultatif] - Recommandation d'affichage de la fenêtre initiale. 0 pour masqué.

Si vous devez absolument utiliser cmd /c pour exécuter le fichier batch, vous devrez spécifier le chemin d'accès complet. L'invocation ressemblerait à ceci:

Set Shell = CreateObject("Shell.Application")
Shell.ShellExecute "cmd", "/c F:\ull\path\to\Start.bat", , "runas", 0

1voto

Yisroel Tech Points 4790

Vous pouvez ajouter ce code en haut du fichier batch et il demandera automatiquement des droits d'administrateur:

@echo off

:: BatchGotAdmin
:-------------------------------------
REM  --> Vérifier les autorisations
    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 le drapeau d'erreur est activé, nous n'avons pas d'administrateur.
if '%errorlevel%' NEQ '0' (
    echo Demande de privilèges d'administration...
    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"
:--------------------------------------    

À partir d'ici: https://stackoverflow.com/a/10052222/5518385

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X