Je cherche à écrire un script qui accepte les entrées de l'utilisateur, puis effectue des modifications à l'échelle du système. J'ai besoin que ce soit très générique, mais simplement, en haut, j'en ai besoin pour vérifier s'il est exécuté «en tant qu'administrateur». Si ce n'est pas le cas, je veux afficher un message pour leur dire que; si c'est le cas, je veux que ça continue. Existe-t-il un moyen constant de vérifier cela? Je ne cherche pas à démarrer une nouvelle session en tant qu'administrateur, je veux juste détecter si elle est actuellement exécutée en tant qu'administrateur
windows
command-line
Canadian Luke REINSTATE MONICA
la source
la source
Réponses:
Trouvé sur Stack Overflow :
la source
net session >nul 2>&1 && echo Success || echo Failure
. Je trouve cette syntaxe compacte plus pratique.Cela vérifie le niveau d'intégrité élevé. (fonctionne pour Windows Vista et supérieur)
la source
whoami
manque sur XP.De nombreuses réponses à cette question et à plusieurs autres questions dans SE ( 1 , 2 , 3 pour n'en nommer que quelques-unes), qui sont toutes déficientes de cette manière ou d'une autre, ont clairement montré que Windows ne fournit pas un utilitaire intégré fiable. . Il est donc temps de déployer le vôtre.
Sans autres hacks sales:
Compilez le programme suivant (les instructions suivent) ou obtenez une copie précompilée . Cela ne doit être fait qu'une seule fois, puis vous pouvez copier le
.exe
partout (par exemple aux côtés de la suite Sysinternals ).Le code fonctionne dans Win2k + 1 , avec et sans UAC, domaine, groupes transitifs, peu importe - car il utilise la même manière que le système lui-même lorsqu'il vérifie les autorisations.
chkadmin
imprime "Admin" ou "Non-admin" et définit le code de sortie sur 0 ou 1, respectivement. La sortie peut être supprimée avec le/q
commutateur.chkadmin.c
:Pour compiler, exécutez dans l'invite de commande du SDK Windows:
(si vous utilisez VS2012 +, d' autres ajustements sont nécessaires si vous devez cibler 2k / XP )
La méthode est une gracieuseté de /programming/4230602/detect-if-program-is-running-with-full-administrator-rights/4230908#4230908
1 MSDN prétend que les API sont XP + mais c'est faux.
CheckTokenMembership
est 2k + et l'autre est encore plus ancien .la source
La façon la plus simple de vérifier les privilèges d'administrateur à l'aide d'un script CMD, que j'ai trouvée, est quelque chose comme ceci:
Cette méthode utilise uniquement les extensions CMD.exe, elle devrait donc être très rapide. Il vérifie également les capacités réelles du processus plutôt que de rechercher des SID ou des appartenances à des groupes, afin que l' autorisation effective soit testée. Et cela fonctionne aussi loin que Windows 2003 et XP. Les processus utilisateur normaux ou les processus sans niveau échouent à la sonde d'annuaire, où en tant qu'administrateur ou processus élevés réussissent.
Ce test échoue si le
Everyone
,BUILTIN\Users
ou un autre groupe similaire est donné l' autorisation de lecture à systemprofile. Certes, il s'agit d'une configuration non standard autre que sur les machines configurées en tant que contrôleurs de domaine Windows qui accordent des droits de lecture / exécution 'NT AUTHORITY \ Authenticated Users' à systemprofile.la source
verify
. J'ai tendance à utilisercd .
(point d'espace cd) qui définit le niveau d'erreur à 0, ne produit aucune sortie et est également utile pour créer un fichier de longueur nulle viacd . >somefile
. Cela dit, j'ai testé 'dir' sur Windows 2000, XP, Vista, 2003, 2008, 2012, 7, 8 et 10. Pour tous ces 'dir' effacera le niveau d'erreur à 0 en cas de succès s'il avait été défini avant le 'dir'. Ainsi, je ne sais pas pourquoi william a utilisé «vérifier» pour effacer d'abord le niveau d'erreur.