Script de traitement par lots: Comment vérifier les droits d'administrateur

Comment puis-je vérifier si le script de lot actuel a des droits d'administrateur?

je sais comment le faire s'appeler avec runas mais pas comment vérifier les droits d'administrateur. Les seules solutions que j'ai vu sont des travaux de piratage bruts ou utiliser des programmes externes. En fait, je m'en fous si C'est un travail de piratage tant que ça marche sur Windows XP et plus récent.

234
demandé sur a_horse_with_no_name 2010-10-29 16:35:45

26 réponses

Questions

blak3r / Rushyo 's solution fonctionne très bien pour tout sauf Windows 8. Exécuter AT sur Windows 8 donne:

The AT command has been deprecated. Please use schtasks.exe instead.

The request is not supported.

(voir screenshot #1) et retournera %errorLevel% 1 .

recherche

donc, je suis allé à la recherche d'autres commandes qui exigent élevé autorisation. rationallyparanoid.com avait une liste de quelques-unes, donc j'ai exécuté chaque commande sur les deux extrêmes opposés de Windows OSs actuel (XP et 8) dans l'espoir de trouver une commande qui serait refusé l'accès sur les deux OSs lorsqu'il est exécuté avec des permissions standard.

finalement, j'en ai trouvé un - NET SESSION . Une vrai , solution propre, universelle qui n'implique pas:

  • la création de ou l'interaction avec des données dans des emplacements sécurisés
  • analysant les données retournées de FOR loops
  • recherche de chaînes de caractères pour "administrateur"
  • utilisant AT (Windows 8 incompatible) ou WHOAMI (Windows XP incompatible).

dont chacun a ses propres problèmes de sécurité, d'utilisabilité et de portabilité.

test

j'ai confirmé indépendamment que cela fonctionne sur:

  • Windows XP, x86
  • Windows XP, x64
  • Windows Vista, x86
  • Windows Vista, x64
  • Windows 7, x86
  • Windows 7, x64
  • Windows 8, x86
  • Windows 8, x64

(voir capture d'écran #2)

Mise En Œuvre / Usage

donc, pour utiliser cette solution, il suffit de faire quelque chose comme ceci:

@echo off
goto check_Permissions

:check_Permissions
    echo Administrative permissions required. Detecting permissions...

    net session >nul 2>&1
    if %errorLevel% == 0 (
        echo Success: Administrative permissions confirmed.
    ) else (
        echo Failure: Current permissions inadequate.
    )

    pause >nul

disponible ici, si vous êtes paresseux: https://dl.dropbox.com/u/27573003/Distribution/Binaries/check_Permissions.bat

explication

NET SESSION est une norme commande utilisée pour " Gérer les connexions informatiques du serveur. Utilisé sans paramètres, [il] affiche des informations sur toutes les sessions avec l'ordinateur local."

donc, voici le processus de base de ma mise en œuvre donnée:

  1. @echo off
    • désactiver l'affichage des commandes
  2. goto check_Permissions
    • :check_Permissions bloc de codes
  3. net session >nul 2>&1
    • Exécution de la commande
    • masquer la sortie visuelle de la commande par
      1. rediriger le flux de sortie standard (poignée numérique 1 / STDOUT ) vers nul
      2. rediriger le flux de sortie d'erreur standard (poignée numérique 2 / STDERR ) vers la même destination que la poignée numérique 1
  4. if %errorLevel% == 0 si la valeur du code de sortie ( %errorLevel% ) est 0 alors cela signifie que aucune erreur ne s'est produite et, par conséquent, la commande précédente immédiate a été avec succès
  5. "
  6. else
    • si la valeur de le code de sortie ( %errorLevel% ) n'est pas 0 alors cela signifie que erreurs se sont produites et, par conséquent, la commande précédente immédiate a couru sans succès
  7. le code entre les parenthèses respectives sera exécuté en fonction des critères qui sont remplis

Captures d'écran

Fenêtres 8 AT %errorLevel% :

[imgur]

NET SESSION on Windows XP x86 - Windows 8 x64 :

[imgur]

merci, @Tilka, d'avoir changé votre réponse acceptée à la mienne. :)

392
répondu mythofechelon 2017-05-23 12:10:41

Anders solution a fonctionné pour moi mais je ne savais pas comment l'Inverser pour obtenir le contraire (quand vous n'étiez pas un administrateur).

voici ma solution. Il y a deux cas, un SI et un autre cas, et un peu d'art ascii pour s'assurer que les gens le lisent réellement. :)

Version Minimale

Rushyo posté cette solution ici: Comment détecter si CMD est en cours d'exécution en tant qu'administrateur/a des privilèges élevés?

NET SESSION >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
    ECHO Administrator PRIVILEGES Detected! 
) ELSE (
    ECHO NOT AN ADMIN!
)

Version qui ajoute des messages D'erreur, des Pauses et des sorties

@rem ----[ This code block detects if the script is being running with admin PRIVILEGES If it isn't it pauses and then quits]-------
echo OFF
NET SESSION >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
    ECHO Administrator PRIVILEGES Detected! 
) ELSE (
   echo ######## ########  ########   #######  ########  
   echo ##       ##     ## ##     ## ##     ## ##     ## 
   echo ##       ##     ## ##     ## ##     ## ##     ## 
   echo ######   ########  ########  ##     ## ########  
   echo ##       ##   ##   ##   ##   ##     ## ##   ##   
   echo ##       ##    ##  ##    ##  ##     ## ##    ##  
   echo ######## ##     ## ##     ##  #######  ##     ## 
   echo.
   echo.
   echo ####### ERROR: ADMINISTRATOR PRIVILEGES REQUIRED #########
   echo This script must be run as administrator to work properly!  
   echo If you're seeing this after clicking on a start menu icon, then right click on the shortcut and select "Run As Administrator".
   echo ##########################################################
   echo.
   PAUSE
   EXIT /B 1
)
@echo ON

fonctionne sur WinXP --> Win8 (y compris les versions 32/64 bits).

EDIT: 8/28/2012 mis à Jour pour prendre en charge Windows 8. @BenHooper l'a souligné dans sa réponse ci-dessous. Veuillez upvote sa réponse.

73
répondu blak3r 2017-05-23 12:34:48

autres numéros

comme le souligne @Lectrode, si vous essayez d'exécuter la commande net session alors que le service serveur est arrêté, vous recevez le message d'erreur suivant:

The Server service is not started.

More help is available by typing NET HELPMSG 2114

dans ce cas, la variable %errorLevel% sera définie à 2 .

Note le service Serveur n'est pas démarré en Mode sûr (avec ou sans réseau).

À la recherche d'une alternative

quelque chose qui:

  • peut être sorti de la boîte sur Windows XP et plus tard (32 et 64 bits);
  • ne touche pas à la base de registre ou tout système de fichier/dossier;
  • fonctionne indépendamment du système local;
  • donne des résultats corrects même en Mode de sécurité.

