À partir d'un fichier de commandes, je voudrais tester si j'exécute avec des privilèges d'administrateur / élevés.
Le nom d'utilisateur ne change pas lorsque "Exécuter en tant qu'administrateur" est sélectionné, donc cela ne fonctionne pas.
S'il y avait une commande universellement disponible, qui n'a aucun effet, mais nécessite des privilèges administratifs, alors je pourrais l'exécuter et vérifier un code d'erreur afin de tester les privilèges. Jusqu'à présent, je n'ai pas trouvé une telle commande. Les commandes que j'ai trouvées semblent renvoyer un code d'erreur unique et non spécifique, qui pourrait indiquer n'importe quoi, et elles sont sujettes à l'échec pour diverses raisons.
Je ne me soucie que de Windows 7, même si la prise en charge des systèmes d'exploitation antérieurs serait bien.
la source
echo > somefile
dans un répertoire qui nécessiterait des privilèges d'administrateur. cela produirait un fichier comme effet secondaire, mais vous pourriez vérifier les collisions et créer un nom de fichier unique comme solution de contournement.Réponses:
ADDENDA : pour Windows 8, cela ne fonctionnera pas; voyez plutôt cette excellente réponse .
J'ai trouvé cette solution ici: http://www.robvanderwoude.com/clevertricks.php
En supposant que cela ne fonctionne pas et puisque nous parlons de Win7, vous pouvez utiliser ce qui suit dans Powershell si cela vous convient:
Si ce n'est pas le cas (et probablement pas, puisque vous avez explicitement proposé des fichiers de commandes), vous pouvez écrire ce qui précède dans .NET et renvoyer un code de sortie à partir d'un exe basé sur le résultat pour votre fichier de commandes à utiliser.
la source
AT
ne fonctionne pas sous Windows 8, mais j'ai trouvé une meilleure solution. Je l'ai posté comme réponse à une autre question, ici: stackoverflow.com/questions/4051883/… .ping
remplacer manquantsleep
:)Cette astuce ne nécessite qu'une seule commande: tapez
net session
dans l'invite de commande.Si vous n'êtes PAS un administrateur , vous obtenez un message d'accès refusé.
Si vous êtes un administrateur , vous recevez un message différent, le plus courant étant:
De MS Technet :
la source
There are no entries in the list.
net session >nul 2>&1 || (echo not admin&goto :eof)
J'aime la suggestion de Rushyo d'utiliser AT, mais c'est une autre option:
Cette approche vous permettrait également de faire la distinction entre un administrateur non-administrateur et un administrateur non élevé si vous le souhaitez. Les administrateurs non élevés ont toujours BUILTIN \ Administrators dans la liste des groupes, mais ce n'est pas activé.
Cependant, cela ne fonctionnera pas sur certains systèmes de langue autre que l'anglais. Essayez plutôt
(Cela devrait fonctionner sur Windows 7 mais je ne suis pas sûr des versions antérieures.)
la source
whoami/groups
scanner les lignes manuellement. Cela ne prendrait pas trop de temps et la commande s'inscrit dans votre cerveau.À peu près ce que d'autres ont mis avant, mais comme une seule ligne qui peut être placée au début d'une commande batch. (Eh bien, généralement après @echo off.)
la source
Le moyen le plus simple de le faire sur Vista, Win 7 et les versions ultérieures consiste à énumérer les groupes de jetons et à rechercher le niveau d'intégrité actuel (ou le sid des administrateurs, si seule l'appartenance au groupe est importante):
Vérifiez si nous courons en hauteur:
Vérifiez si nous appartenons aux administrateurs locaux:
Vérifiez si nous appartenons aux administrateurs de domaine:
L'article suivant répertorie les SID de niveau d'intégrité que Windows utilise: http://msdn.microsoft.com/en-us/library/bb625963.aspx
la source
Voici une légère modification de la réponse de Harry qui se concentre sur un statut élevé; J'utilise ceci au début d'un fichier install.bat:
Cela a vraiment fonctionné pour moi et le principe semble être solide; de Chris Jackson de MSFT :
la source
la solution:
ne fonctionne pas sous Windows 10
pour toutes les versions de Windows peuvent être le faire:
la source
J'ai lu la plupart (la plupart?) Des réponses, puis j'ai développé un fichier chauve-souris qui fonctionne pour moi dans Win 8.1. Je pensais que je le partagerais.
J'espère que quelqu'un trouvera cela utile :)
la source
Une version "pas une ligne" de https://stackoverflow.com/a/38856823/2193477
la source
Je sais que je suis vraiment en retard à cette fête, mais voici ma seule doublure pour déterminer l'administration.
Il ne repose pas sur le niveau d'erreur, mais uniquement sur
systeminfo
:Il renvoie oui ou non, selon le statut administrateur de l'utilisateur ...
Il définit également la valeur de la variable «admin» sur oui ou non en conséquence.
la source
Si vous exécutez en tant qu'utilisateur avec des droits d'administrateur, la variable d'environnement SessionName ne sera PAS définie et vous ne disposez toujours pas des droits d'administrateur lors de l'exécution d'un fichier de commandes.
Vous devez utiliser la commande "net session" et rechercher un code de retour d'erreur de "0" pour vérifier les droits d'administrateur.
Exemple; - la première déclaration d'écho est le caractère de cloche
net session >nul 2>&1 if not %errorlevel%==0 (echo echo You need to start over and right-click on this file, echo then select "Run as administrator" to be successfull. echo.&pause&exit)
la source
Voici une méthode simple que j'ai utilisée sur Windows 7 à Windows 10. En gros, j'utilise simplement la commande "IF EXIST" pour vérifier le dossier Windows \ System32 \ WDI \ LogFiles. Le dossier WDI existe sur chaque installation de Windows à partir d'au moins 7 et il nécessite des privilèges d'administrateur pour y accéder. Le dossier WDI contient toujours un dossier LogFiles. Ainsi, l'exécution de "IF EXIST" sur le dossier WDI \ LogFiles renverra true si elle est exécutée en tant qu'administrateur et false si elle n'est pas exécutée en tant qu'administrateur. Cela peut être utilisé dans un fichier de commandes pour vérifier le niveau de privilège et passer aux commandes de votre choix en fonction de ce résultat.
Voici un bref extrait de code d'exemple:
Gardez à l'esprit que cette méthode suppose que les autorisations de sécurité par défaut n'ont pas été modifiées sur le dossier WDI (ce qui est peu probable dans la plupart des situations, mais veuillez consulter la mise en garde n ° 2 ci-dessous). Même dans ce cas, il s'agit simplement de modifier le code pour rechercher un fichier / dossier commun différent qui nécessite un accès administrateur (System32 \ config \ SAM peut être un bon candidat alternatif), ou vous pouvez même créer le vôtre spécifiquement pour cela objectif.
Il y a cependant deux mises en garde concernant cette méthode:
La désactivation de l'UAC le brisera probablement par le simple fait que tout serait exécuté en tant qu'administrateur de toute façon.
Tenter d'ouvrir le dossier WDI dans l'Explorateur Windows, puis cliquer sur "Continuer" lorsque vous y êtes invité ajoutera des droits d'accès permanents pour ce compte d'utilisateur, cassant ainsi ma méthode. Si cela se produit, il peut être résolu en supprimant le compte d'utilisateur des autorisations de sécurité du dossier WDI. Si, pour une raison quelconque, l'utilisateur DOIT être en mesure d'accéder au dossier WDI avec l'Explorateur Windows, vous devrez alors modifier le code pour vérifier un dossier différent (comme mentionné ci-dessus, créer le vôtre spécifiquement à cette fin peut être un bon choix) .
Donc, certes, ma méthode n'est pas parfaite car elle peut être cassée, mais c'est une méthode relativement rapide, facile à mettre en œuvre, est également compatible avec toutes les versions de Windows 7, 8 et 10, et à condition que je reste conscient des mises en garde mentionnées. été efficace à 100% pour moi.
la source
Fonctionne pour Win7 Enterprise et Win10 Enterprise
la source