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.
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) ouWHOAMI
(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:
-
@echo off
- désactiver l'affichage des commandes
-
goto check_Permissions
-
:check_Permissions
bloc de codes
-
-
net session >nul 2>&1
- Exécution de la commande
- masquer la sortie visuelle de la commande par
- rediriger le flux de sortie standard (poignée numérique 1 /
STDOUT
) versnul
- 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
- rediriger le flux de sortie standard (poignée numérique 1 /
-
if %errorLevel% == 0
si la valeur du code de sortie (%errorLevel%
) est0
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 "
-
else
- si la valeur de le code de sortie (
%errorLevel%
) n'est pas0
alors cela signifie que erreurs se sont produites et, par conséquent, la commande précédente immédiate a couru sans succès
- si la valeur de le code de sortie (
- le code entre les parenthèses respectives sera exécuté en fonction des critères qui sont remplis
Captures d'écran
NET SESSION
on Windows XP x86 - Windows 8 x64 :
merci, @Tilka, d'avoir changé votre réponse acceptée à la mienne. :)
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.
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
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"&&(
echo admin...
)
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
)
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
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.)
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.
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).
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
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.
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.
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.
whoami /groups | find "S-1-16-12288" > nul
if not errorlevel 1 (
echo ... connected as admin
)
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.
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.
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
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.
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"
}
}
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.
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é
@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...
@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.
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 ...
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 ::::::
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.
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 ...