donc j'ai démarré une machine virtuelle Windows XP et je j'ai commencé à faire défiler la liste des applications dans le dossier C:\Windows\System32 , en essayant de trouver quelques idées. Après des essais et des erreurs, c'est l'approche sale (jeu de mots prévu) j'ai inventé:

fsutil dirty query %systemdrive% >nul

la commande fsutil dirty nécessite des droits d'administrateur pour s'exécuter, et échouera autrement. %systemdrive% est une variable d'environnement qui renvoie la lettre d'entraînement où le système d'exploitation est installé. Le la sortie est redirigée vers nul , donc ignorés. La variable %errorlevel% ne sera définie à 0 qu'après exécution réussie.

voici ce que dit la documentation:

Fsutil dirty

interroge ou définit le bit sale d'un volume. Lorsque le bit sale d'un volume est défini, autochk vérifie automatiquement le volume pour les erreurs la prochaine fois que le l'ordinateur est redémarré.

syntaxe

fsutil dirty {query | set} <VolumePath>

paramètres

query           Queries the specified volume's dirty bit.
set             Sets the specified volume's dirty bit.
<VolumePath>    Specifies the drive name followed by a colon or GUID.

Remarques

le bit sale d'un volume indique que le système de fichiers peut être dans un état incohérent. Le morceau sale peut être réglé parce que:

  • le volume est en ligne et il a des changements en suspens.
  • des modifications ont été apportées au volume et l'ordinateur a été éteint avant que les modifications ne soient apportées au disque.
  • Corruption a été détecté sur le volume.

si le bit sale est réglé lors du redémarrage de l'ordinateur, chkdsk s'exécute pour vérifier l'intégrité du système de fichiers et pour tenter de corriger tout problème avec le volume.

Exemples

pour interroger le bit sale sur le lecteur C, tapez:

fsutil dirty query C:

autres recherches

alors que la solution ci-dessus fonctionne à partir de Windows XP, il est intéressant d'ajouter que Windows 2000 et Windows PE (environnement préinstallé) ne viennent pas avec fsutil.exe , nous devons donc recourir à autre chose.

lors de mes tests précédents, j'ai remarqué que l'exécution de la commande sfc sans aucun paramètre aurait pour résultat:

  • une erreur, si vous n'aviez pas assez de privilèges;
  • une liste des paramètres disponibles et de leur utilisation.

C'est-à-dire: pas de paramètres, pas de parti . L'idée est que nous pouvons analyser la sortie et vérifier si nous avons quoi que ce soit mais une erreur:

sfc 2>&1 | find /i "/SCANNOW" >nul

la sortie d'erreur est d'abord redirigée vers la sortie standard, qui est ensuite acheminée à la commande find . À ce stade, nous avons à chercher le paramètre seulement qui est supporté dans toute la version de Windows depuis Windows 2000: /SCANNOW . La recherche est insensible à la casse, et la sortie est rejetée en la redirigeant vers nul .

voici un extrait de la documentation:

Sfc

scanne et vérifie l'intégrité de tous les fichiers système protégés et remplace les versions incorrectes par des versions correctes.

Remarques

vous devez être connecté en tant que membre du groupe des administrateurs pour exécuter sfc.exe .

Exemple D'Utilisation

voici quelques exemples de pâte et course:

Windows XP et versions ultérieures

@echo off

call :isAdmin
if %errorlevel% == 0 (
echo Running with admin rights.
) else (
echo Error: Access denied.
)

pause >nul
exit /b

:isAdmin
fsutil dirty query %systemdrive% >nul
exit /b

Windows 2000 / Windows PE

@echo off

call :isAdmin
if %errorlevel% == 0 (
echo Running with admin rights.
) else (
echo Error: Access denied.
)

pause >nul
exit /b

:isAdmin
sfc 2>&1 | find /i "/SCANNOW" >nul
exit /b

S'applique à

  • Windows 2000
  • Windows XP
  • Windows Vista
  • Windows 7
  • Windows 8
  • Windows 8.1

    ---

  • Windows PE
35
répondu and31415 2014-01-22 23:11:23
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"&&(
 echo admin...
)
17
répondu Anders 2010-10-29 18:51:52

une façon de plus

fltmc >nul 2>&1 && (
  echo has admin permissions
) || (
  echo has NOT admin permissions
)

fltmc commande est disponible sur tous les systèmes windows depuis XP donc cela devrait être assez portable.


une autre solution testée le XP , 8.1 , 7 (malheureusement ne fonctionne pas sur toutes les machines win10 - voir les commentaires.) - il y a une variable spécifique =:: qui est présentée seulement si la session de la console n'a pas d'administrateur privilèges.Comme il n'est pas si facile de créer une variable qui contient = dans son nom, c'est une façon relativement fiable de vérifier la permission de l'administrateur (et assez rapide car il n'appelle pas d'exécutables externes)

setlocal enableDelayedExpansion
set "dv==::"
if defined !dv! ( 
   echo has NOT admin permissions
) else (
   echo has admin permissions
)
16
répondu npocmaka 2017-09-19 16:34:18

solution alternative:

@echo off
pushd %SystemRoot%
openfiles.exe 1>nul 2>&1
if not %errorlevel% equ 0 (
    Echo here you are not administrator!
) else (
    Echo here you are administrator!
)
popd
Pause
13
répondu Lucretius 2014-06-17 18:43:58

non seulement vérifier, mais obtenir les droits d'administrateur automatiquement

alias UAC automatique pour gagner 7/8/8.1 et suiv.
: ce qui suit est vraiment cool avec une fonction de plus: ce batch snippet ne vérifie pas seulement les droits d'administrateur, mais les obtient automatiquement! (et les tests avant, si vivant sur un os capable UAC.)

avec cette astuce, vous n'avez plus besoin de cliquer à droite sur votre fichier batch"avec les droits d'administrateur". Si vous avez oublié, pour le démarrer avec des droits élevés, UAC apparaît automatiquement! De plus, au début, il est testé, si L'OS a besoin/fournit UAC, il se comporte donc correct par exemple pour Win 2000 / XP jusqu'à Win 8.1 - testé.

@echo off
REM Quick test for Windows generation: UAC aware or not ; all OS before NT4 ignored for simplicity
SET NewOSWith_UAC=YES
VER | FINDSTR /IL "5." > NUL
IF %ERRORLEVEL% == 0 SET NewOSWith_UAC=NO
VER | FINDSTR /IL "4." > NUL
IF %ERRORLEVEL% == 0 SET NewOSWith_UAC=NO


REM Test if Admin
CALL NET SESSION >nul 2>&1
IF NOT %ERRORLEVEL% == 0 (

    if /i "%NewOSWith_UAC%"=="YES" (
        rem Start batch again with UAC
        echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
        echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
        "%temp%\getadmin.vbs"
        del "%temp%\getadmin.vbs"
        exit /B
    )

    rem Program will now start again automatically with admin rights! 
    rem pause
    goto :eof
)

