배치 스크립트: 관리자 권한 확인 방법
현재 배치 스크립트에 관리자 권한이 있는지 확인하려면 어떻게 해야 합니까?
관리자 권한을 확인하는 방법이 아니라 runas로 스스로를 호출하는 방법을 알고 있습니다.제가 본 유일한 해결책은 조잡한 해킹 작업이나 외부 프로그램을 사용하는 것입니다.음, 사실 나는 그것이 Windows XP 이상에서 작동하는 한 해킹 작업이든 상관하지 않습니다.
문제들
blak3r / Rushyo의 솔루션은 Windows 8을 제외한 모든 것에 잘 작동합니다.입니다.AT
윈도우즈 8에서 다음 결과가 발생합니다.
The AT command has been deprecated. Please use schtasks.exe instead.
The request is not supported.
참조) 됩니다.%errorLevel%
1
.
조사.
그래서 저는 높은 권한이 필요한 다른 명령어들을 찾아보았습니다. rationallyparanoid.com 에는 몇 개의 목록이 있었기 때문에 표준 권한으로 실행할 때 두 OS 모두에서 액세스가 거부되는 명령어를 찾기 위해 현재 Windows OS(XP 및 8)의 두 가지 반대 방향에서 각 명령어를 실행했습니다.
저는 하나를 - 결국하, 저는를발습니다견했나▁-다니.NET SESSION
다음을 포함하지 않는 진정하고 깨끗하고 보편적인 솔루션:
- 안전한 위치에서 데이터 생성 또는 상호 작용
- 에서 된 데이터
FOR
- "관리자" 문자열 검색
- 용사를
AT
8 호환 안 됨) 또는 (윈도우즈 8 호환 안 됨) 또WHOAMI
(Windows XP).
각각의 보안, 사용성 및 휴대성 문제가 있습니다.
테스트
저는 이것이 다음과 같은 경우에 효과가 있다는 것을 독립적으로 확인했습니다.
- Windows XP, x86
- Windows XP, x64
- Windows Vista, x86
- Windows Vista, x64
- 윈도우 7, x86
- Windows 7, x64
- 윈도우 8, x86
- 윈도우 8, x64
- Windows 10 v1909, x64
(스크린샷 #2 참조)
구현/사용
따라서 이 솔루션을 사용하려면 다음과 같은 작업을 수행합니다.
@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
설명.
NET SESSION
서버 컴퓨터 연결을 관리하는 데 사용되는 표준 명령입니다. 매개 변수 없이 사용하면 [] 로컬 컴퓨터와의 모든 세션에 대한 정보가 표시됩니다."
다음은 주어진 구현의 기본 프로세스입니다.
@echo off
- 명령 표시 사용 안 함
goto check_Permissions
- 다로이동으로 합니다.
:check_Permissions
블록
- 다로이동으로 합니다.
net session >nul 2>&1
- 실행 명령
- 명령의 시각적 출력 숨기기
- 1 / 표출숫재결연력핸들자준숫▁/(▁1결연핸▁redirect▁(▁/ing 1 /
STDOUT
) 로 스트리밍합니다.nul
- 스트림 2 / 표준오숫재연결림트핸스들력출류자▁/숫 2 / )
STDERR
) 숫자 핸들 1과 동일한 대상으로 이동
- 1 / 표출숫재결연력핸들자준숫▁/(▁1결연핸▁redirect▁(▁/ing 1 /
if %errorLevel% == 0
- 종료 코드의 값인 경우(
%errorLevel%
)는0
그러면 오류가 발생하지 않았으므로 바로 이전 명령이 성공적으로 실행되었음을 의미합니다.
- 종료 코드의 값인 경우(
else
- 종료 코드의 값인 경우(
%errorLevel%
)가 아닙니다.0
그러면 오류가 발생하여 바로 이전 명령이 실행되지 않았음을 의미합니다.
- 종료 코드의 값인 경우(
- 충족되는 기준에 따라 각 괄호 사이의 코드가 실행됩니다.
스크린샷
NET SESSION
윈도우즈 XP x86 - 윈도우즈 8 x64:
@Tilka님, 수락된 답변을 저의 답변으로 변경해 주셔서 감사합니다.:)
앤더스 솔루션은 저에게 효과가 있었지만 (당신이 관리자가 아니었을 때) 그 반대를 얻기 위해 어떻게 뒤집어야 할지 확신할 수 없었습니다.
제 해결책은 이렇습니다.IF와 ELSE 케이스 두 개와 사람들이 실제로 읽을 수 있도록 일부 아스키 아트가 있습니다. :)
최소 버전
Rushyo는 다음과 같은 솔루션을 게시했습니다.CMD가 관리자로 실행 중인지 또는 권한이 상승되었는지 감지하는 방법은 무엇입니까?
NET SESSION >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
ECHO Administrator PRIVILEGES Detected!
) ELSE (
ECHO NOT AN ADMIN!
)
오류 메시지, 일시 중지 및 종료를 추가하는 버전
@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
WinXP --> Win8(32/64비트 버전 포함)에서 작동합니다.
편집: 2012년 8월 28일 Windows 8을 지원하도록 업데이트되었습니다. @BenHooper는 아래 답변에서 이 점을 지적했습니다.그의 답변에 찬성표를 달아주세요.
기타 문제
@Electrode가 지적한 바와 같이, 만약 당신이 그것을 실행하려고 한다면,net session
서버 서비스가 중지되는 동안 다음 오류 메시지가 표시됩니다.
The Server service is not started.
More help is available by typing NET HELPMSG 2114
이 경우에는%errorLevel%
은 " 는변다로설니다됩정으음수다"로 됩니다.2
.
참고 안전 모드(네트워킹 사용 여부와 관계없이)에서는 서버 서비스가 시작되지 않습니다.
대안을 찾고 있습니다.
다음과 같은 것:
- Windows XP 이상(32비트 및 64비트)에서 즉시 실행할 수 있습니다.
- 레지스트리 또는 시스템 파일/폴더를 건드리지 않습니다.
- 시스템 로케일에 관계없이 작동합니다.
- 는 안전 모드에서도 올바른 결과를 제공합니다.
가상 머신을 하고 그래 저서바윈 XP 상고부애목다시니작습에 있는 했습니다.C:\Windows\System32
폴더, 아이디어를 얻으려고 합니다.시행착오 끝에 제가 생각해낸 더러운(펀 의도된) 접근법은 다음과 같습니다.
fsutil dirty query %systemdrive% >nul
그fsutil dirty
명령을 실행하려면 관리자 권한이 필요하며 그렇지 않으면 실패합니다. %systemdrive%
는 운영 체제가 설치된 드라이브 문자를 반환하는 환경 변수입니다.출력이 다음으로 리디렉션됩니다.nul
따라서 무시됩니다. 그%errorlevel%
은 " 는변다로설니다됩정으음수다"로 됩니다.0
성공적으로 실행된 경우에만.
설명서의 내용은 다음과 같습니다.
Fsutil 더러움
볼륨의 더티 비트를 쿼리하거나 설정합니다.볼륨의 더티 비트가 설정되면 다음에 컴퓨터를 다시 시작할 때 자동 검사가 볼륨에서 오류를 자동으로 확인합니다.
구문
fsutil dirty {query | set} <VolumePath>
매개변수
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.
언급
볼륨의 더티 비트는 파일 시스템이 일관되지 않은 상태일 수 있음을 나타냅니다.더티 비트는 다음과 같은 이유로 설정할 수 있습니다.
- 볼륨이 온라인 상태이고 변경 사항이 있습니다.
- 변경 내용이 디스크에 커밋되기 전에 볼륨이 변경되고 컴퓨터가 종료되었습니다.
- 볼륨에서 손상이 감지되었습니다.
시스템을 재시작할 때 더티 비트가 설정된 경우 chkdsk가 실행되어 파일 시스템 무결성을 확인하고 볼륨 문제를 해결합니다.
예
드라이브 C의 더티 비트를 쿼리하려면 다음을 입력합니다.
fsutil dirty query C:
추가 연구
및 PE Environment에는 Windows 2000 및 Windows PE(Preinstalled Environment)가 함께 fsutil.exe
그래서 우리는 다른 것에 의지해야 합니다.
이전 테스트를 수행하는 동안 다음을 실행할 수 있습니다.sfc
매개 변수가 없는 명령은 다음과 같은 결과를 초래합니다.
- 권한이 충분하지 않은 경우 오류;
- 사용 가능한 매개 변수 및 사용법 목록
즉, 매개 변수와 파티가 없습니다.이 개념은 출력을 구문 분석하여 오류 이외의 내용이 있는지 확인할 수 있다는 것입니다.
sfc 2>&1 | find /i "/SCANNOW" >nul
오류 출력은 먼저 표준 출력으로 리디렉션되고, 이 출력은 다음으로 파이프로 연결됩니다.find
지휘권이 시점에서 Windows 2000 이후 모든 Windows 버전에서 지원되는 유일한 매개 변수를 찾아야 합니다./SCANNOW
구분하지 은 " 은색대소구를않분으출다며력리삭다제니됩여하디션렉음로검으은자지문하▁the▁is다"로 폐기합니다.nul
.
다음은 설명서에서 발췌한 내용입니다.
Sfc
모든 보호된 시스템 파일의 무결성을 검색 및 확인하고 잘못된 버전을 올바른 버전으로 교체합니다.
언급
sfc.exe를 실행하려면 관리자 그룹의 구성원으로 로그온해야 합니다.
샘플 사용량
다음은 붙여넣기 및 실행 예제입니다.
Windows XP 이상
@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
적용 대상
- 윈도 2000
- 윈도 XP
- 윈도 비스타
- 윈도우 7
- 윈도우 8
- 8 버전 8.1
--- - 윈도 PE
두 가지 방법이 더 있습니다. 즉, 빠른 방법과 역호환성입니다.
fltmc >nul 2>&1 && (
echo has admin permissions
) || (
echo has NOT admin permissions
)
fltmc
XP 이후로 모든 윈도우 시스템에서 명령을 사용할 수 있으므로 이것은 꽤 휴대하기 쉬울 것입니다.
테스트를 거친 매우 빠른 솔루션이 하나 더 있습니다.XP
,8.1
,7
가지 특정가 있습니다.=::
콘솔 세션에 관리자 권한이 없는 경우에만 표시됩니다.▁that▁▁as다▁를 포함하는 변수를 만드는 것은 쉽지 않기 때문입니다.=
관리자을 확인하는 신뢰할 수 있는 하지 않아함).
setlocal enableDelayedExpansion
set "dv==::"
if defined !dv! (
echo has NOT admin permissions
) else (
echo has admin permissions
)
배치 파일이 아닌 명령줄을 통해 직접 사용하려면 다음을 사용할 수 있습니다.
set ^"|find "::"||echo has admin permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"&&(
echo admin...
)
대체 솔루션:
@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
권한 있는 액세스를 확인하는 두 가지 방법이 있습니다. 둘 다 매우 안정적이고 거의 모든 Windows 버전에서 휴대성이 뛰어납니다.
방법
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!
)
이것은 단순성 때문에 가장 신뢰할 수 있는 방법 중 하나이며, 이 매우 원시적인 명령의 동작은 변경될 가능성이 매우 낮습니다.관리/네트워크 정책에서 사용하지 않도록 설정할 수 있는 넷 세션과 같은 다른 기본 제공 CLI 도구나 윈도우즈 10에서 출력을 변경한 fsutil과 같은 명령의 경우에는 해당되지 않습니다.
XP 이상에서 작동합니다.
방법
REG ADD HKLM /F>nul 2>&1
IF %ERRORLEVEL%==0 (
ECHO PRIVILEGED!
) ELSE (
ECHO NOT PRIVILEGED!
)
사용자 디스크를 터치하는 것이 fsutil을 사용하거나 빈 폴더를 만드는 것만큼 공격적이지 않더라도 문제가 발생하면 치명적인 오류가 발생할 수 있습니다.이 시나리오에서는 레지스트리에서 권한을 확인하기만 하면 됩니다.
이를 위해 기본 권한을 사용하여 HKEY_LOCAL_MACHINE에 키를 생성하려고 하면 액세스 거부가 발생하고
ERRORLEVEL == 1
그러나 관리자로 실행하면 "명령이 성공적으로 실행됨"으로 인쇄됩니다.ERRORLEVEL == 0
키가 이미 존재하기 때문에 레지스트리에 영향을 주지 않습니다.이것이 아마도 가장 빠른 방법일 것이고, REG는 오랫동안 그곳에 있습니다.PRENT(Win 9X)에서는 사용할 수 없습니다.
XP 이상에서 작동합니다.
작업 예제
임시 폴더를 지우는 스크립트
@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
Windows 7/8/8.1ff에 대한 자동 UAC라고 하는 관리자 권한을
확인할 뿐만 아니라 자동으로 가져옵니다.다음은 기능이 하나 더 추가된 정말 멋진 제품입니다.이 일괄 처리 스니펫은 관리자 권한을 확인할 뿐만 아니라 자동으로 가져옵니다! (UAC 지원 OS에 상주하는 경우 이전에 테스트합니다.
이 방법을 사용하면 "관리자 권한으로" 배치 파일을 더 이상 마우스 오른쪽 단추로 클릭할 필요가 없습니다.만약 당신이 잊어버렸다면, 높아진 권리로 시작하기 위해, UAC가 자동으로 올라옵니다!또한 OS에 UAC가 필요하거나 제공되는 경우에는 처음에 테스트되므로 Windows 2000/XP의 경우 Windows 8.1-테스트 전까지 올바르게 동작합니다.
@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
)
이 스니펫은 특히 (1) Ben Hooper가 이 스레드에서 관리 테스트를 수행하고 (2) BatchGotAdmin에서 읽고 robvanderwoud(존경)를 통해 배치 사이트에서 인용한 UAC 활성화와 같은 일부 좋은 배치 패턴을 병합합니다."VER | FINDSTR 패턴"에 의한 OS 식별에 대해서는 참조를 찾을 수 없습니다.)
(일부 매우 사소한 제한 사항과 관련하여, "NET SESSION"이 다른 답변에 언급된 것처럼 작동하지 않는 경우, 해당 명령 중 다른 명령을 자유롭게 삽입하십시오.Windows 안전 모드로 실행 중이거나 특수 표준 서비스가 중단된 경우, 일부 관리자에게는 중요한 사용 사례가 아닐 수 있습니다.
관리자 권한을 얻기 위해 작성한 배치 스크립트 Elevate.cmd(이 링크 참조)에서는 다음과 같은 방법으로 작업을 수행했습니다.
@echo off
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )
스크립트의 나머지 부분은 다음과 같습니다.
:getPrivileges
rem need to get admin rights, check batch script Elevate.cmd to see how to do that
echo You have no admin rights. Cannot continue.
goto end
:gotPrivileges
echo You have admin rights. Continuing...
rem *** do your admin tasks here ***
:end
pause
이는 Windows 7, 8, 8.1, 10 및 Windows XP에 대해 테스트되었으며 특수 디렉토리, 파일 또는 레지스트리 키와 같은 리소스가 필요하지 않습니다.
▁that▁를 사용합니다.NET FILE
실행하려면 관리자 권한이 있어야 하며 성공적으로 실행된 경우(및 탐지된 관리자 권한) 오류 수준 0을 반환합니다. 그렇지 않으면 오류 수준 > 0을 반환합니다.는 모든메다의억해제다니됩음으로 표시되지 .1>NUL 2>NULL
.
»NET FILE
즉, 시스템에서 관리자 권한을 탐지하는 어떤 것도 변경하지 않습니다(예: 보호된 영역에 레지스트리 키 또는 파일/디렉토리를 만들어 관리자 권한을 조사하려는 다른 솔루션).
CMD 스크립트를 사용하여 관리자 권한을 확인하는 가장 깨끗한 방법은 다음과 같습니다.
@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
이 메서드는 CMD.exe 기본 제공 기능만 사용하므로 매우 빨라야 합니다.또한 SID나 그룹 구성원 자격을 확인하는 대신 프로세스의 실제 기능을 확인하므로 유효한 권한이 테스트됩니다.Windows 2003과 XP에서도 작동합니다.일반 사용자 프로세스 또는 승격되지 않은 프로세스는 디렉토리 시도에 실패하지만 관리 또는 상승된 프로세스는 성공합니다.
후아미/그룹은 한 경우에 작동하지 않습니다.UAC를 완전히 해제한 경우(알림만 해제한 것이 아니라) Administrator 프롬프트에서 시작한 후 다음을 실행합니다.
runas /trustlevel:0x20000 cmd
다음을 실행할 때는 다음을 실행합니다.
whoami /groups
당신이 승진했다고 말할 것입니다.그것은 잘못된 것입니다.잘못된 이유는 다음과 같습니다.
이 상태에서 실행 중인 경우 IsUserAdmin(https://msdn.microsoft.com/en-us/library/windows/desktop/aa376389(v=vs.85).aspx) 이 FALSE를 반환하고 UAC가 완전히 비활성화된 경우 GetTokenInformation이 TokenElevation을 반환합니다.기본값을 입력합니다(http://blogs.msdn.com/b/cjacks/archive/2006/10/24/modifying-the-mandatory-integrity-level-for-a-securable-object-in-windows-vista.aspx) 그러면 프로세스가 상승된 상태로 실행되지 않습니다.whoami /groups
그렇다고 주장합니다.
배치 파일에서 이 작업을 수행하는 가장 좋은 방법은 다음과 같습니다.
net session >nul 2>nul
net session >nul 2>nul
echo %errorlevel%
당신은 해야 합니다.net session
만약 누군가가 했다면 두 번.at
사전에 잘못된 정보를 얻을 수 있습니다.
다음은 Windows 디렉터리에 파일을 생성하려고 합니다.성공하면 제거됩니다.
copy /b/y NUL %WINDIR%\06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 >NUL 2>&1
if errorlevel 1 goto:nonadmin
del %WINDIR%\06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 >NUL 2>&1
:admin
rem here you are administrator
goto:eof
:nonadmin
rem here you are not administrator
goto:eof
06CF2 참고EB6-94E6-4a60-91D8-AB945AE8CF38은 오늘 생성된 GUID이며 기존 파일 이름과 충돌할 가능성이 없는 것으로 간주됩니다.
whoami /groups | find "S-1-16-12288" > nul
if not errorlevel 1 (
echo ... connected as admin
)
일부 서버는 "net session" 명령에 필요한 서비스를 비활성화합니다.이렇게 하면 관리자 검사에서 항상 관리자 권한이 없다고 표시됩니다.
파워셸 누구 있어요?
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"
}
}
편집: copyitright는 이것이 신뢰할 수 없다고 지적했습니다.UAC에서 읽기 액세스를 승인하면 dir가 성공할 수 있습니다.다른 가능성을 제시할 스크립트가 조금 더 있지만 읽기 전용은 아닙니다.
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
아래의 이전 답변
경고: 신뢰할 수 없음
여기에 나와 있는 여러 가지 다른 좋은 답변과 31415에서 제기한 요점을 바탕으로 제가 다음의 팬이라는 것을 알게 되었습니다.
dir "%SystemRoot%\System32\config\DRIVERS" 2>nul >nul || echo Not Admin
의존성이 적고 빠릅니다.
이 페이지에서 가장 호환되는 네 가지 방법의 모음입니다.첫번째 것은 정말 천재적인 것입니다.XP 이상에서 테스트했습니다.관리자 권한을 확인하는 데 사용할 수 있는 표준 명령이 없다는 점이 혼란스럽습니다.이제는 PowerShell에만 집중하고 있는 것 같습니다. 제가 하는 일의 대부분은 정말 쓸모가 없습니다.
필요한 관리자 권한이 부여되지 않은 경우 다른 배치에서 호출하여 실행을 계속하지 않도록 할 수 있는 배치를 'exit-if-not-admin.cmd'라고 불렀습니다.
rem Sun May 03, 2020
rem Methods for XP+ used herein based on:
rem https://stackoverflow.com/questions/4051883/batch-script-how-to-check-for-admin-rights
goto method1
:method1
setlocal enabledelayedexpansion
set "dv==::"
if defined !dv! goto notadmin
goto admin
:method2
call fsutil dirty query %SystemDrive% >nul
if %ERRORLEVEL%==0 goto admin
goto notadmin
:method3
net session >nul 2>&1
if %ERRORLEVEL%==0 goto admin
goto notadmin
:method4
fltmc >nul 2>&1 && goto admin
goto notadmin
:admin
echo Administrator rights detected
goto end
:notadmin
echo ERROR: This batch must be run with Administrator privileges
pause
exit /b
goto end
:end```
참고: WOW64(예: %systemroot%\syswow64\cmd.exe / 32bit Total Commander)에서는 \system32\config\system에 대한 cacls 검사가 항상 실패하므로 64비트 시스템에서 32비트 셸에서 실행되는 스크립트는 영원히 루프됩니다.Prefetch 디렉토리에서 권한을 확인하는 것이 좋습니다.
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\Prefetch\"
Windows XP에서 7로 테스트했지만 Windows 7 설치에서와 마찬가지로 WinPE에서 실패합니다.wim 그런 dirnor cacl은 없습니다.exe
또한 winPE 및 wow64에서는 열려 있는 파일을 확인하지 못합니다.exe:
OPENFILES > nul
Windows 7(윈도우 7)에서는 "대상 시스템은 32비트 운영 체제여야 합니다"라는 정보와 함께 "1"로 오류 수준이 표시됩니다.
복구 콘솔에서도 두 검사 모두 실패할 수 있습니다.
Windows XP - 832/64비트, WOW64 및 WinPE에서 작동하는 기능은 다음과 같습니다(관리자가 모든 사용자에게 권한을 부여하여 Windows 디렉토리를 카펫으로 만들지 않은 경우...).
net session
그리고.
reg add HKLM /F
수표
또한 .vbs 스크립트에서 bat/cmd를 직접 호출하는 레지스트리 항목에 의존하는 일부 Windows XP(및 관리자의 수정 사항에 따라 다른 버전도 마찬가지임)에서 한 가지 더 주의하면 bat/cmd 파일이 아무 것과도 연결되지 않는다는 정보와 함께 실패합니다.
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
cscript "%temp%\getadmin.vbs" //nologo
cmd를 호출하는 중입니다.반면에 exe는 bat/cmd 파일의 매개 변수로 작동합니다.
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
문자 그대로 SE의 이 질문과 링크된 질문 및 기타 질문에 대한 수십 개의 답변은 Windows가 신뢰할 수 있는 내장 콘솔 유틸리티를 제공하지 않는다는 것을 분명히 보여주었습니다.자, 이제 여러분만의 것을 출시할 시간입니다.
전체 관리자 권한으로 프로그램이 실행 중인 경우 탐지를 기반으로 하는 다음 C 코드는 Win2k+1에서 모든 경우(UAC, 도메인, 과도 그룹 등)에서 작동합니다. 이는 권한을 확인할 때 시스템 자체와 동일하기 때문입니다.메시지(스위치로 음소거할 수 있음)와 종료 코드를 모두 사용하여 결과를 알립니다.
번만 , . 그러면 다음을 복사할 수 있습니다..exe
모든 곳 - 그것은 오직 의존합니다.kernel32.dll
그리고.advapi32.dll
(복사본을 업로드했습니다.)
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;
}
1MSDN은 API가 XP+라고 주장하지만 이는 거짓입니다. CheckTokenMembership
2k+이고 다른 하나는 더 오래되었습니다.마지막 링크는 NT에서도 작동할 수 있는 훨씬 더 복잡한 방법을 포함합니다.
여기 목록에 추가할 다른 것이 있습니다;-)
(시스템 위치에서 파일 생성 가능)
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
)
그MODE CON
시스템 위치에 쓸 수 있는 권한이 없는 경우 화면을 다시 초기화하고 텍스트/키워드를 누릅니다.
대안:이를 위해 설계된 외부 유틸리티(예: IsAdmin.exe(무제한 프리웨어)를 사용합니다.
종료 코드:
0 - 현재 사용자가 관리자 그룹의 멤버가 아닙니다.
1 - 현재 관리자의 사용자 구성원이며 상승된 상태로 실행 중입니다.
2 - 현재 관리자의 사용자 구성원이지만 상승된 상태로 실행되고 있지 않습니다.
@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
코드를 한 줄씩 설명하겠습니다.
@echo off
이것이 없으면 사용자들은 1줄 이상으로 짜증이 날 것입니다.
:start
프로그램이 시작되는 지점입니다.
set randname=%random%%random%%random%%random%%random%
작성할 디렉토리의 파일 이름을 설정합니다.
md \windows\%randname% 2>nul
에 디렉토리를 합니다.<DL>:\Windows
(<DL>을 드라이브 문자로 대체).
if %errorlevel%==0 (echo You're elevated!!!
goto end)
. ERRORLEVEL은 0이 됩니다.
끝까지 가십시오(더 이상 진행하지 마십시오).
if %errorlevel%==1 (echo You're not elevated :(:(
goto end)
ERRORLEVEL이 1이면 오류 메시지를 반향하고 끝으로 이동합니다.
goto start
존재하는 파일 이름은 " " " " 입니다.goto end
명령은 이 실행을 허용하지 않습니다.).
:end
끝점 지정
rd \windows\%randname% 2>nul
작성된 디렉토리를 제거합니다.
pause >nul
사용자가 메시지를 볼 수 있도록 일시 중지합니다.
참고: The>nul
그리고.2>nul
는 이러한 명령의 출력을 필터링합니다.
net user %username% >nul 2>&1 && echo admin || echo not admin
여기 제 2페니 가치가 있습니다.
사용자가 "잠금" 정책과 제한된 보기(주로 GPO 세트를 통해 배포됨)를 고수하는 것을 보고 사용자 로그인 프로세스 중에 '작업실' 환경 내에서 실행할 배치가 필요했습니다.
도메인 GPO 세트가 AD 사용자 연결 로그인 스크립트 전에 적용됨 사용자 "새" 프로필이 생성/로드/준비되지 않아 "제거 및/또는 고정" 작업 표시줄 및 시작 메뉴 항목 vbscript + 일부 로컬 파일을 추가할 수 없었기 때문에 GPO 로그인 스크립트를 만드는 것이 너무 오래되었습니다.
예: 제안된 'default-user' 프로파일 환경에는 "가 필요합니다."%ProgramData%\" 내에 위치한 URL'(.lnk) 바로 가기마이크로소프트\Windows\시작 메뉴\프로그램*MyNewOWA.url*) 및 "C:\사용자\공용\데스크탑\*MyNewOWA.url*" 위치, 기타 항목
사용자는 도메인 내에 여러 대의 컴퓨터를 가지고 있으며, 이러한 '작업실' PC에만 이러한 정책이 필요합니다.
이러한 폴더를 수정하려면 '관리자' 권한이 필요하며, '도메인 사용자'는 로컬 '관리자' 그룹에 속하지만 UAC는 다음 과제였습니다.
다양한 적응을 발견하고 여기서 통합했습니다.BYOD 기기를 사용하는 사용자 중에는 파마 문제가 있는 다른 파일이 필요한 사용자도 있습니다.XP(OS가 너무 오래됨)에서 테스트하지 않았지만 코드가 있으면 피드백을 받고 싶습니다.
:: ------------------------------------------------------------------------
:: 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
도메인 PC는 GPO 집합에 의해 가능한 한 많이 제어되어야 합니다.작업 그룹/독립 실행형 시스템은 이 스크립트를 통해 제어할 수 있습니다.
BYOD 워크그룹 PC에서 UAC 프롬프트가 한 번 이상 표시되지만(첫 번째로 'Adminperms'로 업그레이드해야 하는 즉시), 이때부터 관리자가 사용할 수 있도록 로컬 보안 정책이 수정되면 팝업이 사라집니다.
도메인 PC에는 스크립트 'REFERENCE' 섹션에 설명된 대로 이미 작성된 '잠금' 정책 내에 GPO "ConsentPromptBehaviorAdmin" 정책 세트가 있어야 합니다.
다시 seedit를 실행합니다.전체 "UAC로" 또는 "UAC로 안 함" 토론에서 고착된 경우 기본 '.inf' 파일의 exe 가져오기 :-).
btw: @booleau 다음에서 오류를 확인하십시오.
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
명령 프롬프트에서 "%SYSTEMROOT%\system32\cacls.exe" 또는 "%SYSTEMROOT%\system32\config\system"만 실행하거나 둘 다 실행하지 않고 전체적으로 결과를 확인합니다.
또 다른 방법입니다.
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 ...
언급URL : https://stackoverflow.com/questions/4051883/batch-script-how-to-check-for-admin-rights
'sourcecode' 카테고리의 다른 글
Python의 로깅 기능에 사용자 지정 로그 수준을 추가하는 방법 (0) | 2023.06.17 |
---|---|
Panda 'Freq' 태그에서 사용할 수 있는 값은 무엇입니까? (0) | 2023.06.17 |
이 SQL 쿼리를 최적화할 수 있습니까? (0) | 2023.06.17 |
대응 유형 스크립트 자료-UI 사용 유형 호출 불가 (0) | 2023.06.17 |
Javascript 조건부 내부 유형 스크립트 인터페이스 (0) | 2023.06.17 |