배치 파일 내에서 관리자 / 상승 권한으로 실행 중인지 테스트하고 싶습니다.
“관리자 권한으로 실행”을 선택해도 사용자 이름은 변경되지 않으므로 작동하지 않습니다.
효과가 없지만 관리 권한이 필요한 범용 명령이있는 경우 해당 명령을 실행하고 권한을 테스트하기 위해 오류 코드를 확인할 수 있습니다. 지금까지 그런 명령을 찾지 못했습니다. 내가 찾은 명령은 특정하지 않은 단일 오류 코드를 반환하는 것 같으며, 이는 모든 것을 나타낼 수 있으며 다양한 이유로 인해 실패하기 쉽습니다.
이전 운영 체제를 지원하는 것이 좋겠지 만 저는 Windows 7에만 관심이 있습니다.
답변
ADDENDUM : Windows 8의 경우 작동하지 않습니다. 대신 이 훌륭한 답변을 참조하십시오 .
이 솔루션은 http://www.robvanderwoude.com/clevertricks.php 에서 찾았습니다.
AT > NUL
IF %ERRORLEVEL% EQU 0 (
ECHO you are Administrator
) ELSE (
ECHO you are NOT Administrator. Exiting...
PING 127.0.0.1 > NUL 2>&1
EXIT /B 1
)
작동하지 않는다고 가정하고 Win7에 대해 이야기하고 있기 때문에 적합한 경우 Powershell에서 다음을 사용할 수 있습니다.
$principal = new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())
$principal.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
그렇지 않은 경우 (그리고 아마도 배치 파일을 명시 적으로 제안했기 때문에) 위의 내용을 .NET으로 작성하고 사용할 배치 파일의 결과에 따라 exe에서 종료 코드를 반환 할 수 있습니다.
답변
이 트릭에는 하나의 명령 만 필요 net session
합니다. 명령 프롬프트에 입력 하십시오.
관리자 가 아닌 경우 액세스가 거부되었습니다. 메시지가 표시됩니다.
System error 5 has occurred.
Access is denied.
이 경우 관리자 내용입니다 , 당신은 다른 메시지, 가장 일반적인 복지를 얻을 :
There are no entries in the list.
에서 MS 테크넷 :
매개 변수없이 사용하면 net session은 로컬 컴퓨터의 모든 세션에 대한 정보를 표시합니다.
답변
나는 Rushyo의 AT 사용 제안을 좋아하지만 이것은 또 다른 옵션입니다.
whoami /groups | findstr /b BUILTIN\Administrators | findstr /c:"Enabled group" && goto :isadministrator
이 접근 방식을 사용하면 원하는 경우 관리자가 아닌 관리자와 권한이없는 관리자를 구분할 수도 있습니다. 권한이없는 관리자는 그룹 목록에 여전히 BUILTIN \ Administrators가 있지만 사용할 수 없습니다.
그러나 일부 비 영어 시스템에서는 작동하지 않습니다. 대신 시도하십시오
whoami /groups | findstr /c:" S-1-5-32-544 " | findstr /c:" Enabled group" && goto :isadministrator
(이것은 Windows 7에서 작동하지만 이전 버전에 대해서는 잘 모르겠습니다.)
답변
다른 사람들이 이전에 넣은 것과 거의 비슷하지만 배치 명령의 시작 부분에 넣을 수있는 단일 라이너입니다. (일반적으로 @echo가 꺼진 후)
net.exe session 1>NUL 2>NUL || (Echo This script requires elevated rights. & Exit /b 1)
답변
Vista, Win 7 이상에서이 작업을 수행하는 가장 쉬운 방법은 토큰 그룹을 열거하고 현재 무결성 수준을 찾는 것입니다 (또는 그룹 구성원 만 중요한 경우 관리자 sid).
관리자 권한으로 실행 중인지 확인하십시오.
whoami /groups | find "S-1-16-12288" && Echo I am running elevated, so I must be an admin anyway ;-)
우리가 로컬 관리자에 속하는지 확인하십시오.
whoami /groups | find "S-1-5-32-544" && Echo I am a local admin
도메인 관리자에 속하는지 확인하십시오.
whoami /groups | find "-512 " && Echo I am a domain admin
다음 문서에서는 Windows에서 사용하는 무결성 수준 SID를 나열합니다. http://msdn.microsoft.com/en-us/library/bb625963.aspx
답변
다음은 상승 된 지위에 초점을 맞춘 Harry의 답변을 약간 수정 한 것입니다. install.bat 파일의 시작 부분에 이것을 사용하고 있습니다.
set IS_ELEVATED=0
whoami /groups | findstr /b /c:"Mandatory Label\High Mandatory Level" | findstr /c:"Enabled group" > nul: && set IS_ELEVATED=1
if %IS_ELEVATED%==0 (
echo You must run the command prompt as administrator to install.
exit /b 1
)
이것은 확실히 저에게 효과가 있었고 원리는 건전한 것 같습니다. 에서 MSFT의 크리스 잭슨 :
관리자 권한으로 실행하는 경우 토큰에는 필수 레이블 \ 높은 필수 수준이라는 ACE가 포함됩니다.
답변
해결책:
at >nul
if %ErrorLevel% equ 0 ( echo Administrator ) else ( echo NOT Administrator )
Windows 10에서 작동하지 않습니다.
모든 버전의 Windows에 대해 이렇게 할 수 있습니다.
openfiles >nul 2>&1
if %ErrorLevel% equ 0 ( echo Administrator ) else ( echo NOT Administrator )