l'extrait fusionne quelques bons modèles de lots ensemble, en particulier (1) le test d'administration dans ce thread par Ben Hooper et (2) l'activation UAC lu sur BatchGotAdmin et cité sur le site de lot par robvanderwoude (respect). (3) pour l'identification de L'OS par " VER | Findstr pattern " Je ne trouve pas la référence.)

(concernant des restrictions très mineures, lorsque" NET SESSION " ne fonctionne pas comme mentionné dans une autre réponse - n'hésitez pas à insérer une autre de ces commandes. Pour moi courant dans le mode de sécurité de Windows ou les services standards Spéciaux vers le bas et tels ne sont pas des cas d'utilisation importants - pour certains administrateurs peut-être ils sont.)

11
répondu Philm 2015-07-30 16:21:57

j'ai deux façons de vérifier l'accès privilégié, les deux sont assez fiables, et très portable à travers presque toutes les versions de windows.

1. Méthode 151980920"
set guid=%random%%random%-%random%-%random%-%random%-%random%%random%%random%

mkdir %WINDIR%\%guid%>nul 2>&1
rmdir %WINDIR%\%guid%>nul 2>&1

IF %ERRORLEVEL%==0 (
    ECHO PRIVILEGED!
) ELSE (
    ECHO NOT PRIVILEGED!
)

c'est l'une des méthodes les plus fiables, en raison de sa simplicité, et le comportement de cette commande très primitive est très peu susceptible de changer. Ce n'est pas le cas des autres outils CLI intégrés comme net session qui peuvent être désactivé par les politiques admin/réseau, ou des commandes comme fsutils qui a changé la sortie sur Windows 10.

* Fonctionne sur XP et plus tard

2. Méthode 151980920"
REG ADD HKLM /F>nul 2>&1

IF %ERRORLEVEL%==0 (
    ECHO PRIVILEGED!
) ELSE (
    ECHO NOT PRIVILEGED!
)

parfois, vous n'aimez pas l'idée de toucher le disque de l'utilisateur, même si elle est aussi inoffensive que d'utiliser fsutils ou de créer un dossier vide, est il indémontrable, mais il peut en résulter une l'échec catastrophique si quelque chose va mal. Dans ce scénario, vous pouvez simplement vérifier le registre de privilèges.

pour cela vous pouvez essayer de créer une clé sur HKEY_LOCAL_MACHINE en utilisant les permissions par défaut vous obtiendrez Accès refusé et le ERRORLEVEL == 1 , mais si vous exécutez en tant qu'administrateur, il imprimera " commande exécutée avec succès " et ERRORLEVEL == 0 . Comme la clé existe déjà, elle n'a aucun effet sur registre. C'est probablement la voie la plus rapide, et le REG est là depuis longtemps.

* it's not avalable on NT (Win 9X).

* Fonctionne sur XP et plus tard


exemple pratique

Un script pour effacer le dossier temp

@echo off
:main
    echo.
    echo. Clear Temp Files script
    echo.

    call :requirePrivilegies

    rem Do something that require privilegies

    echo. 
    del %temp%\*.*
    echo. End!

    pause>nul
goto :eof


:requirePrivilegies
    set guid=%random%%random%-%random%-%random%-%random%-%random%%random%%random%
    mkdir %WINDIR%\%guid%>nul 2>&1
    rmdir %WINDIR%\%guid%>nul 2>&1
    IF NOT %ERRORLEVEL%==0 (
        echo ########## ERROR: ADMINISTRATOR PRIVILEGES REQUIRED ###########
        echo # This script must be run as administrator to work properly!  #
        echo # Right click on the script and select "Run As Administrator" #
        echo ###############################################################
        pause>nul
        exit
    )
goto :eof
9
répondu Vitim.us 2017-06-21 02:32:15

essaie de créer un fichier dans le répertoire Windows. S'il réussit, il sera retiré.

copy /b/y NUL %WINDIR%CF2EB6-94E6-4a60-91D8-AB945AE8CF38 >NUL 2>&1
if errorlevel 1 goto:nonadmin
del %WINDIR%CF2EB6-94E6-4a60-91D8-AB945AE8CF38 >NUL 2>&1
:admin
rem here you are administrator
goto:eof
:nonadmin
rem here you are not administrator
goto:eof

notez que 06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 est une directive qui a été générée aujourd'hui et on suppose qu'elle est improbable d'entrer en conflit avec un nom de fichier existant.

5
répondu Benoit 2013-01-14 08:00:37

le moyen le plus propre de vérifier les privilèges admin en utilisant un script CMD, que j'ai trouvé, est quelque chose comme ceci:

@echo off

REM  Calling verify with no args just checks the verify flag,
REM   we use this for its side effect of setting errorlevel to zero
verify >nul

REM  Attempt to read a particular system directory - the DIR
REM   command will fail with a nonzero errorlevel if the directory is
REM   unreadable by the current process.  The DACL on the
REM   c:\windows\system32\config\systemprofile directory, by default,
REM   only permits SYSTEM and Administrators.
dir %windir%\system32\config\systemprofile >nul 2>nul

REM  Use IF ERRORLEVEL or %errorlevel% to check the result
if not errorlevel 1 echo has Admin privs
if     errorlevel 1 echo has only User privs

cette méthode n'utilise que le CMD.exe builtins, donc ça devrait être très rapide. Il vérifie également les capacités réelles du processus plutôt que de vérifier l'appartenance au SMSN ou au groupe, de sorte que la permission effective est testée. Et cela fonctionne aussi loin que Windows 2003 et XP. Processus d'utilisation normale ou non évalué les processus échouent la sonde de répertoire, où que les processus administratifs ou élevés réussir.

5
répondu William 2016-09-07 19:23:24

whoami /groupes qui ne fonctionne pas dans un cas. Si vous avez UAC totalement désactivé (pas seulement la notification désactivée), et vous avez commencé à partir D'une invite D'administrateur puis émis:

runas /trustlevel:0x20000 cmd

vous exécuterez non-élevé, mais émission:

whoami /groups

dira que vous êtes élevé. C'est faux. Voici pourquoi c'est mal:

