배치 스크립트 : 관리자 권한을 확인하는 방법


281

현재 배치 스크립트에 관리자 권한이 있는지 어떻게 확인합니까?

runas로 자체 호출하는 방법을 알고 있지만 관리자 권한을 확인하는 방법은 알고 있지 않습니다. 내가 본 유일한 솔루션은 거친 해킹 작업이나 외부 프로그램을 사용하는 것입니다. 글쎄, 실제로 Windows XP 이상에서 작동하는 한 해킹 작업인지는 상관하지 않습니다.


2
오른쪽을 변경 한 후 : [일괄 파일 내에서 관리자 액세스를 요청하는 방법] [1] [1] : stackoverflow.com/questions/1894967/…
Alban



답변:


466

이슈

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의 호환을).

각각에는 자체 보안, 유용성 및 이식성 문제가 있습니다.

 

테스팅

나는 이것이 작동한다는 것을 독립적으로 확인했다.

  • 윈도우 XP, x86
  • 윈도우 XP, x64
  • 윈도우 비스타, x86
  • 윈도우 비스타, x64
  • 윈도우 7, x86
  • 윈도우 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

게으른 경우 여기에서 사용할 수 있습니다 : https://dl.dropbox.com/u/27573003/Distribution/Binaries/check_Permissions.bat

 

설명

NET SESSION"서버 컴퓨터 연결을 관리하는 데 사용되는 표준 명령 입니다. 매개 변수없이 사용하면 [it]는 로컬 컴퓨터와의 모든 세션에 대한 정보를 표시합니다."

주어진 구현의 기본 프로세스는 다음과 같습니다.

  1. @echo off
    • 명령 표시 비활성화
  2. goto check_Permissions
    • :check_Permissions코드 블록으로 이동
  3. net session >nul 2>&1
    • 명령을 실행
    • 에 의해 명령의 시각적 출력 숨기기
      1. 표준 출력 (숫자 핸들 1 / STDOUT) 스트림을nul
      2. 표준 오류 출력 스트림 (숫자 핸들 2 / STDERR)을 숫자 핸들 1과 동일한 대상으로 리디렉션
  4. if %errorLevel% == 0
    • 종료 코드 (의 값이있는 경우 %errorLevel%) 0 것을 다음이 의미 오류가 발생하지 않은 , 따라서, 바로 위 명령을 실행 성공적으로
  5. else
    • 종료 코드 ( %errorLevel%) 값 이 아닌 0 경우 오류가 발생 했으므로 바로 이전 명령이 성공적으로 실행 되지 않은 것입니다.
  6. 각 괄호 사이의 코드는 충족되는 기준에 따라 실행됩니다.

 

스크린 샷

윈도우 8AT %errorLevel% :

[imgur]

 

NET SESSIONWindows XP x86-Windows 8 x64 :

[imgur]

 

수락 된 답변을 내 것으로 변경해 주셔서 감사합니다. @Tilka. :)


13
+1 멋진 직업! 좋은 연구. 귀하의 게시물은 새로 수락 된 답변이어야합니다.
blak3r

13
이 솔루션은 일반적으로 훌륭하게 작동하지만 "서버"(LanmanServer) 서비스가 중지 된 경우 "서버 서비스가 시작되지 않았습니다"에 대한 오류 코드는 "액세스가 거부되었습니다"에 대해 발생하는 오류 코드와 동일하며 잘못된 부정을 초래합니다. . 즉, 관리 권한으로이 검사를 실행할 수 있으며 해당 권한이없는 경우와 동일한 오류를 반환합니다.
Lectrode

3
@Lectrode 나는 같은 문제가없는 대안 솔루션을 게시했습니다 : stackoverflow.com/questions/4051883/…
and31415

8
이 코드는 사용자가 고급 사용자 인 경우 오탐 (적어도 Windows 7 이상)을 반환합니다. 고급 사용자는 "상승"한 다음 net session성공적으로 실행할 수 있습니다 (ERRORLEVEL = 0). 그러나 실제로 관리자 권한이 없습니다. 사용 openfiles( 아래 Lucretius의 답변 참조)에는이 문제가 없습니다.
EM0

1
네트워크 장치가 제대로 작동하지 않으면 프롬프트가 중단됩니다 (예 : Windows 디버깅). fltmc> nul 2> & 1은 그 점에서 더 잘 작동합니다.
kevinf

80

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가 아래 답변에서 이것을 지적했습니다. 그의 대답을 찬성하십시오.


