Il est un moyen facile, sans avoir à utiliser un outil externe - il fonctionne très bien avec Windows 7 et est rétro-compatible (Windows XP n'a pas de contrôle de compte d'utilisateur, donc pas d'élévation est nécessaire - dans ce cas, le script continue simplement).
Découvrez ce code (j'ai été inspiré par le code ici, mais je me suis amélioré dans ma version il n'y a pas de répertoire créé et supprimé pour vérifier les privilèges d'administrateur):
:::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights
:::::::::::::::::::::::::::::::::::::::::
@echo off
CLS
ECHO.
ECHO =============================
ECHO Running Admin shell
ECHO =============================
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )
:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges)
ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************
setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
exit /B
:gotPrivileges
::::::::::::::::::::::::::::
::START
::::::::::::::::::::::::::::
setlocal & pushd .
REM Run shell as admin (example) - put here code as you like
cmd /k
Le script prend avantage du fait qu' NET FILE
nécessite le privilège admin et les retours errorlevel 1
si vous ne l'avez pas. L'élévation est réalisé en créant un script qui re-lance le fichier de commandes pour obtenir des privilèges. Cela permet à Windows de présenter la boîte de dialogue contrôle de compte d'utilisateur et vous demande pour le compte admin et le mot de passe.
Je l'ai testé avec Windows 7 et Windows XP fonctionne bien pour les deux.
L'avantage est, après le point de départ, vous pouvez placer tout ce qui requiert des privilèges d'administrateur, par exemple, si vous avez l'intention de ré-installer et ré-exécuter un service Windows fin de débogage (suppose que mypackage.msi est un service package d'installation):
msiexec /passive /x mypackage.msi
msiexec /passive /i mypackage.msi
net start myservice
Sans ce privilège élévation de script de contrôle de compte d'utilisateur vous demande trois fois pour votre compte d'utilisateur admin et le mot de passe - maintenant vous êtes demandé qu'une seule fois au début, et seulement si nécessaire.
Mise à jour: Si votre script ne doit afficher un message d'erreur et la sortie si il n'y a pas de privilèges d'administrateur à la place de l'auto-élévatrices, c'est encore plus simple: Vous pouvez atteindre cet objectif en ajoutant ce qui suit au début de votre script:
@ECHO OFF & CLS & ECHO.
NET FILE 1>NUL 2>NUL & IF ERRORLEVEL 1 (ECHO You must right-click and select &
ECHO "RUN AS ADMINISTRATOR" to run this batch. Exiting... & ECHO. &
PAUSE & EXIT /D)
REM ... proceed here with admin rights ...
De cette façon, l'utilisateur doit cliquer avec le bouton droit et sélectionnez "Exécuter en tant qu'administrateur". Le script va procéder, après l' REM
déclaration si elle détecte les droits d'admin, sinon la sortie avec une erreur. Si vous n'avez pas besoin de l' PAUSE
, suffit de le retirer.
Important: NET FILE [...] EXIT /D)
doit être dans la même ligne, il est affiché ici en plusieurs lignes pour une meilleure lisibilité!
Mise à jour: Sur certaines machines, j'ai rencontré des problèmes qui sont résolus dans la nouvelle version ci-dessus déjà.
L'un était dû à différents devis double manipulation, l'autre problème était dû au fait que l'UAC est désactivé (niveau le plus bas) sur une machine Windows 7, d'où le script s'appelle elle-même, encore et encore.
J'ai fixé cette maintenant en enlevant les guillemets dans le chemin d'accès et le rajouter plus tard et j'ai ajouté un paramètre supplémentaire qui est ajouté lorsque le script re-lance avec des droits élevés.
Supprimer les guillemets doubles par le texte suivant (les détails sont ici):
setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
Vous pouvez ensuite accéder au chemin d'accès en utilisant !batchPath!
, il ne contient pas de guillemets, de sorte qu'il est sûr de dire "!batchPath!"
plus tard dans le script.
La ligne
if '%1'=='ELEV' (shift & goto gotPrivileges)
vérifie si le script a déjà été appelé par le VBS pour but d'élever les droits, donc en évitant les interminables récurrences. Il supprime le paramètre à l'aide de shift
.
2 votes
Regardez ce que j'ai posté - vous n'avez pas besoin d'un outil externe, le script vérifie automatiquement les droits d'administrateur et s'élève automatiquement si nécessaire.
1 votes
Veuillez considérer si la réponse de Matt serait la réponse cochée ? S
1 votes
Duplicata possible de Comment demander un accès Administrateur dans un fichier batch
0 votes
Veuillez considérer le nouveau Windows 10 dans la section des commentaires de l'article lot script J'ai posté.
5 votes
Depuis cmd :
@powershell Start-Process cmd -Verb runas
. Depuis Powershell, il suffit de déposer@powershell
. Cela lance cmd avec des droits élevés.0 votes
Ou essayez la méthode purement Windows en utilisant schtasks : stackoverflow.com/questions/19098101/
0 votes
La question n'est pas très claire car le terme
auto-elevate
se réfère àelevating without prompt
. Au cas où vous chercheriez cela, voir l'exploit aquí .