dans cet état, si IsUserAdmin ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa376389 (v=vs 85).aspx ) retourne FALSE et UAC est totalement désactivé, et Gettokeninformation retourne TokenElevationTypeDefault ( http://blogs.msdn.com/b/cjacks/archive/2006/10/24/modifying-the-mandatory-integrity-level-for-a-securable-object-in-windows-vista.aspx ) alors le processus est pas élevé, mais whoami /groups affirme qu'il est.

vraiment, le la meilleure façon de le faire à partir d'un fichier batch est:

net session >nul 2>nul
net session >nul 2>nul
echo %errorlevel%

vous devez faire net session deux fois parce que si quelqu'un a fait un at avant main, vous obtiendrez la mauvaise information.

3
répondu zumalifeguard 2015-06-18 17:24:31
whoami /groups | find "S-1-16-12288" > nul
if not errorlevel 1 (
  echo ...  connected as admin
)
2
répondu Totonga 2012-01-15 18:56:56

certains serveurs désactivent les services requis par la commande "net session". Il en résulte que la vérification admin indique toujours que vous n'avez pas de droits admin lorsque vous en avez.

2
répondu Dan 2013-03-14 07:37:01

Edit: copyitright a souligné que ce n'est pas fiable. L'approbation de l'accès en lecture avec UAC permettra au dir de réussir. J'ai un peu plus de script pour offrir une autre possibilité, mais ce n'est pas en lecture seule.

reg query "HKLM\SOFTWARE\Foo" >NUL 2>NUL && goto :error_key_exists
reg add "HKLM\SOFTWARE\Foo" /f >NUL 2>NUL || goto :error_not_admin
reg delete "HKLM\SOFTWARE\Foo" /f >NUL 2>NUL || goto :error_failed_delete
goto :success

:error_failed_delete
  echo Error unable to delete test key
  exit /b 3
:error_key_exists
  echo Error test key exists
  exit /b 2
:error_not_admin
  echo Not admin
  exit /b 1
:success
  echo Am admin

ancienne réponse ci-dessous

avertissement: peu fiable


Basé sur un certain nombre d'autres bonnes réponses ici et points soulevés par and31415 j'ai constaté que je suis un fan de ce qui suit:

dir "%SystemRoot%\System32\config\DRIVERS" 2>nul >nul || echo Not Admin

peu de dépendances et rapide.

2
répondu Tyler Szabo 2017-03-17 22:27:42

Note: Vérification avec cacls pour \system32\config\system échouera toujours dans WOW64, (par exemple à partir de %systemroot%\syswow64\cmd.exe / 32 bit Total Commander) de sorte que les scripts qui s'exécutent dans un shell 32bit dans un système 64bit seront en boucle pour toujours... Il serait préférable de vérifier les droits sur le répertoire Prefetch:

>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\Prefetch\"

Win XP à 7 testé, mais il échoue dans WinPE comme dans Windows 7 install.wim il n'y a pas de tels dir ni cacls.exe

également dans winPE et wow64 échoue à vérifier avec openfiles.exe:

OPENFILES > nul

dans Windows 7, Il errorlevel avec "1" avec l'information que "système cible doit être 32bit système d'exploitation"

les deux vérifications échoueront probablement aussi dans la console de récupération.

Ce qui fonctionne dans Windows XP - 8 32/64 bits, dans WOW64 et dans WinPE sont: dir création de tests (SI l'admin n'a pas de tapis bombardé répertoire Windows avec des autorisations pour tout le monde...) et

net session

et

reg add HKLM /F

chèques.

aussi une note de plus dans certaines versions de windows XP (et d'autres probablement aussi, selon le bricolage de l'administrateur) en fonction des entrées de registre appelant directement bat/cmd de .le script vbs échouera avec l'information que les fichiers bat / cmd ne sont pas associés à quoi que ce soit...

echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
cscript "%temp%\getadmin.vbs" //nologo

appel cmd.exe avec le paramètre de chauve-souris/cmd fichier sur les travaux d'autre part OK:

echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "cmd.exe", "/C %~s0", "", "runas", 1 >> "%temp%\getadmin.vbs"
cscript "%temp%\getadmin.vbs" //nologo
1
répondu user2902818 2013-12-02 16:17:08

littéralement des douzaines de réponses dans ce et questions liées et ailleurs à SE, qui sont tous déficients de cette façon ou d'une autre, ont clairement montré que Windows ne fournit pas un utilitaire de console intégré fiable. Donc, il est temps pour le déploiement de votre propre.

le code C suivant, basé sur détecter si le programme est en cours d'exécution avec tous les droits d'administrateur , fonctionne dans Win2k+ 1 , n'importe où et dans tous les cas (UAC, domaines, les groupes transitives...) - parce qu'il fait la même chose que le système lui-même lorsqu'il vérifie les autorisations. Il signale le résultat à la fois avec un message (qui peut être réduit au silence avec un interrupteur) et le code de sortie.

il suffit de compiler une seule fois, alors vous pouvez simplement copier le .exe partout - cela dépend seulement de kernel32.dll et advapi32.dll (j'ai téléchargé une copie ).

chkadmin.c :

#include <malloc.h>
#include <stdio.h>
#include <windows.h>
#pragma comment (lib,"Advapi32.lib")

int main(int argc, char** argv) {
    BOOL quiet = FALSE;
    DWORD cbSid = SECURITY_MAX_SID_SIZE;
    PSID pSid = _alloca(cbSid);
    BOOL isAdmin;

    if (argc > 1) {
        if (!strcmp(argv[1],"/q")) quiet=TRUE;
        else if (!strcmp(argv[1],"/?")) {fprintf(stderr,"Usage: %s [/q]\n",argv[0]);return 0;}
    }

    if (!CreateWellKnownSid(WinBuiltinAdministratorsSid,NULL,pSid,&cbSid)) {
        fprintf(stderr,"CreateWellKnownSid: error %d\n",GetLastError());exit(-1);}

    if (!CheckTokenMembership(NULL,pSid,&isAdmin)) {
        fprintf(stderr,"CheckTokenMembership: error %d\n",GetLastError());exit(-1);}

    if (!quiet) puts(isAdmin ? "Admin" : "Non-admin");
    return !isAdmin;
}

1 MSDN prétend que les API sont XP+, mais c'est faux. CheckTokenMembership est 2k+ et l'autre est encore plus vieux . Le dernier lien contient aussi une façon beaucoup plus compliquée qui fonctionnerait même dans NT.

1
répondu ivan_pozdeev 2017-05-23 12:18:26

PowerShell n'importe qui?

param (
    [string]$Role = "Administrators"
)

#check for local role

$identity  = New-Object Security.Principal.WindowsIdentity($env:UserName)
$principal = New-Object Security.Principal.WindowsPrincipal($identity)

Write-Host "IsInRole('$Role'): " $principal.IsInRole($Role)

#enumerate AD roles and lookup

$groups = $identity::GetCurrent().Groups
foreach ($group in $groups) {
    $trans = $group.Translate([Security.Principal.NTAccount]);
    if ($trans.Value -eq $Role) {
       Write-Host "User is in '$Role' role"
    }
}
1
répondu ostati 2017-01-26 14:40:42

En voici un autre à ajouter à la liste ;-)

(tentative de création d'un fichier dans l'emplacement du système)

CD.>"%SystemRoot%\System32\Drivers\etc\_"
MODE CON COLS=80 LINES=25

IF EXIST "%SystemRoot%\System32\Drivers\etc\_" (

  DEL "%SystemRoot%\System32\Drivers\etc\_"

  ECHO Has Admin privileges

) ELSE (

  ECHO No Admin privileges

)

le MODE CON réinitialise l'écran et surpasse tout texte ou toute erreur lorsqu'il n'a pas la permission d'écrire à l'emplacement du système.

1
répondu script'n'code 2017-04-23 03:29:09

variante: utiliser un utilitaire externe conçu à cette fin, par exemple IsAdmin.exe (gratuiciel illimité).

codes de Sortie:

0 - Utilisateur courant non membre du groupe des administrateurs

1-Membre utilisateur courant des Administrateurs et en cours d'exécution élevé

2-Membre Utilisateur courant des administrateurs, mais ne tournant pas élevé

0
répondu Bill_Stewart 2014-06-17 18:31:56
@echo off
ver
set ADMDIR=C:\Users\Administrator
dir %ADMDIR% 1>nul 2>&1
echo [%errorlevel%] %ADMDIR%
if "%errorlevel%"=="0" goto main
:: further checks e.g. try to list the contents of admin folders
:: wherever they are stored on older versions of Windows
echo You need administrator privileges to run this script: %0
echo Exiting...
exit /b

:main
echo Executing with Administrator privileges...
0
répondu cmd 2014-11-29 22:11:59
@echo off
:start
set randname=%random%%random%%random%%random%%random%
md \windows\%randname% 2>nul
if %errorlevel%==0 (echo You're elevated!!!
goto end)
if %errorlevel%==1 (echo You're not elevated :(:(
goto end)
goto start
:end
rd \windows\%randname% 2>nul
pause >nul

je vais expliquer la ligne de code par ligne:

@echo off

les utilisateurs seront ennuyés avec beaucoup plus que 1 lignes sans cela.

:start

Point de départ du programme.

set randname=%random%%random%%random%%random%%random%

définit le nom du fichier du répertoire à créer.

md \windows\%randname% 2>nul

crée le répertoire sur <DL>:\Windows (remplacer

par lettre de lecteur).

if %errorlevel%==0 (echo You're elevated!!!
goto end)

si la variable D'environnement ERRORLEVEL est zéro, alors echo message de succès.

Aller à la fin (ne pas aller plus loin).

if %errorlevel%==1 (echo You're not elevated :(:(
goto end)

si ERRORLEVEL est un, echo message d'échec et aller à la fin.

goto start

dans le cas où le nom du fichier existe déjà, recréez le dossier (sinon la commande goto end ne laissera pas cette exécution).

:end

spécifier le point de fin

rd \windows\%randname% 2>nul

Supprimer le répertoire créé.

pause >nul

Pause afin que l'utilisateur puisse voir le message.

Note : les >nul et 2>nul filtrent la sortie de ces commandes.

0
répondu EKons 2015-04-22 14:50:06

net user %username% >nul 2>&1 && echo admin || echo not admin

0
répondu heretic 2015-12-09 12:09:22

je pense que la manière la plus simple est d'essayer de changer la date du système (qui nécessite des droits d'administrateur):