1
ATWindows 8에서는 작동하지 않지만 더 나은 솔루션을 찾았습니다. 사실, 여기에 대한 답변으로 게시 한 : stackoverflow.com/questions/4051883/...을 (아니면 그냥 아래로 스크롤 할 수, 무엇이든).
mythofechelon

1
첫 번째 코드 블록의 % errorLevel % == / EQU가 TYPO인지 두 줄인지 궁금합니다. 수정하십시오.
Ujjwal Singh

@UjjwalSingh 확실했다. 찾아 주셔서 감사합니다. 업데이트했습니다.
blak3r

"Rushyo가이 솔루션을 여기에 게시했습니다"를 지금 내 솔루션을 사용하고 있다는 것에 대한 귀하의 의견으로 바꾸고 싶습니까? :)
mythofechelon

로컬 컴퓨터의 관리자 그룹에 추가 된 도메인 관리자 그룹에서 작동하지 않으며 도메인 관리자로 로그인하십시오.
MCRohith

46

더 많은 문제

@Lectrode에서 지적한 것처럼 net session서버 서비스가 중지 된 상태에서 명령 을 실행하려고 하면 다음 오류 메시지가 나타납니다.

The Server service is not started.

More help is available by typing NET HELPMSG 2114

이 경우 %errorLevel%변수는로 설정됩니다 2.

참고 안전 모드 (네트워킹 유무에 관계없이)에는 서버 서비스가 시작되지 않습니다.

대안을 찾고

무언가:

  • Windows XP 이상 (32 비트 및 64 비트)에서 즉시 사용할 수 있습니다.
  • 레지스트리 나 시스템 파일 / 폴더를 건드리지 않습니다.
  • 시스템 로케일에 관계없이 작동합니다.
  • 안전 모드에서도 정확한 결과를 제공합니다.

그래서 나는 바닐라 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 버전에서 지원되는 유일한 매개 변수 를 찾아야합니다 . 검색은 대소 문자를 구분하지 않으며로 리디렉션하여 출력을 버립니다 ./SCANNOWnul

다음은 설명서에서 발췌 한 내용입니다.

Sfc

보호 된 모든 시스템 파일의 무결성을 검사하고 확인하고 잘못된 버전을 올바른 버전으로 바꿉니다.

비고

sfc.exe 를 실행하려면 Administrators 그룹의 구성원으로 로그온해야합니다 .

샘플 사용법

붙여 넣기 및 실행 예제는 다음과 같습니다.

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.1
    ---
  • Windows PE

1
+1 우수한 솔루션. 특히 SFC 솔루션은 문제의 모든 운영 체제에서 신뢰할 수있는 검사 인 것 같습니다. 이 중 하나를 사용하여 문제가 발생하면 여기에보고하겠습니다.
Lectrode

1
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보다 일반적으로 작업을 더 빨리 처리하기 때문에 선호합니다.
Lectrode

잘 했어, @ and31415! fsutil아직 개인적으로 솔루션을 테스트 하지는 않았지만 볼 수 있듯이 내 솔루션보다 훨씬 유연 해 보입니다. 비록 우아하지는 않지만 어쩌면. ;) 우리 사이에 훌륭하고 쉽고 유연한 관리자 감지 솔루션이 제공되고 있음을 알게되어 기쁩니다. :)
mythofechelon

1
FSUTIL을 실행할 fsutil dirty query >nul때 드라이브 문자를 제외하고 그냥 올렸을 때 실행할 수 있습니다. 도움말 텍스트와 % errorlevel % = 0을 반환합니다.
SS64

4
@ ss64 Windows 10은 더 이상 0이 아닌 오류 수준을 반환하지 fsutil dirty query >nul않지만 fsutil dirty query %systemdrive% >nul여전히 작동합니다.
bcrist

19

두 가지 방법-빠르고 역 호환 가능.

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

Epic ... 세트 "dv == ::" 솔루션에 단점 / 제한이 있습니까?
script'n'code

