web-dev-qa-db-fra.com

Comment créer un fichier de commandes pour exécuter cmd en tant qu'administrateur

J'ai besoin d'exécuter un fichier de commandes qui doit enregistrer une DLL. L'enregistrement DLL échoue car le fichier de commandes ne lance pas l'invite de commande en tant qu '"administrateur".

Est-il possible de démarrer le "invite de commande" comme administrateur via le fichier de commandes.

Environnement: Win7/Vista

28
JChan

Vous devrez peut-être d'abord utiliser un autre fichier de commandes pour lancer le second avec des droits d'administrateur.

Dans la première utilisation

runas /noprofile /user:mymachine\administrator yourbatchfile.bat

Après une lecture plus approfondie, vous devez pouvoir saisir le mot de passe à l'invite. Vous ne pouvez pas diriger le mot de passe car cette fonctionnalité a été verrouillée pour des raisons de sécurité.

Vous pouvez avoir plus de chance avec psexec .

7
Bali C

Ce script fait l'affaire! Il suffit de le coller dans le haut de votre fichier chauve-souris. Si vous souhaitez vérifier le résultat de votre script, ajoutez une commande "pause" au bas de votre fichier de commandes.

Ce script est maintenant légèrement modifié pour prendre en charge les arguments de ligne de commande.

@echo off
:: BatchGotAdmin
::-------------------------------------
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    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"
::--------------------------------------

::ENTER YOUR CODE BELOW:
33
Lokesh Kumar

(Ceci est basé sur réponse de @ DarkXphenomenon , qui a malheureusement eu quelques problèmes.)

Vous devez inclure votre code dans cet emballage:

if _%1_==_payload_  goto :payload

:getadmin
    echo %~nx0: elevating self
    set vbs=%temp%\getadmin.vbs
    echo Set UAC = CreateObject^("Shell.Application"^)                >> "%vbs%"
    echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 1 >> "%vbs%"
    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
goto :eof

:payload
    echo %~nx0: running payload with parameters:
    echo %*
    echo ---------------------------------------------------
    cd /d %2
    shift
    shift
    rem put your code here
    rem e.g.: Perl myscript.pl %1 %2 %3 %4 %5 %6 %7 %8 %9
goto :eof

Cela rend le fichier de commandes s'exécuter lui-même en tant qu'utilisateur élevé. Il ajoute deux paramètres au code privilégié:

  • Word payload, pour indiquer qu’il s’agit d’un appel payload, c’est-à-dire déjà élevé. Sinon, il ne ferait qu'ouvrir de nouveaux processus à plusieurs reprises.

  • chemin de répertoire où le script principal a été appelé. En raison du fait que Windows lance toujours toujours le cmd.exe élevé dans "% windir%\system32", il n’existe aucun moyen simple de savoir quel chemin était original ( et conservant la possibilité de copier votre script sans toucher au code)

Remarque: Malheureusement, pour une raison quelconque, shift ne fonctionne pas pour %* _, donc si vous avez besoin de passer des arguments réels, vous devrez recourir à la notation laide que j’ai utilisée dans l’exemple (%1 %2 %3 %4 %5 %6 %7 %8 %9), qui introduit également la limite de 9 arguments maximum

7
Alois Mahdal

Presse Ctrl+Shift et double-cliquez sur un raccourci à exécuter en tant que processus élevé.

Fonctionne également depuis le menu de démarrage.

5
caractacus

Cela fonctionne pour moi dans Windows 7 à 10 avec des paramètres et aussi démarrer l'application ou le fichier de n'importe où (navigateur inclus) et accéder au fichier de n'importe où, Remplacez (votre ancre VOTRE LOT DE SCRIPT HERE) par votre code, Cette solution peut vous aider: )

     @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`
4
krishnakumar sekar

Vous pouvez utiliser un raccourci qui relie au fichier de commandes. Il suffit d'aller dans les propriétés du raccourci et de sélectionner avancé, puis "exécuter en tant qu'administrateur".

Il suffit ensuite de masquer le fichier de commandes et d’exécuter le raccourci.

De cette façon, vous pouvez même définir votre propre icône pour le raccourci.

3
jojois74

Pour empêcher le script d'échouer lorsque le fichier de script réside sur un lecteur non-système (c :) et dans un répertoire avec des espaces.

Batch_Script_Run_As_Admin.cmd

@echo off
if _%1_==_payload_  goto :payload

:getadmin
    echo %~nx0: elevating self
    set vbs=%temp%\getadmin.vbs
    echo Set UAC = CreateObject^("Shell.Application"^)                >> "%vbs%"
    echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 1 >> "%vbs%"
    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
goto :eof

:payload

::ENTER YOUR CODE BELOW::   





::END OF YOUR CODE::

echo.
echo...Script Complete....
echo.

pause
3
meffect

Peut-être quelque chose comme ça:

if "%~s0"=="%~s1" ( cd %~sp1 & shift ) else (
  echo CreateObject^("Shell.Application"^).ShellExecute "%~s0","%~0 %*","","runas",1 >"%tmp%%~n0.vbs" & "%tmp%%~n0.vbs" & del /q "%tmp%%~n0.vbs" & goto :eof
)
1
dev5er6

Comme suggéré par l'utilisateur2549366, "Vous pouvez utiliser un raccourci qui relie au fichier de commandes." mais dans l'onglet Propriétés-> Compatibilité du raccourci, l'exécution en tant qu'administrateur peut être désactivée.

Vous devez donc cliquer avec le bouton droit de la souris sur votre "fichier.bat - raccourci", puis aller à -> Propriétés -> onglet Raccourci -> Avancé et vous pouvez cliquer sur Exécuter en tant qu’administrateur. Après cela, vous pouvez exécuter le raccourci.

1
bajla

Voici une version plus simple essentiellement du même fichier.

@echo off
break off
title C:\Windows\system32\cmd.exe
cls

:cmd
set /p cmd=C:\Enter Command:

%cmd%
echo.
goto cmd
0
gaws