date %date%
if errorlevel 1 (
   echo You have NOT admin rights
) else (
   echo You have admin rights
)

si la variable %date% peut inclure le jour de la semaine, il suffit d'obtenir la date de la dernière partie de DATE commande:

for /F "delims=" %%a in ('date ^<NUL') do set "today=%%a" & goto break
:break
for %%a in (%today%) do set "today=%%a"
date %today%
if errorlevel 1 ...
0
répondu Aacini 2016-01-25 17:26:18

j'ai trouvé un utilisateur qui peut utiliser net session même s'il n'est pas administrateur. Je n'ai pas chercher à savoir pourquoi. Ma solution est de tester si l'utilisateur peut créer un dossier dans le dossier windows.

Voici mon code:

::::::: :testadmin function START :::::::
:: this function tests if current user is admin.  results are returned as "true" or "false" in %isadmin%
:: Test "%isadmin" after calling this function
:: Usage: "call :testadmin"
echo Your script entered the :testadmin function by error.  Usage: "call :testadmin"
pause
exit /b
:testadmin

 rd %windir%\local_admin_test > nul 2> nul
 md %windir%\local_admin_test > nul 2> nul
 if [%errorlevel%]==[0] set isadmin=true
 if not [%errorlevel%]==[0] set isadmin=false
 rd %windir%\local_admin_test > nul 2> nul

 if [%isadmin%]==[true] (
   echo User IS admin.
 )
 if not [%isadmin%]==[true] (
   echo User IS NOT admin.
   timeout 30
   :: or use "pause" instead of "timeout"
   exit /b
 )
exit /b
:::::: :testadmin function END ::::::
0
répondu Grallen 2017-08-20 12:56:12

voici ma valeur de 2 pennies:

j'avais besoin d'un lot pour fonctionner dans un environnement de domaine pendant le processus de connexion de l'utilisateur, dans un environnement de "workroom", en voyant les utilisateurs adhérer à une politique de "lock-down" et de vue restreinte (principalement distribué via des ensembles de GPO).

un jeu de GPO de domaine est appliqué avant un script de connexion lié à l'utilisateur AD La création d'un script de connexion GPO était trop pérenne car le "nouveau" profil des utilisateurs n'avait pas été créé/chargé/ou prêt à temps pour appliquer une barre de tâches" supprimer et/ou épingler " et démarrer les éléments de Menu vbscript + ajouter quelques fichiers locaux.

par exemple: l'environnement de profil 'default-user' proposé nécessite un ".URL' (.lnk) raccourci placé dans le "%ProgramData%\Microsoft\Windows\Start Menu\Programs*MyNewOWA.url*", et le "C:\Users\Public\Desktop MyNewOWA.url*" endroits, parmi d'autres éléments

les utilisateurs ont plusieurs machines dans le domaine, où seulement ces ensembles' workroom ' PCs exigent ces politiques.

ces dossiers nécessitent des droits 'Admin' pour les modifier, et bien que 'Domain User' fasse partie du groupe 'Admin' local - UAC était le prochain défi.