글쎄, 어떤 이유로! dv! 방법은 항상 관리자라고 말합니다. 배치 파일 (Windows 10)에서 "관리자 권한으로 실행"을 마우스 오른쪽 단추로 클릭하지 않았습니다. 나는이 방법이 완벽하다고 생각했다. 외부 프로그램에 의존하지 않기 때문에이 방법을 좋아했습니다. 지금 나는 슬프고 그것이 나를 실패 / 신뢰할 수 없게 만드는 이유를 모른다 :(
script'n'code

1
@copyitright-거기에서 테스트 할 win10 머신이 없었습니다 :(. =::변수의 존재 는 버그 일지라도 기존 드라이브가 아니기 때문에 win10에서 수정되었을 것입니다.
npocmaka

아마 그렇습니다. 그것이 지속되는 동안 재미 있었다.
script'n'code

1
=::Windows 10 1709에서 비 관리 CMD에 대해 정의 된 것을 볼 수 있습니다. 어쨌든 신뢰할 수있는 방법은 아니지만 관리 CMD 세션에서도 쉽게 정의되도록 할 수 있습니다.subst :: c:\ & for %a in (::) do %a & set,
sst

17
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"&&(
 echo admin...
)

1
어떤 경우에는 시험을 올린 후에도 항상 시험에 실패한 것으로 보입니다. 내 경우에는 내 응용 프로그램에서 스크립트를 호출했을 때.
boileau

15

대체 솔루션 :

@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

7
답변에 설명을 추가해 주시겠습니까?
bjb568

4
이 코드는 질문에 대답 할 수 있지만 그 이유에 대한 설명을 추가해야합니다.
PlasmaHH 2016 년

2
예! 이 기능은 사용자가 "net session"과 달리 파워 유저 인 경우에도 올바르게 작동합니다. 그러나 푸시 / 팝은 필요하지 않습니다. openfilesERRORLEVEL을 실행 하고 확인하면 충분합니다.
EM0

2
이 솔루션을 사용하고 있으며 잘 작동하고 있습니다. 문제는 openfiles.exeWinPE에서 작동하지 않으므로 스크립트는 항상 사용자가 관리자가 아님을 반환합니다.
Wayfarer

openfiles.exe에 대한 설명서는 technet.microsoft.com/de-de/library/bb490961.aspx 에서 찾을 수 있습니다 . 1>2>&1에 설명되어 있습니다 microsoft.com/resources/documentation/windows/xp/all/proddocs/... . 널 장치를nul 말합니다
user1460043

13

뿐만 아니라
자동으로 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 안전 모드 또는 특수 표준 서비스에서 실행되는 경우 중요한 사용 사례가 아닙니다. -일부 관리자에게는 해당 될 수 있습니다.)


대단해! Visual Basic에서 호출하는 것처럼 작동 start합니다. 스크립트를 새 창에서 엽니 다. 결과를 보려면 pause스크립트 끝에를 추가 하십시오. 또한, 우리가 "숙박"할 때, 그리고 재실행이있을 때를 감지하기는 어렵습니다. : 당신은 그것을 위해 명령 줄 인수 사용할 수 있습니다 github.com/tgandor/meats/blob/master/lang_lawyer/cmd/...
토마스 Gandor

@Philm : UAC에서 사용자가 암호를 입력하도록 요구하면 어떻게됩니까? 이 코드는 사용자가 암호를 먼저 입력하지 않아도 자동으로 관리자 권한을 부여하지 않는다고 가정합니다. ;-)
script'n'code at 23'17

@copyitright. 물론 아닙니다. 그러나 암호가 필요한지 아닌지에 대한 차이점이 여기에 있습니다. "자동"이라는 의미는 물론 스크립트가 Windows를 ASK에서 자동으로 권한을 요구하는 것입니다. 이와 같은 구성이 없으면 더블 클릭 또는 이와 유사한 방식으로 시작하면 배치 스크립트가 실패합니다. 이를 피하려면 사용자는 스크립트에 높은 권한이 필요하며이를 시작해야한다는 것을 미리 알고 있어야합니다.
Philm

따라서 내 스크립트를 사용하면 배치 파일 작성자가 필요한 배치 실행 중 원하는 배치 순간까지 원하는 높이로 이동할 수 있습니다. 즉, 일반적인 "doubleclick"으로보다 편리한 실행을 허용합니다. 기본 Windows 기술에 대해 잘 알고있는 전문가 나 사용자가 일반적으로 사용하는 배치 파일을 고려했기 때문에 자세한 설명은하지 않았습니다.
Philm

12

권한있는 액세스를 확인하는 두 가지 방법이 있습니다. 둘 다 거의 모든 Windows 버전에서 매우 안정적이며 이식성이 뛰어납니다.

1. 방법

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 이상에서 작동

2. 방법

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 이상에서 작동


작업 예

임시 폴더를 지우는 스크립트


1
레지스트리 방법이 정말 마음에 듭니다. 실제로 기억할 수 있으므로 사용할 때마다 찾아 볼 필요는 없습니다.
Miscreant

8

관리자 권한얻기 위해 작성한 배치 스크립트 Elevate.cmd ( 이 링크 참조 ) 에서 다음과 같이 수행했습니다.

:checkPrivileges
  NET FILE 1>NUL 2>NUL
  if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )

