UAC 관리자 권한 요청을 batch script에서

less than 1 minute read

ohyecloudy/dotfiles에 있는 windows bootstrap 배치 스크립트에는 심볼릭 링크 생성이 있다. 관리자 권한으로 실행해야 하는 커맨드. 심볼릭 링크 생성이 뒤에 있어서 배치 스크립트 실패를 더럽게 한다. 그리고 관리자 권한이 필요하다는 걸 항상 실패하고 난 뒤에 알아. 짜증 나서 찾아봤다.

관리자 권한인지는 어떻게 확인할 수 있나?

net file 1>NUL 2>NUL
fsutil dirty query %systemdrive% >nul

관리자 권한이 있을 때만 성공해야 한다. 그리고 시스템 상태를 바꾸는 동작을 하면 안 된다. 두 커맨드 모두 만족함. 둘 중 아무거나 사용하면 된다. 실행 후 %errorlevel% 변수를 확인하면 현재 관리자 권한인지 알 수 있다. 0이 아니면 관리자 권한이 아님.

관리자 권한 상승

추가 설치가 필요없는 방법을 선택했다. 바로 VBScript를 사용하는 방법. powershell을 사용해볼까 했지만, 회사에서 보안 뭐라면서 뻑하면 막아서 패스.

적용

call %binpath%\is-elevated.bat || goto :finally

dotfiles/script/setup.bat 스크립트 초반에 관리자 권한으로 실행하는지 확인하는 코드를 넣었다.

%~dp0..\bin\elevate.bat %~dp0setup.bat

dotfiles/script/bootstrap.bat 스크립트에서는 관리자 권한으로 setup.bat 스크립트를 실행한다.

참고