a trouvé diverses adaptations et fusionné ici. J'ai quelques utilisateurs avec des périphériques BYOD ainsi que qui ont exigé d'autres fichiers avec des problèmes de perm. N'ont pas testé sur XP (un peu trop vieux un OS), mais le code est présent, serait avec plaisir feed back.

    :: ------------------------------------------------------------------------
    :: You have a royalty-free right to use, modify, reproduce and distribute
    :: the Sample Application Files (and/or any modified version) in any way
    :: you find useful, provided that you agree that the author provides
    :: no warranty, obligations or liability for any Sample Application Files.
    :: ------------------------------------------------------------------------

    :: ********************************************************************************
    ::* Sample batch script to demonstrate the usage of RunAs.cmd
    ::*
    ::* File:           RunAs.cmd
    ::* Date:           12/10/2013
    ::* Version:        1.0.2
    ::*
    ::* Main Function:  Verifies status of 'bespoke' Scripts ability to 'Run As - Admin'
    ::*                 elevated privileges and without UAC prompt
    ::*
    ::* Usage:          Run RunAs.cmd from desired location
    ::*         Bespoke.cmd will be created and called from C:\Utilities location
    ::*         Choose whether to delete the script after its run by removing out-comment
    ::*                 (::) before the 'Del /q Bespoke.cmd' command
    ::*
    ::* Distributed under a "GNU GPL" type basis.
    ::*
    ::* Revisions:
    ::* 1.0.0 - 08/10/2013 - Created.
    ::* 1.0.1 - 09/10/2013 - Include new path creation.
    ::* 1.0.2 - 12/10/2013 - Modify/shorten UAC disable process for Admins
    ::*
    ::* REFERENCES:
    ::* Sample "*.inf" secpol.msc export from Wins 8 x64 @ bottom, 
    ::* Would be default but for 'no password complexities'
    ::*
    ::* To recreate UAC default: 
    ::* Goto:Secpol, edit out Exit, modify .inf set, export as "Wins8x64.inf" 
    ::* and import using secedit cmd provided
    ::*
    :: ********************************************************************************

    @echo off & cls
    color 9F
    Title RUN AS
    Setlocal
    :: Verify local folder availability for script
    IF NOT EXIST C:\Utilities (
        mkdir C:\Utilities & GOTO:GenBatch
    ) ELSE (
        Goto:GenBatch
    )
    :GenBatch
    c:
    cd\
    cd C:\Utilities
    IF NOT EXIST C:\Utilities\Bespoke.cmd (
        GOTO:CreateBatch
    ) ELSE (
        Goto:RunBatch
    )
    :CreateBatch
    Echo. >Bespoke.cmd
    Echo :: ------------------------------------------------------------------------ >>Bespoke.cmd
    Echo :: You have a royalty-free right to use, modify, reproduce and distribute >>Bespoke.cmd
    Echo :: the Sample Application Files (and/or any modified version) in any way >>Bespoke.cmd
    Echo :: you find useful, provided that you agree that the author provides >>Bespoke.cmd
    Echo :: has no warranty, obligations or liability for any Sample Application Files. >>Bespoke.cmd
    Echo :: ------------------------------------------------------------------------ >>Bespoke.cmd
    Echo. >>Bespoke.cmd
    Echo :: ******************************************************************************** >>Bespoke.cmd
    Echo ::* Sample batch script to demonstrate the usage of Bespoke.cmd >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* File:           Bespoke.cmd >>Bespoke.cmd
    Echo ::* Date:           10/10/2013 >>Bespoke.cmd
    Echo ::* Version:        1.0.1 >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Main Function:  Allows for running of Bespoke batch with elevated rights and no future UAC 'pop-up' >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Usage:          Called and created by RunAs.cmd run from desired location >>Bespoke.cmd
    Echo ::*                 Found in the C:\Utilities folder >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Distributed under a "GNU GPL" type basis. >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Revisions: >>Bespoke.cmd
    Echo ::* 1.0.0 - 09/10/2013 - Created. >>Bespoke.cmd
    Echo ::* 1.0.1 - 10/10/2013 - Modified, added ability to temp disable UAC pop-up warning. >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* REFERENCES: >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Exit code (%%^ErrorLevel%%) 0 - No errors have occurred, i.e. immediate previous command ran successfully >>Bespoke.cmd
    Echo ::* Exit code (%%^ErrorLevel%%) 1 - Errors occurred, i.e. immediate previous command ran Unsuccessfully >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* MS OS version check >>Bespoke.cmd
    Echo ::* http://msdn.microsoft.com/en-us/library/windows/desktop/ms724833%28v=vs.85%29.aspx >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Copying to certain folders and running certain apps require elevated perms >>Bespoke.cmd
    Echo ::* Even with 'Run As ...' perms, UAC still pops up. >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* To run a script or application in the Windows Shell >>Bespoke.cmd
    Echo ::* http://ss64.com/vb/shellexecute.html >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Machines joined to a corporate Domain should have the UAC feature set from, and >>Bespoke.cmd
    Echo ::* pushed out from a DC GPO policy >>Bespoke.cmd
    Echo ::* e.g.: 'Computer Configuration - Policies - Windows Settings - Security Settings -  >>Bespoke.cmd
    Echo ::* Local Policies/Security Options - User Account Control -  >>Bespoke.cmd
    Echo ::* Policy: User Account Control: Behavior of the elevation prompt for administrators >>Bespoke.cmd
    Echo ::*         in Admin Approval Mode  Setting: Elevate without prompting >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo :: ******************************************************************************** >>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo @Echo off ^& cls>>Bespoke.cmd
    Echo color 9F>>Bespoke.cmd
    Echo Title RUN AS ADMIN>>Bespoke.cmd
    Echo Setlocal>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo Set "_OSVer=">>Bespoke.cmd
    Echo Set "_OSVer=UAC">>Bespoke.cmd
    Echo VER ^| FINDSTR /IL "5." ^>NUL>>Bespoke.cmd
    Echo IF %%^ErrorLevel%%==0 SET "_OSVer=PreUAC">>Bespoke.cmd
    Echo IF %%^_OSVer%%==PreUAC Goto:XPAdmin>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo :: Check if machine part of a Domain or within a Workgroup environment >>Bespoke.cmd
    Echo Set "_DomainStat=">>Bespoke.cmd
    Echo Set "_DomainStat=%%USERDOMAIN%%">>Bespoke.cmd
    Echo If /i %%^_DomainStat%% EQU %%^computername%% (>>Bespoke.cmd
    Echo Goto:WorkgroupMember>>Bespoke.cmd
    Echo ) ELSE (>>Bespoke.cmd
    Echo Set "_DomainStat=DomMember" ^& Goto:DomainMember>>Bespoke.cmd
    Echo )>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo :WorkgroupMember>>Bespoke.cmd
    Echo :: Verify status of Secpol.msc 'ConsentPromptBehaviorAdmin' Reg key >>Bespoke.cmd
    Echo reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin ^| Find /i "0x0">>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo If %%^ErrorLevel%%==0 (>>Bespoke.cmd
    Echo    Goto:BespokeBuild>>Bespoke.cmd
    Echo ) Else (>>Bespoke.cmd
    Echo    Goto:DisUAC>>Bespoke.cmd
    Echo )>>Bespoke.cmd
    Echo :DisUAC>>Bespoke.cmd
    Echo :XPAdmin>>Bespoke.cmd
    Echo :DomainMember>>Bespoke.cmd
    Echo :: Get ADMIN Privileges, Start batch again, modify UAC ConsentPromptBehaviorAdmin reg if needed >>Bespoke.cmd
    Echo ^>nul ^2^>^&1 ^"^%%^SYSTEMROOT%%\system32\cacls.exe^"^ ^"^%%^SYSTEMROOT%%\system32\config\system^">>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo IF ^'^%%^Errorlevel%%^'^ NEQ '0' (>>Bespoke.cmd
    Echo    echo Set objShell = CreateObject^^("Shell.Application"^^) ^> ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
    Echo    echo objShell.ShellExecute ^"^%%~s0^"^, "", "", "runas", 1 ^>^> ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
    Echo    ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
    Echo    del ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
    Echo    exit /B>>Bespoke.cmd
    Echo ) else (>>Bespoke.cmd
    Echo    pushd ^"^%%^cd%%^">>Bespoke.cmd
    Echo    cd /d ^"^%%~dp0^">>Bespoke.cmd
    Echo    @echo off>>Bespoke.cmd
    Echo )>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo IF %%^_OSVer%%==PreUAC Goto:BespokeBuild>>Bespoke.cmd
    Echo IF %%^_DomainStat%%==DomMember Goto:BespokeBuild>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 0 /f>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo :BespokeBuild>>Bespoke.cmd
    Echo :: Add your script requiring elevated perm and no UAC below: >>Bespoke.cmd
    Echo.>>Bespoke.cmd

    :: PROVIDE BRIEF EXPLINATION AS TO WHAT YOUR SCRIPT WILL ACHIEVE
    Echo ::

    :: ADD THE "PAUSE" BELOW ONLY IF YOU SET TO SEE RESULTS FROM YOUR SCRIPT
    Echo Pause>>Bespoke.cmd

    Echo Goto:EOF>>Bespoke.cmd
    Echo :EOF>>Bespoke.cmd
    Echo Exit>>Bespoke.cmd

    Timeout /T 1 /NOBREAK >Nul
    :RunBatch
    call "Bespoke.cmd"
    :: Del /F /Q "Bespoke.cmd"

    :Secpol
    :: Edit out the 'Exit (rem or ::) to run & import default wins 8 security policy provided below
    Exit

    :: Check if machine part of a Domain or within a Workgroup environment
    Set "_DomainStat="
    Set _DomainStat=%USERDOMAIN%
    If /i %_DomainStat% EQU %computername% (
        Goto:WorkgroupPC
    ) ELSE (
        Echo PC Member of a Domain, Security Policy determined by GPO
        Pause
        Goto:EOF
    )

    :WorkgroupPC

    reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin | Find /i "0x5"
    Echo.
    If %ErrorLevel%==0 (
        Echo Machine already set for UAC 'Prompt'
        Pause
        Goto:EOF
    ) else (
        Goto:EnableUAC
    )
    :EnableUAC
    IF NOT EXIST C:\Utilities\Wins8x64Def.inf (
        GOTO:CreateInf
    ) ELSE (
        Goto:RunInf
    )
    :CreateInf
    :: This will create the default '*.inf' file and import it into the 
    :: local security policy for the Wins 8 machine
    Echo [Unicode]>>Wins8x64Def.inf
    Echo Unicode=yes>>Wins8x64Def.inf
    Echo [System Access]>>Wins8x64Def.inf
    Echo MinimumPasswordAge = ^0>>Wins8x64Def.inf
    Echo MaximumPasswordAge = ^-1>>Wins8x64Def.inf
    Echo MinimumPasswordLength = ^0>>Wins8x64Def.inf
    Echo PasswordComplexity = ^0>>Wins8x64Def.inf
    Echo PasswordHistorySize = ^0>>Wins8x64Def.inf
    Echo LockoutBadCount = ^0>>Wins8x64Def.inf
    Echo RequireLogonToChangePassword = ^0>>Wins8x64Def.inf
    Echo ForceLogoffWhenHourExpire = ^0>>Wins8x64Def.inf
    Echo NewAdministratorName = ^"^Administrator^">>Wins8x64Def.inf
    Echo NewGuestName = ^"^Guest^">>Wins8x64Def.inf
    Echo ClearTextPassword = ^0>>Wins8x64Def.inf
    Echo LSAAnonymousNameLookup = ^0>>Wins8x64Def.inf
    Echo EnableAdminAccount = ^0>>Wins8x64Def.inf
    Echo EnableGuestAccount = ^0>>Wins8x64Def.inf
    Echo [Event Audit]>>Wins8x64Def.inf
    Echo AuditSystemEvents = ^0>>Wins8x64Def.inf
    Echo AuditLogonEvents = ^0>>Wins8x64Def.inf
    Echo AuditObjectAccess = ^0>>Wins8x64Def.inf
    Echo AuditPrivilegeUse = ^0>>Wins8x64Def.inf
    Echo AuditPolicyChange = ^0>>Wins8x64Def.inf
    Echo AuditAccountManage = ^0>>Wins8x64Def.inf
    Echo AuditProcessTracking = ^0>>Wins8x64Def.inf
    Echo AuditDSAccess = ^0>>Wins8x64Def.inf
    Echo AuditAccountLogon = ^0>>Wins8x64Def.inf
    Echo [Registry Values]>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole\SecurityLevel=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole\SetCommand=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\CachedLogonsCount=1,"10">>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ForceUnlockLogon=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\PasswordExpiryWarning=4,5>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ScRemoveOption=1,"0">>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorAdmin=4,5>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorUser=4,3>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableCAD=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\DontDisplayLastUserName=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableInstallerDetection=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableSecureUIAPaths=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableUIADesktopToggle=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableVirtualization=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\FilterAdministratorToken=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\LegalNoticeCaption=1,"">>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\LegalNoticeText=7,>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\PromptOnSecureDesktop=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ScForceOption=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ShutdownWithoutLogon=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\UndockWithoutLogon=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ValidateAdminCodeSignatures=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers\AuthenticodeEnabled=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\AuditBaseObjects=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\CrashOnAuditFail=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\DisableDomainCreds=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\EveryoneIncludesAnonymous=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\ForceGuest=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\FullPrivilegeAuditing=3,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\LimitBlankPasswordUse=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\MSV1_0\NTLMMinClientSec=4,536870912>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\MSV1_0\NTLMMinServerSec=4,536870912>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\NoLMHash=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymous=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymousSAM=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers\AddPrinterDrivers=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\SecurePipeServers\Winreg\AllowedExactPaths\Machine=7,System\CurrentControlSet\Control\ProductOptions,System\CurrentControlSet\Control\Server Applications,Software\Microsoft\Windows NT\CurrentVersion>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\SecurePipeServers\Winreg\AllowedPaths\Machine=7,System\CurrentControlSet\Control\Print\Printers,System\CurrentControlSet\Services\Eventlog,Software\Microsoft\OLAP Server,Software\Microsoft\Windows NT\CurrentVersion\Print,Software\Microsoft\Windows NT\CurrentVersion\Windows,System\CurrentControlSet\Control\ContentIndex,System\CurrentControlSet\Control\Terminal Server,System\CurrentControlSet\Control\Terminal Server\UserConfig,System\CurrentControlSet\Control\Terminal Server\DefaultUserConfiguration,Software\Microsoft\Windows NT\CurrentVersion\Perflib,System\CurrentControlSet\Services\SysmonLog>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Session Manager\Kernel\ObCaseInsensitive=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management\ClearPageFileAtShutdown=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Session Manager\ProtectionMode=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\optional=7,Posix>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\AutoDisconnect=4,15>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\EnableForcedLogOff=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\EnableSecuritySignature=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\NullSessionPipes=7,>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\RequireSecuritySignature=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\RestrictNullSessAccess=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\EnablePlainTextPassword=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\EnableSecuritySignature=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\RequireSecuritySignature=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LDAP\LDAPClientIntegrity=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\MaximumPasswordAge=4,30>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\RequireSignOrSeal=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\RequireStrongKey=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\SealSecureChannel=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\SignSecureChannel=4,1>>Wins8x64Def.inf
    Echo [Privilege Rights]>>Wins8x64Def.inf
    Echo SeNetworkLogonRight = *S-1-1-0,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeBackupPrivilege = *S-1-5-32-544,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeChangeNotifyPrivilege = *S-1-1-0,*S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551,*S-1-5-90-^0>>Wins8x64Def.inf
    Echo SeSystemtimePrivilege = *S-1-5-19,*S-1-5-32-544>>Wins8x64Def.inf
    Echo SeCreatePagefilePrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeDebugPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeRemoteShutdownPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeAuditPrivilege = *S-1-5-19,*S-1-5-20>>Wins8x64Def.inf
    Echo SeIncreaseQuotaPrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544>>Wins8x64Def.inf
    Echo SeIncreaseBasePriorityPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeLoadDriverPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeBatchLogonRight = *S-1-5-32-544,*S-1-5-32-551,*S-1-5-32-559>>Wins8x64Def.inf
    Echo SeServiceLogonRight = *S-1-5-80-0,*S-1-5-83-^0>>Wins8x64Def.inf
    Echo SeInteractiveLogonRight = Guest,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeSecurityPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeSystemEnvironmentPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeProfileSingleProcessPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeSystemProfilePrivilege = *S-1-5-32-544,*S-1-5-80-3139157870-2983391045-3678747466-658725712-1809340420>>Wins8x64Def.inf
    Echo SeAssignPrimaryTokenPrivilege = *S-1-5-19,*S-1-5-20>>Wins8x64Def.inf
    Echo SeRestorePrivilege = *S-1-5-32-544,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeShutdownPrivilege = *S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeTakeOwnershipPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeDenyNetworkLogonRight = Guest>>Wins8x64Def.inf
    Echo SeDenyInteractiveLogonRight = Guest>>Wins8x64Def.inf
    Echo SeUndockPrivilege = *S-1-5-32-544,*S-1-5-32-545>>Wins8x64Def.inf
    Echo SeManageVolumePrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeRemoteInteractiveLogonRight = *S-1-5-32-544,*S-1-5-32-555>>Wins8x64Def.inf
    Echo SeImpersonatePrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-6>>Wins8x64Def.inf
    Echo SeCreateGlobalPrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-6>>Wins8x64Def.inf
    Echo SeIncreaseWorkingSetPrivilege = *S-1-5-32-545,*S-1-5-90-^0>>Wins8x64Def.inf
    Echo SeTimeZonePrivilege = *S-1-5-19,*S-1-5-32-544,*S-1-5-32-545>>Wins8x64Def.inf
    Echo SeCreateSymbolicLinkPrivilege = *S-1-5-32-544,*S-1-5-83-^0>>Wins8x64Def.inf
    Echo [Version]>>Wins8x64Def.inf
    Echo signature="$CHICAGO$">>Wins8x64Def.inf
    Echo Revision=1>>Wins8x64Def.inf

    :RunInf
    :: Import 'Wins8x64Def.inf' with ADMIN Privileges, to modify UAC ConsentPromptBehaviorAdmin reg
    >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%%\system32\config\system"
    IF '%Errorlevel%' NEQ '0' (
        echo Set objShell = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
        echo objShell.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
       "%temp%%\getadmin.vbs"
        del "%temp%\getadmin.vbs"
        exit /B
        Secedit /configure /db secedit.sdb /cfg C:\Utilities\Wins8x64Def.inf /overwrite
        Goto:CheckUAC
    ) else (
        Secedit /configure /db secedit.sdb /cfg C:\Utilities\Wins8x64Def.inf /overwrite
        @echo off
    )
    :CheckUAC
    reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin | Find /i "0x5"
    Echo.
    If %ErrorLevel%==0 (
        Echo ConsentPromptBehaviorAdmin set to 'Prompt'
        Pause
        Del /Q C:\Utilities\Wins8x64Def.inf
        Goto:EOF
    ) else (
        Echo ConsentPromptBehaviorAdmin NOT set to default
        Pause
    )
    ENDLOCAL
    :EOF
    Exit