입니다 윈도우 7, 8, 8.1, 10, 심지어 윈도우 XP 테스트 와 같은 특별한 디렉토리, 파일 또는 레지스트리 키로 모든 리소스를 필요로하지 않습니다.


6

내가 찾은 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와 같은 방식으로 작동합니다. 일반 사용자 프로세스 또는 관련이없는 프로세스는 디렉토리 프로브에서 실패합니다. 여기서 관리자 또는 높은 프로세스가 성공합니다.


1
copyitright는 이것이 신뢰할 수 없음을 지적했습니다. 탐색기 창에서 % windir % \ system32 \ config \ systemprofile을 방문하고 UAC로 승인하면 CMD 창에서 내용을 성공적으로 삭제할 수 있습니다. 당신이하지 않을 때 당신이 높이 있다고 생각하게합니다.
Tyler Szabo

5

다음은 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이며 기존 파일 이름과 충돌 할 수없는 것으로 가정합니다.


허용되는 답변으로 인해 내 응용 프로그램에서 스크립트를 호출했을 때 무한히 많은 명령 창이 열리기 때문에 +1입니다.
boileau

was generated today and it is assumed to be improbable to conflict with an existing filename.두 사람이이 코드를 사용하는 경우를 제외하고
Vitim.us

4

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.)
Harry Johnston

해리, 당신이하는 말을 들었지만 이것에 대해 자세히 설명해 주시겠습니까? 나는에 관한 코멘트 이해하지 못하는 runas /trustlevel 로컬 관리자가되면, 그리고 UAC는 RUNAS은 "기본 사용자"보안 컨텍스트에 넣을 것입니다 관리자 프롬프트에서 명령 있음을 발행, 사용할 수 없습니다. 해당 모드에서는 관리자 작업을 수행 할 수 없습니다. "net session"또는 fsutil "또는 관리자 액세스가 필요한 기타 유틸리티를 사용해보십시오. 그러나"whoami / groups "는 관리자에게 권한이 있음을 알려줍니다. 그렇지 않은 경우 GetTokenInformation을 호출하면"TokenElevationTypeDefault "가 반환됩니다.
zumalifeguard 2012 년

"whoami / groups가 당신에게 상승했다는 것을 의미합니다"라는 말의 의미를 이해하고 있는지 잘 모르겠습니다. 문자 그대로 "당신은 상승했다"는 문자열을 출력하지 않습니까? whoami / groups 출력 중 어떤 부분을보고 있습니까?
Harry Johnston

해리, 난 확실하지 않은 걸 봤어 첫 번째 배경, 당신과 나는 같은 페이지에 있습니다. 사람들이 명령 프롬프트가 현재 관리자 액세스 권한이있는 상태에서 실행 중인지 확인하는 데 사용하는 몇 가지 트릭이 있습니다. 일반적인 기술은 fsutil, at, whoami 및 "net session"과 같은 내장 명령을 사용하는 것입니다. "at"사용은 더 이상 사용되지 않습니다. 이 페이지를 검색하면 fsutil, whoami 및 "net session"을 사용하는 예제가 표시됩니다. whoami의 더 많은 예는 여기를 참조하십시오 : stackoverflow.com/questions/7985755/…
zumalifeguard 2016 년

또한 "높은 실행"이라는 문구를 사용하는 것이 정확하지 않습니다. 내가 (및 다른 사람들) "관리자 권한으로 실행"이라고 말한 것. UAC가 꺼져 있으면 로컬 관리자로 로그온 한 상태에서 실행되지만 runas와 같이 신뢰 수준이 명시 적으로 낮아지지 않은 것입니다. UAC가 활성화되면 사용자가 관리자 권한 프롬프트로 실행 중임을 의미합니다.
zumalifeguard 2016 년

2
whoami /groups | find "S-1-16-12288" > nul
if not errorlevel 1 (
  echo ...  connected as admin
)

2
여기서 문제는 사용자에게 관리자 권한이 있는지 확인하는 것입니다. 그러나 배치 스크립트는 관리자 권한없이 실행될 수 있습니다.
tanascius

2
whoamiWindows XP에서는 Plus 가 지원되지 않습니다.
mythofechelon

또한 whoami / groups에는 잘못된 정보를 얻는 최첨단 사례가 있습니다. stackoverflow.com/questions/4051883/…
zumalifeguard 17

2

일부 서버는 "net session"명령에 필요한 서비스를 비활성화합니다. 이로 인해 관리자 확인시 항상 관리자 권한이 없다는 메시지가 나타납니다.


2

편집 : 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

의존성과 빠름이 거의 없습니다.


