Comment créer un fichier batch pour exécuter cmd en tant qu'administrateur
j'ai besoin d'exécuter un fichier batch qui doit enregistrer une DLL. L'enregistrement DLL est un échec parce que le fichier Batch ne démarre pas l'invite de commande "administrateur".
Est-il possible de démarrer le "Invite De Commande"administrateur via le fichier batch.
Environnement: Win7 / Vista
12 réponses
vous pourriez avoir à utiliser un autre fichier batch en premier pour lancer le second avec des droits d'administrateur.
Dans la première utilisation
runas /noprofile /user:mymachine\administrator yourbatchfile.bat
en lisant davantage, vous devez être en mesure de taper le mot de passe à l'invite. Vous ne pouvez pas fermer le mot de passe car cette fonctionnalité a été verrouillée pour des raisons de sécurité.
vous pourriez avoir plus de chance avec psexec.
ce script fait l'affaire! Il suffit de coller dans le haut de votre fichier bat. Si vous voulez revoir la sortie de votre script, ajoutez une commande "pause" au bas de votre fichier batch.
Ce script est maintenant légèrement modifié pour supporter la ligne de commande args.
@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 la réponse de@DarkXphenomenon, qui a malheureusement eu quelques problèmes.)
vous devez inclure votre code dans ce wrapper:
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
ceci fait que le fichier batch s'exécute lui-même en tant qu'utilisateur surélevé. Il ajoute deux paramètres au code privilégié:
mot
payload
, pour indiquer qu'il s'agit d'un appel de charge utile, c'est-à-dire déjà élevé. Autrement cela ouvrirait de nouveaux processus et plus.chemin du répertoire où le script principal a été appelé. En raison du fait que Windows toujours début du cmd élevé.exe dans "%windir % \system32", il n'y a pas de moyen facile de savoir quoi le chemin d'origine a (et conserver la capacité de copier votre script sans toucher le code)
Remarque: Malheureusement, pour une raison quelconque shift
ne fonctionne pas pour les %*
, donc si vous avez besoin
passer arguments, vous devrez recourir à laide de la notation que j'ai utilisé
dans l'exemple (%1 %2 %3 %4 %5 %6 %7 %8 %9
), ce qui ramène également à la limite de
maximum de 9 arguments
Appuyez sur Ctrl+Maj et double-cliquez sur un raccourci pour exécuter un processus élevés.
Fonctionne à partir du menu démarrer.
cela fonctionne pour Me'in Windows 7 à 10 avec des paramètres et aussi kick application de démarrage ou le fichier de n'importe où(y compris le navigateur) et aussi l'accès au fichier de n'importe où, remplacer (votre script de fournée ici ancre) avec votre code ,Cette solution peut 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`
pour empêcher le script de tomber en panne lorsque le fichier script se trouve 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
vous pouvez utiliser un raccourci qui renvoie au fichier batch. Il suffit d'aller dans Propriétés pour le raccourci et de sélectionner Avancé, puis "exécuter en tant qu'administrateur".
alors il suffit de faire le fichier batch caché, et lancer le raccourci.
de Cette façon, vous pouvez même définir votre propre icône du raccourci.
Peut-être quelque chose comme ceci:
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
)
Voici une version plus simple 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
comme l'utilisateur 2549366 l'a suggéré auparavant, "vous pouvez utiliser un raccourci qui renvoie au fichier batch."mais dans L'onglet Propriétés->compatibilité du raccourci, l'exécution en tant qu'administrateur peut être désactivée.
alors à la place, vous cliquez avec le bouton droit de la souris sur votre "fichier".bat-raccourci" puis allez à->Propriétés -> onglet Raccourci - > avancé et là vous pouvez cliquer Exécuter en tant qu'administrateur. Après cela, Vous pouvez exécuter le raccourci.
cela peut être une solution, j'ai fait quelque chose de similaire, mais celui-ci ne semble pas fonctionner par exemple, si la fonction nécessaire requiert des privilèges d'administrateur, il devrait vous demander de redémarrer en tant qu'administrateur.
@echo off
mkdir C:\Users\cmdfolder
if echo=="Access is denied." (goto :1A) else (goto :A4)
:A1
cls
color 0d
echo restart this program as administator
:A4
pause
faites un texte en utilisant le bloc-notes ou n'importe quel éditeur de texte de votre choix. Ouvrez bloc-notes, écrivez cette courte commande " cmd.exe " sans la citation et la sauvegarder en cmd.chauve.
cliquez sur cmd.chauve-souris et choisissez "exécuter en tant qu'administrateur".