web-dev-qa-db-fra.com

Comment exécuter la commande de fichier batch avec des autorisations élevées?

J'écris un fichier de commandes que je vais distribuer parmi les utilisateurs. Je dois exécuter des commandes avec des autorisations élevées. Ma solution initiale était d'utiliser:

runas /noprofile /user:Administrator SOME_COMMAND  

Cependant, de nombreuses machines (y compris la mine) ont le compte d'administrateur caché inactif et ne disposer pas d'un mot de passe administrateur mis en place. Je ne peux pas non plus spécifier un autre nom d'utilisateur car différentes machines auront des utilisateurs différents. Existe-t-il un moyen de reproduire le "clic droit -> exécuter en tant qu'administrateur" Action via un fichier de commandes? Je ne me dérange pas que l'invite apparaisse, je ne veux tout simplement pas que l'utilisateur soit explicitement cliquant avec le bouton droit de la souris et exécuté en tant qu'administrateur.

5
hazrmard

Vous pouvez profiter de PowerShell, présent sur chaque système Windows moderne.

Divisez les commandes nécessitant une élévation dans un fichier de commandes distinct, par ex. elevated.bat. Ensuite, quand il est temps de les exécuter, utilisez-le depuis votre script non élevé:

powershell -command "Start-Process elevated.bat -Verb runas"

Le -Verb runas La partie est ce qui provoque l'invite d'élévation. Si le fichier de commandes d'origine est déjà exécuté en tant qu'administrateur ou si les invites UAC sont éteintes, le nouveau fichier sera élevé sans une invite.

Notez que le répertoire actuel du processeur de lots élevé commencera comme System32. Si tel est un problème, vous pouvez utiliser cette version alternative pour le faire démarrer dans le même répertoire que le script non élevé:

powershell -command "Start-Process cmd -ArgumentList '/c %CD% && elevated.bat' -Verb runas"

Cela provoque la nouvelle instance cmd au premier cd dans le répertoire fourni par l'invite non admise %CD% variable, puis exécutez le fichier de commandes souhaité.

7
Ben N

Runadmin Vous permet d'exécuter un programme de la ligne de commande avec des droits élevés (il affichera l'UAC afin que l'utilisateur puisse entrer des informations d'identification).

0
Ultralisk

Ce que j'utilise est le code suivant:

::#################################################################################################################################
:: Elevate this script                                                                                                            #
::#################################################################################################################################

(
    :: Check Admin rights and create VBS Script to elevate
    >nul fsutil dirty query %SYSTEMDRIVE% 2>&1 || (

        :: Very little red console
        mode con cols=80 lines=3 
        color cf

        :: Message
        title Please wait...
        echo.
        echo                         Requesting elevated Shell...

        :: Create VBS script
        echo Set UAC = CreateObject^("Shell.Application"^)>"%TEMP%\elevate.vbs"
        echo UAC.ShellExecute "%~f0", "%TEMP%\elevate.vbs", "", "runas", 1 >>"%TEMP%\elevate.vbs"
        if exist "%TEMP%\elevate.vbs" start /b /wait >nul cscript /nologo "%TEMP%\elevate.vbs" 2>&1

        :: Delete elevation script if exist
        if exist "%TEMP%\elevate.vbs" >nul del /f "%TEMP%\elevate.vbs" 2>&1

        exit /b
    )    
)

pushd "%~dp0"

.... your code ....

popd

Mettez-le après votre @echo Off et Remarques.

0
FifthAxiom