1
이 솔루션은 저에게 효과적 이었지만 위치를 탐색하고 높은 권한이 필요한 폴더에 액세스했기 때문에 표준 사용자로 스크립트를 실행하더라도 ERRORLEVEL / 종료 코드는 항상 0입니다.
script'n'code

1

참고 : \ 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

1

말 그대로 수십 가지의 답변과 관련 질문 및 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에서도 작동하는 훨씬 더 복잡한 방법이 포함되어 있습니다.


1

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"
    }
}

1

리스트에 추가 할 또 다른 것이 있습니다 ;-)

(시스템 위치에서 파일 작성 시도)

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.


0

대안 :이 목적을 위해 설계된 외부 유틸리티 ( 예 : IsAdmin.exe (무제한 프리웨어))를 사용하십시오.

종료 코드 :

0-관리자 그룹의 구성원이 아닌 현재 사용자

1-관리자의 현재 사용자 멤버이며 관리자 권한으로 실행

2-현재 관리자 권한이 있지만 관리자 권한으로 실행되지 않는 경우


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

:main
echo Executing with Administrator privileges...

0
@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

사용자가 메시지를 볼 수 있도록 일시 중지합니다.

참고 : >nul2>nul이 명령의 출력을 필터링합니다.


예 관리자 계정 (관리자 계정 유형의 사용자가 아님)으로 로그인하면 항상 권한이 상승하지만 버그는 아닙니다.
EKons

0

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


이것은 잘못된 것 같습니다. 사용자에게 관리자 권한이 있는지 보여 주지만 현재 cmd.exe가 관리자 권한으로 실행되는 경우 질문과 관련이 없습니다
jeb

현재 cmd.exe가 사용자 데이터베이스에 대한 관리 액세스 권한을 가지고 있는지 여부를 표시하므로 "net session"이없는 경우에도 작동합니다. 또는 "net config> nul 2> & 1 && echo admin || echo not admin"이 작업을 수행합니다. LanmanServer가 중지 된 게스트, 고급 사용자 및 관리자 계정에서 Windows XP의 Windows XP에서 두 구성 모두 성공적으로 테스트되었습니다 (cmd.exe의 오류 수준 2는 게스트 및 고급 사용자에서 실행되고 관리자 권한에서 cmd.exe의 오류 수준 0). Vista 및 이후에 위에서 언급 한 UAC 문제와 함께 작동합니까? 모릅니다. 누군가 테스트 할 수 있다면 좋을 것입니다.
heretic

2
관리자 권한으로 시작하거나 관리자 권한없이 시작한 두 개의 cmd 창 (win7x64)으로 테스트했습니다. 두 경우 모두admin
jeb

0

가장 간단한 방법은 시스템 날짜를 변경하는 것입니다 (관리자 권한이 필요함).

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 ...

3
그런 파괴적인 "조언"을 도울 수는 없지만
ivan_pozdeev

2
정당한 이유없이 시스템 시간을 변경하는 것만으로도 발자취를 느끼게됩니다 (소프트웨어에 대한 모든 종류의 이상한 효과). 현재 시간을 사용하는 경우 명령이 실행될 때까지 여전히 왜곡됩니다.
ivan_pozdeev

2
@ivan_pozdeev : cmd.exe 세션에서 날짜같은 날짜 로 변경 될 때 발생할 수있는 "소프트웨어에 이상한 영향"중 하나만 설명 할 수 있습니다 .
Aacini


@ivan_pozdeev : 귀하의 링크 중 아무도 내 방법과 원격으로 관련되어 있지 않습니다. 내 해결책을 잘못 이해했다고 생각합니다. 이 방법은 두 가지 결과 중 하나 가질 수 있습니다 (사용자가 어떤 관리자 권한이없는 경우) 아무것도 변경되지 않았거나 날짜가 변경되는 동일한 값 (사용자가 관리자 권한이있는 경우). 내 방법은 시간을 변경하지 않습니다 ! 나는 당신이 나의 답을 다시 읽고 당신의 :(
투표에

0

사용할 수있는 사용자를 찾았습니다 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 ::::::

0

이 페이지에서 가장 호환 가능한 것으로 보이는 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```

-1

여기 내 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"또는 둘 다를 실행하여 (높은지 여부와 상관없이) 전체적인 결과를 확인하십시오.


-2

이것을하는 또 다른 방법.

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 ...

그 링크는 무엇입니까? 링크로 인해 스팸으로 신고되었습니다.
mmgross

이 답변을 확인하고 자동으로 확인하는 코드를 확인하십시오. stackoverflow.com/a/30590134/4932683
cyberponk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.