Comment demander un accès Administrateur à l'intérieur d'un fichier de commandes
Je suis en train d'écrire un fichier de commandes pour mes utilisateurs à exécuter à partir de leurs machines Vista avec l'UAC. Le fichier est à nouveau de la rédaction de leur fichier hosts, il doit être exécuté avec des autorisations d'Administrateur. J'ai besoin d'être en mesure d'envoyer un e-mail avec un lien à la .le fichier bat. Le comportement souhaité est que quand vous cliquez-droit sur le fichier et Ouvrez, ils vont obtenir une de ces boîtes de dialogue contrôle de compte d'utilisateur qui fait que l'écran s'éteignent et que les forces de leur répondre s'ils veulent donner à la demande de l'autorisation d'exécuter en tant qu'administrateur. Au lieu de cela, ils sont juste de voir "Accès refusé" sur la fenêtre de ligne de commande.
Est-ce possible de faire différemment?
- Si vous êtes dans cet et qui, comme moi, sont heureux avec l'aide de PowerShell, ne manquez pas le seul-liner à partir de @toster-cx. Parfait!
Vous devez vous connecter pour publier un commentaire.
Ce script est le tour est joué! Il suffit de le coller en haut de votre fichier bat. Si vous voulez revoir la sortie de votre script, ajouter une "pause" de commande au bas de votre fichier de commandes.
Mise à JOUR: Ce script est maintenant légèrement modifié pour soutenir les arguments de ligne de commande et une version 64 bits de l'OS.
Merci Eneerge @ https://sites.google.com/site/eneerge/scripts/batchgotadmin
UAC.ShellExecute("filename", ""args"", "", "runas", 1)
. J'ai donc changé"%*"
à%*
sans les guillemets. Puis, dans la dernière ligne %1 etc. changement. Que faire alors?""C:\bin""
qui est à l'origine d'une erreur.Expected End of Statement
> nul 2>&1 foo.exe
au lieu defoo.exe > null 2>&1
). Je me sens compétent dans windows batch script, mais je n'ai jamais vu ce style avant; j'ai été surpris, il a même travaillé. Est-il un avantage à cela? Merci!set params = %*:"=""
. Quelqu'un pourrait-il m'expliquer ce qu'il se passe ici? Pour commencer,%params%
ne pas affectés parce qu'il y a un espace avant le signe égal. Ensuite, il semble qu'il y ait un supplément de devis sur la fin. Est-il une raison à cela?"/c %~s0 %params%"
ne semble pas passer des arguments. Pour résoudre ce problème, les guillemets doubles (échappé de guillemets) sont nécessaires autour de la params, comme"/c %~s0 ""%params%"""
.>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config"
.cd %CD% &
dans le"cmd.exe", "/c cd %CD% & %~s0...
cacls
est obsolète depuis Windows 7.evaluate.bat
que je peux mettre dans%windir%\System32
ou le même répertoire et ensuite, je pourrais simplement appelerevaluate.bat %0
ou quelque chose et il va relancer mon script en tant qu'admin si il n'a pas obtenu les droits d'admin à ce jour. Même si cette solution fonctionne, il n'est pas très pratique pour un accès rapide et l'utilisation.set params=%*
(sans les espaces), quel est la version originale de faire? ...les espaces autour de=
sont évidemment faux...set params= %*
au lieu deset params=%*
, donc params est garanti d'être définiVoici un one-liner j'ai été en utilisant:
Notes:
am_admin
if not "%1"=="am_admin" (powershell start -verb runas '%0' 'am_admin "%~1" "%~2"' & exit)
Les params sera l'un au-dessus de là où ils étaient'am_admin %*'
passer tout, n'est pas de bien jouer avec des citations et des espaces tho :/ Vous pouvez utilisershift
dans le lot à la pop la première arg off, ce qui permet de corriger tous les arguments sauf%0
.Voici mon code! Il semble grand, mais c'est surtout des lignes de commentaires (les lignes commençant par ::).
Caractéristiques:
Dossier mappé vérifier (vous Avertit si l'admin ne peut pas accéder lecteur mappé)
Peut être utilisé comme une bibliothèque externe (vérifier mon post à ce sujet: https://stackoverflow.com/a/30417025/4932683)
Il suffit de fixer ce jusqu'à la fin de votre fichier de commandes, ou l'enregistrer comme une bibliothèque (case ci-dessus)
Exemple sur la façon de l'utiliser
&fc;: 2>nul
dansset "_FN=_%~ns1" & echo/%TEMP%| findstr /C:"(" >nul && (echo/ERROR: %%TEMP%% path can not contain parenthesis &pause &endlocal &fc;: 2>nul & goto:eof)
était paramètre errorlevel 1. J'ai enlevé que peu, et ça a marché parfaitement. Je suis à l'aide de Windows 10 à la Maison.fc;:
puisqu'il va :eof juste après? Je ne suis pas sûr pourquoi un peu qui a causé le problème, car il doit être exécuté.echo/%TEMP%| findstr /C:"(" >nul
tests si il y a un(
char dans yout%temp%
variable d'environnement, et doit s'exécuter uniquement la partie après le&&
si le résultat est positif. Il est étrange que votre(
test revient positif si.Une autre approche consiste à
et puis
Denis
[Ajouté par la suite - Oui, je n'ai pas manquer de remarquer la date de ce fil.]
Ben Gripka la solution provoque une boucle infinie. Son lot d'œuvres de ce genre (pseudo-code):
Comme vous pouvez le voir, ce qui provoque une boucle infinie, si le VBS échoue demander des privilèges d'administrateur.
Cependant, la boucle infinie peut se produire, bien qu'admin privilèges ont été demandé.
De l'enregistrement Ben Gripka du fichier de commandes est juste de faire des erreurs. J'ai joué un peu avec le lot et a observé que des privilèges d'administrateur sont disponibles bien que l'échec de la vérification. Fait intéressant, la vérification a fonctionné comme prévu, si j'ai commencé le fichier de commandes à partir de l'explorateur windows, mais il n'avait pas quand je l'ai commencé de mon IDE.
Alors je vous suggérons d'utiliser deux fichiers batch. La première génère le SCRIPT qui appelle la deuxième fichier de commandes:
Le second, nommé "my_commands.chauve-souris" et situé dans le même répertoire que le premier contient vos commandes à exécuter:
Cela ne cause pas de boucle infinie et supprime également le risque d'erreur de privilège admin vérifier.
Je sais que ce n'est pas une solution pour l'OP, mais depuis que je suis sûr qu'il y a de nombreux autres cas d'utilisation ici, je pensais que je voudrais partager.
J'ai eu des problèmes avec tous les exemples de code dans ces réponses, mais ensuite, j'ai trouvé :
http://www.robotronic.de/runasspcEn.html
Il vous permet non seulement d'exécuter en tant qu'administrateur, il vérifie le fichier pour vérifier qu'il n'a pas été altéré et stocke les informations nécessaires en toute sécurité. Je vais vous avouer que c'est pas le plus évident outil pour comprendre comment l'utiliser, mais pour ceux d'entre nous de l'écriture de code, il devrait être assez simple.
@echo off
ettitle
peut être saisie de ce code:Beaucoup d'autres réponses sont trop si vous n'avez pas besoin de s'inquiéter au sujet de ce qui suit:
cd %~dp0
va changer le répertoire contenant le fichier de commandes)Depuis j'ai des problèmes avec ce script éclater une nouvelle invite de commande avec lui-même exécuter de nouveau dans une boucle infinie (à l'aide de Win 7 Pro), je vous suggère d'essayer une autre approche :Comment puis-je auto-élever mon fichier batch, de sorte qu'il demande de l'UAC des droits d'administrateur, si nécessaire?
Attention, vous devez ajouter cette ligne à la fin du script, comme indiqué dans un edit, de sorte que vous êtes de retour au répertoire du script, une fois les privilèges ont été élevés :
cd /d %~dp0
Basé sur le poteau par toster-cx et autres messages intéressants sur cette page, je me suis aperçu sur la façon de configurer et résoudre mon problème. J'ai eu le même problème lorsque j'ai voulu que l'utilitaire de Nettoyage de Disque s'exécute chaque semaine deux fois le lundi et le jeudi pendant les heures de déjeuner (disons 2 pm). Cependant, cette élévation des droits.
De partage de fichier de lot qui pourrait aider d'autres débutants comme moi -
Merci beaucoup pour ce forum et Rems POST ici [https://www.petri.com/forums/forum/windows-scripting/general-scripting/32313-schtasks-exe-need-to-pass-parameters-to-script%5D%5B1%5D
Son poste aidé pour la configuration de l'argument optionnel lors de la planification de la tâche.
Vous ne pouvez pas demander de droits d'administrateur à partir d'un fichier de commandes, mais vous pourriez écrire un windows scripting host script dans %temp% et le lancer (et qui à son tour s'exécute votre lot en tant qu'admin) que Vous souhaitez appeler le ShellExecute méthode dans le Shell.Objet de l'Application avec "runas" comme le verbe
utiliser la commande runas. Mais, je ne pense pas que vous pouvez envoyer un email à un .fichier bat facilement.
runas
commande ne peut pas être utilisé pour provoquer l'élévation.