Domaine

Les PC devraient être gouvernés autant que possible par des jeux de GPO. Les machines de groupe de travail/autonomes peuvent être régies par ce script.

rappelez-vous, une invite UAC apparaîtra au moins une fois avec un groupe de travail BYOD PC (dès que la première élévation à 'perms Admin' est requise), mais comme la Politique de sécurité locale est modifiée pour l'usage admin à partir de ce point, les pop-ups disparaîtront.

un PC de domaine devrait avoir la Politique GPO "ConsentPromptBehaviorAdmin" définie dans votre politique de verrouillage "déjà" créée - comme expliqué dans la section 'références' du script.

encore une fois, lancez le secedit.exe importation de la valeur par défaut".inf ' file si vous êtes bloqué sur le débat "to UAC or Not to UAC": -).

btw: @Boileau Vérifiez votre échec sur le:

>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

en exécutant seulement" %SYSTEMROOT%\system32\cacls.exe" ou "%SYSTEMROOT%\system32\config\system", ou les deux, à partir de l'invite de commande élevée ou Non, vérifiez le résultat à tous les niveaux.

-1
répondu Ian Stockdale 2013-10-13 17:27:29

une Autre façon de le faire.

REM    # # # #      CHECKING OR IS STARTED AS ADMINISTRATOR     # # # # #

FSUTIL | findstr /I "volume" > nul&if not errorlevel 1  goto Administrator_OK

cls
echo *******************************************************
echo ***    R U N    A S    A D M I N I S T R A T O R    ***
echo *******************************************************
echo.
echo.
echo Call up just as the Administrator. Abbreviation can be done to the script and set:
echo.
echo      Shortcut ^> Advanced ^> Run as Administrator
echo.
echo.
echo Alternatively, a single run "Run as Administrator"
echo or in the Schedule tasks with highest privileges
pause > nul
goto:eof
:Administrator_OK

REM Some next lines code ...
-2
répondu Artur Zgadzaj 2015-04-07 23:10:04