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
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 .
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:
(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
Presse Ctrl+Shift et double-cliquez sur un raccourci à exécuter en tant que processus élevé.
Fonctionne également depuis le menu de démarrage.
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`
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.
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
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
)
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.
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