현재 배치 스크립트에 관리자 권한이 있는지 어떻게 확인합니까?
runas로 자체 호출하는 방법을 알고 있지만 관리자 권한을 확인하는 방법은 알고 있지 않습니다. 내가 본 유일한 솔루션은 거친 해킹 작업이나 외부 프로그램을 사용하는 것입니다. 글쎄, 실제로 Windows XP 이상에서 작동하는 한 해킹 작업인지는 상관하지 않습니다.
현재 배치 스크립트에 관리자 권한이 있는지 어떻게 확인합니까?
runas로 자체 호출하는 방법을 알고 있지만 관리자 권한을 확인하는 방법은 알고 있지 않습니다. 내가 본 유일한 솔루션은 거친 해킹 작업이나 외부 프로그램을 사용하는 것입니다. 글쎄, 실제로 Windows XP 이상에서 작동하는 한 해킹 작업인지는 상관하지 않습니다.
답변:
blak3r / Rushyo 의 솔루션은 Windows 8 이외의 모든 환경에서 제대로 작동합니다. Windows 8에서 실행 AT
하면 다음과 같은 결과가 발생합니다.
The AT command has been deprecated. Please use schtasks.exe instead.
The request is not supported.
(스크린 샷 # 1 참조)를 반환 %errorLevel%
1
합니다.
그래서 높은 권한이 필요한 다른 명령을 검색했습니다. rationallyparanoid.com 에는 몇 가지 목록이 있었으므로 표준 권한으로 실행할 때 두 OS 모두에서 액세스가 거부되는 명령을 찾기 위해 현재 Windows OS (XP 및 8)의 두 반대 극단에서 각 명령을 실행했습니다.
결국, 나는 하나를 찾았습니다 NET SESSION
. 다음 과 관련이없는 진실 되고 깨끗하며 보편적 인 솔루션 :
FOR
루프 에서 반환 된 데이터 분석AT
(윈도우 8 호환) 또는 WHOAMI
(윈도우 XP의 호환을). 각각에는 자체 보안, 유용성 및 이식성 문제가 있습니다.
나는 이것이 작동한다는 것을 독립적으로 확인했다.
(스크린 샷 # 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
게으른 경우 여기에서 사용할 수 있습니다 : https://dl.dropbox.com/u/27573003/Distribution/Binaries/check_Permissions.bat
NET SESSION
"서버 컴퓨터 연결을 관리하는 데 사용되는 표준 명령 입니다. 매개 변수없이 사용하면 [it]는 로컬 컴퓨터와의 모든 세션에 대한 정보를 표시합니다."
주어진 구현의 기본 프로세스는 다음과 같습니다.
@echo off
goto check_Permissions
:check_Permissions
코드 블록으로 이동net session >nul 2>&1
STDOUT
) 스트림을nul
STDERR
)을 숫자 핸들 1과 동일한 대상으로 리디렉션if %errorLevel% == 0
%errorLevel%
) 인 0
것을 다음이 의미 오류가 발생하지 않은 , 따라서, 바로 위 명령을 실행 성공적으로else
%errorLevel%
) 값 이 아닌 0
경우 오류가 발생 했으므로 바로 이전 명령이 성공적으로 실행 되지 않은 것입니다.
NET SESSION
Windows XP x86-Windows 8 x64 :
수락 된 답변을 내 것으로 변경해 주셔서 감사합니다. @Tilka. :)
net session
성공적으로 실행할 수 있습니다 (ERRORLEVEL = 0). 그러나 실제로 관리자 권한이 없습니다. 사용 openfiles
( 아래 Lucretius의 답변 참조)에는이 문제가 없습니다.
Anders 솔루션은 나를 위해 일했지만 반대가되도록 관리자를 사용하지 않는 방법을 확신하지 못했습니다.
여기 내 해결책이 있습니다. 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가 아래 답변에서 이것을 지적했습니다. 그의 대답을 찬성하십시오.
AT
Windows 8에서는 작동하지 않지만 더 나은 솔루션을 찾았습니다. 사실, 여기에 대한 답변으로 게시 한 : stackoverflow.com/questions/4051883/...을 (아니면 그냥 아래로 스크롤 할 수, 무엇이든).
@Lectrode에서 지적한 것처럼 net session
서버 서비스가 중지 된 상태에서 명령 을 실행하려고 하면 다음 오류 메시지가 나타납니다.
The Server service is not started.
More help is available by typing NET HELPMSG 2114
이 경우 %errorLevel%
변수는로 설정됩니다 2
.
참고 안전 모드 (네트워킹 유무에 관계없이)에는 서버 서비스가 시작되지 않습니다.
무언가:
그래서 나는 바닐라 Windows XP 가상 머신을 부팅하고 C:\Windows\System32
폴더 의 응용 프로그램 목록을 스크롤하면서 몇 가지 아이디어를 얻었습니다. 시행 착오 후에, 이것은 내가 생각해 낸 더러운 (pun 의도 된) 접근법입니다.
fsutil dirty query %systemdrive% >nul
이 fsutil dirty
명령을 실행하려면 관리자 권한이 필요하며 그렇지 않으면 실패합니다. 운영 체제가 설치된 드라이브 문자를 반환 %systemdrive%
하는 환경 변수 입니다. 출력이로 리디렉션 nul
되어 무시됩니다. %errorlevel%
변수에 설정됩니다 0
만 성공적으로 실행시.
다음은 설명서의 내용입니다.
더러운 Fsutil
볼륨의 더티 비트를 쿼리하거나 설정합니다. 볼륨의 더티 비트가 설정되면 autochk 는 다음에 컴퓨터를 다시 시작할 때 볼륨에 오류가 있는지 자동으로 확인합니다.
통사론
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:
위의 솔루션은 Windows XP부터 작동하지만 Windows 2000 및 Windows PE (사전 설치 환경)에는 포함되지 않는 추가 가치가 있습니다. fsutil.exe
합니다.
이전 테스트 중에 sfc
매개 변수없이 명령 을 실행하면 다음과 같은 결과가 나타납니다.
즉 : 매개 변수가 없고 파티가 없습니다 . 아이디어는 출력을 구문 분석하고 오류 이외의 것이 있는지 확인할 수 있다는 것입니다.
sfc 2>&1 | find /i "/SCANNOW" >nul
오류 출력은 먼저 표준 출력으로 리디렉션 된 다음 find
명령으로 파이프됩니다 . 이 시점 에서 Windows 2000 이후의 모든 Windows 버전에서 지원되는 유일한 매개 변수 를 찾아야합니다 . 검색은 대소 문자를 구분하지 않으며로 리디렉션하여 출력을 버립니다 ./SCANNOW
nul
다음은 설명서에서 발췌 한 내용입니다.
Sfc
보호 된 모든 시스템 파일의 무결성을 검사하고 확인하고 잘못된 버전을 올바른 버전으로 바꿉니다.
비고
sfc.exe 를 실행하려면 Administrators 그룹의 구성원으로 로그온해야합니다 .
붙여 넣기 및 실행 예제는 다음과 같습니다.
@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
@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
SFC
모든 시스템에 대해 수표 를 사용하려는 사람에게는 약간의 창의력이 필요합니다. 어떤 이유로 Windows 8부터는 SFC
단일 문자 만 출력됩니다. 출력을 성공적으로 구문 분석하려면 다음을 수행해야합니다. setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%s in ('sfc 2^>^&1^|MORE') do @set "output=!output!%%s"
echo "%output%"|findstr /I /C:"/scannow">nul 2>&1
(3 개의 개별 행). 이것은 Windows 2012 R2를 통해 Windows 2000에서 작동합니다. 참고로 FINDSTR은 FIND보다 일반적으로 작업을 더 빨리 처리하기 때문에 선호합니다.
fsutil
아직 개인적으로 솔루션을 테스트 하지는 않았지만 볼 수 있듯이 내 솔루션보다 훨씬 유연 해 보입니다. 비록 우아하지는 않지만 어쩌면. ;) 우리 사이에 훌륭하고 쉽고 유연한 관리자 감지 솔루션이 제공되고 있음을 알게되어 기쁩니다. :)
fsutil dirty query >nul
때 드라이브 문자를 제외하고 그냥 올렸을 때 실행할 수 있습니다. 도움말 텍스트와 % errorlevel % = 0을 반환합니다.
fsutil dirty query >nul
않지만 fsutil dirty query %systemdrive% >nul
여전히 작동합니다.
두 가지 방법-빠르고 역 호환 가능.
fltmc >nul 2>&1 && (
echo has admin permissions
) || (
echo has NOT admin permissions
)
fltmc
XP 이후 모든 Windows 시스템에서 명령을 사용할 수 있으므로 이식성이 뛰어납니다.
하나 개 더 정말 빠른 솔루션에 대한 테스트 XP
, 8.1
, 7
- 하나 개의 특정 변수 거기에 =::
콘솔 세션이 너무 쉽게 포함 변수를 만들 수없는 어떤 관리자 privileges.As이없는 경우에만 제공됩니다 =
그것의 이름은이 관리자 확인하기 위해 비교적 신뢰할 수있는 방법입니다 권한 (외부 실행 파일을 호출하지 않으므로 성능이 좋습니다)
setlocal enableDelayedExpansion
set "dv==::"
if defined !dv! (
echo has NOT admin permissions
) else (
echo has admin permissions
)
배치 파일이 아닌 명령 줄을 통해 직접 사용하려면 다음을 사용할 수 있습니다.
set ^"|find "::"||echo has admin permissions
=::
변수의 존재 는 버그 일지라도 기존 드라이브가 아니기 때문에 win10에서 수정되었을 것입니다.
=::
Windows 10 1709에서 비 관리 CMD에 대해 정의 된 것을 볼 수 있습니다. 어쨌든 신뢰할 수있는 방법은 아니지만 관리 CMD 세션에서도 쉽게 정의되도록 할 수 있습니다.subst :: c:\ & for %a in (::) do %a & set,
대체 솔루션 :
@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
openfiles
ERRORLEVEL을 실행 하고 확인하면 충분합니다.
openfiles.exe
WinPE에서 작동하지 않으므로 스크립트는 항상 사용자가 관리자가 아님을 반환합니다.
1>
과 2>&1
에 설명되어 있습니다 microsoft.com/resources/documentation/windows/xp/all/proddocs/... . 널 장치를nul
말합니다
뿐만 아니라
자동으로 UAC for Win 7 / 8 / 8.1 ff. : 다음은 하나 이상의 기능이 추가 된 멋진 기능입니다.이 배치 스 니펫은 관리자 권한을 검사 할뿐만 아니라 자동으로 가져옵니다! (그리고 UAC 가능 OS에 거주하는 경우 이전에 테스트합니다.)
이 트릭을 사용하면 "관리자 권한으로"배치 파일을 마우스 오른쪽 단추로 더 이상 쓸 필요가 없습니다. 잊어 버린 경우 높은 권한으로 시작하기 위해 UAC가 자동으로 나타납니다! 또한, OS가 UAC를 필요로하거나 제공하는 경우 처음에 테스트되므로 Win 8.1- 테스트가 완료 될 때까지 Win 2000 / XP에 대해 올바르게 동작합니다.
@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에서 읽은 UAC 활성화는 배치 사이트에서 robvanderwoude에 의해 인용되었습니다 (존중). (3) "VER | FINDSTR pattern"에 의한 OS 식별의 경우 참조를 찾을 수 없습니다.)
(다른 답변에서 언급 한대로 "NET SESSION"이 작동하지 않을 때 매우 사소한 제한 사항에 대해서는 다른 명령을 자유롭게 삽입하십시오. Windows 안전 모드 또는 특수 표준 서비스에서 실행되는 경우 중요한 사용 사례가 아닙니다. -일부 관리자에게는 해당 될 수 있습니다.)
start
합니다. 스크립트를 새 창에서 엽니 다. 결과를 보려면 pause
스크립트 끝에를 추가 하십시오. 또한, 우리가 "숙박"할 때, 그리고 재실행이있을 때를 감지하기는 어렵습니다. : 당신은 그것을 위해 명령 줄 인수 사용할 수 있습니다 github.com/tgandor/meats/blob/master/lang_lawyer/cmd/...
권한있는 액세스를 확인하는 두 가지 방법이 있습니다. 둘 다 거의 모든 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!
)
이 방법은 단순성 때문에 가장 신뢰할 수있는 방법 중 하나이며이 매우 기본적인 명령의 동작은 변경 될 가능성이 거의 없습니다. 관리자 / 네트워크 정책 또는 fsutils 와 같은 명령으로 비활성화 할 수있는 net session 과 같은 다른 내장 CLI 도구의 경우에는 해당되지 않습니다. Windows 10에서 출력을 변경 한 .
* XP 이상에서 작동
REG ADD HKLM /F>nul 2>&1
IF %ERRORLEVEL%==0 (
ECHO PRIVILEGED!
) ELSE (
ECHO NOT PRIVILEGED!
)
fsutils를 사용하거나 빈 폴더를 만드는 것만 큼 좋지 않은 경우에도 사용자 디스크를 만지는 생각이 마음에 들지 않는 경우가 있지만 이는 불가능하지만 문제가 발생하면 치명적인 오류가 발생할 수 있습니다. 이 시나리오에서는 레지스트리에 권한이 있는지 확인할 수 있습니다.
이를 위해 기본 권한을 사용하여 HKEY_LOCAL_MACHINE에 키를 만들 수 있습니다. 액세스가 거부 되고
ERRORLEVEL == 1
관리자로 실행하면 "명령이 성공적으로 실행되었습니다"라는 메시지 가 표시ERRORLEVEL == 0
됩니다. 키가 이미 존재하므로 레지스트리에는 영향을 미치지 않습니다. 이것은 아마도 가장 빠른 방법이며 REG 는 오랫동안 존재합니다.* NT 이전 (Win 9X)에서는 사용할 수 없습니다.
* XP 이상에서 작동
임시 폴더를 지우는 스크립트
내가 찾은 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와 같은 방식으로 작동합니다. 일반 사용자 프로세스 또는 관련이없는 프로세스는 디렉토리 프로브에서 실패합니다. 여기서 관리자 또는 높은 프로세스가 성공합니다.
다음은 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
06CF2EB6-94E6-4a60-91D8-AB945AE8CF38은 오늘 생성 된 GUID이며 기존 파일 이름과 충돌 할 수없는 것으로 가정합니다.
was generated today and it is assumed to be improbable to conflict with an existing filename.
두 사람이이 코드를 사용하는 경우를 제외하고
whoami / groups는 어떤 경우에는 작동하지 않습니다. 당신이 UAC 완전히 (단지 통지 해제) 꺼져있는 경우 그리고 당신은 발행 프롬프트 관리자에서 시작 :
runas /trustlevel:0x20000 cmd
높이 지 않고 실행하지만 다음을 발행합니다.
whoami /groups
당신이 상승했다고 말할 것입니다. 잘못 됐어 이것이 왜 잘못 되었습니까?
이 상태에서 실행할 때 IsUserAdmin ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa376389(v=vs.85).aspx )이 FALSE를 반환하고 UAC가 완전히 비활성화 된 경우 GetTokenInformation TokenElevationTypeDefault를 반환합니다 ( 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
잘못된 정보를 얻을 수 있기 때문에 두 번 해야 합니다.
whoami /groups
잘못된 정보를 제공하지 않습니다. 그것은 단지의 runas /trustlevel
예상치 못한 장소에 둔다 당신 : 관리자 권한없이하지만 높은 무결성 수준으로 실행. 프로세스 탐색기로이를 확인할 수 있습니다. (이것은 버그 일 수도 있지만 버그 runas
는 아닙니다 whoami
.)
runas /trustlevel
로컬 관리자가되면, 그리고 UAC는 RUNAS은 "기본 사용자"보안 컨텍스트에 넣을 것입니다 관리자 프롬프트에서 명령 있음을 발행, 사용할 수 없습니다. 해당 모드에서는 관리자 작업을 수행 할 수 없습니다. "net session"또는 fsutil "또는 관리자 액세스가 필요한 기타 유틸리티를 사용해보십시오. 그러나"whoami / groups "는 관리자에게 권한이 있음을 알려줍니다. 그렇지 않은 경우 GetTokenInformation을 호출하면"TokenElevationTypeDefault "가 반환됩니다.
whoami /groups | find "S-1-16-12288" > nul
if not errorlevel 1 (
echo ... connected as admin
)
whoami
Windows XP에서는 Plus 가 지원되지 않습니다.
편집 : 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
아래의 오래된 답변
경고 : 신뢰할 수없는
여기에 많은 다른 좋은 답변과 and31415에 의해 제기 된 요점을 바탕으로 나는 다음의 팬이라는 것을 알았습니다.
dir "%SystemRoot%\System32\config\DRIVERS" 2>nul >nul || echo Not Admin
의존성과 빠름이 거의 없습니다.
참고 : \ system32 \ config \ system에 대해 cacls를 검사하면 WOW64에서 항상 실패합니다 (예 : % systemroot % \ syswow64 \ cmd.exe / 32 비트 Total Commander). 64 비트 시스템의 32 비트 셸에서 실행되는 스크립트는 영원히 반복됩니다. ... 프리 페치 디렉토리에 대한 권한을 확인하는 것이 좋습니다.
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\Prefetch\"
Win XP에서 7까지 테스트되었지만 Windows 7 install.wim에서와 같이 WinPE에서 실패합니다 .dir 또는 cacls.exe가 없습니다.
또한 winPE에서 wow64는 openfiles.exe로 확인하지 못합니다.
OPENFILES > nul
Windows 7에서는 "대상 시스템이 32 비트 운영 체제 여야합니다"라는 정보와 함께 "1"로 오류가 발생합니다.
복구 콘솔에서도 두 가지 검사가 모두 실패 할 수 있습니다.
무엇 작동 Windows XP에서 - WOW64와 WinPE를에, 8 32/64 비트는 다음과 같습니다 : 디렉토리 생성 시험 (관리자가하지 카펫은 모두에게 권한이있는 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
반면 bat / cmd 파일의 매개 변수를 사용하여 cmd.exe를 호출하면 정상적으로 작동합니다.
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;
}
1 MSDN은 API가 XP +라고 주장하지만 이는 사실이 아닙니다. CheckTokenMembership
2k + 이고 다른 하나 는 더 오래되었습니다 . 마지막 링크에는 NT에서도 작동하는 훨씬 더 복잡한 방법이 포함되어 있습니다.
PowerShell 누구?
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"
}
}
리스트에 추가 할 또 다른 것이 있습니다 ;-)
(시스템 위치에서 파일 작성 시도)
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
화면을 다시 초기화하고 시스템 위치에 쓸 수있는 권한을 가지고 있지 때 텍스트 / 오류를 surpresses.
대안 :이 목적을 위해 설계된 외부 유틸리티 ( 예 : 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
사용자가 메시지를 볼 수 있도록 일시 중지합니다.
참고 : >nul
및 2>nul
이 명령의 출력을 필터링합니다.
net user %username% >nul 2>&1 && echo admin || echo not admin
admin
가장 간단한 방법은 시스템 날짜를 변경하는 것입니다 (관리자 권한이 필요함).
date %date%
if errorlevel 1 (
echo You have NOT admin rights
) else (
echo You have admin rights
)
%date%
변수에 요일이 포함될 수 있으면 DATE
명령의 마지막 부분에서 날짜를 얻으십시오 .
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 ...
:(
사용할 수있는 사용자를 찾았습니다 net session
관리자가 아니더라도 . 나는 왜 그런지 조사하지 않았다. 내 해결 방법은 사용자가 Windows 폴더에 폴더를 만들 수 있는지 테스트하는 것입니다.
내 코드는 다음과 같습니다.
::::::: :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 ::::::
이 페이지에서 가장 호환 가능한 것으로 보이는 4 가지 방법 모음입니다. 첫 번째는 정말 천재적입니다. XP에서 테스트했습니다. 관리자 권한을 확인하는 데 사용할 수있는 표준 명령이 없다는 것을 혼동합니다. 나는 그들이 단순히 PowerShell에 집중하고 있다고 생각합니다.
필요한 관리자 권한이 주어지지 않으면 실행을 계속하지 않도록 다른 배치에서 호출 할 수있는 배치 'exit-if-not-admin.cmd'를 호출했습니다.
rem Sun May 03, 2020
rem Methods for XP+ used herein based on:
rem /programming/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```
여기 내 2 인분이 있습니다 :
사용자 로그인 프로세스 중 '작업실'환경 내에서 도메인 환경 내에서 실행할 배치가 필요했습니다. 사용자가 "잠금"정책 및 제한된보기 (주로 GPO 세트를 통해 배포 됨)를 준수하는 것을 확인했습니다.
AD 사용자 연결 로그인 스크립트 이전에 도메인 GPO 세트가 적용됨 사용자 "새"프로필을 만들거나로드하지 않았거나 "제거 및 / 또는 적용"할 시간이 없어서 GPO 로그인 스크립트 생성이 너무 과도합니다. 핀 "작업 표시 줄 및 시작 메뉴 항목 vbscript + 일부 로컬 파일을 추가하십시오.
예 : 제안 된 '기본 사용자'프로필 환경에는 "% ProgramData % \ Microsoft \ Windows \ Start Menu \ Programs * MyNewOWA.url *"에 ".URL"(. lnk) 바로 가기와 "C : 다른 항목 중 \ Users \ Public \ Desktop \ * 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 프롬프트가 최소한 한 번 팝업됩니다 (첫 번째 '관리자 권한'이 필요한 즉시). 그러나이 시점부터 관리자를 위해 로컬 보안 정책이 수정되면 팝업이 사라집니다.
스크립트 'REFERENCES'섹션에 설명 된대로 도메인 PC에는 '이미'생성 된 "잠금"정책 내에 GPO "ConsentPromptBehaviorAdmin"정책이 설정되어 있어야합니다.
"To UAC 또는 Not to UAC"토론 (-:) 전체에 멈춘 경우 기본 '.inf'파일의 secedit.exe 가져 오기를 다시 실행하십시오.
btw : @boileau 다음에서 실패를 확인하십시오.
>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 ...