배치 파일(Batch File)을 사용하여 커맨드라인 명령어를 자동화하려 할 때, 관리자 권한이 필요할 때가 있습니다.
그러나 배치파일 내에 특별한 명령이 들어있지 않다면 관리자 권한이 요구되는 작업은 무시되거나 오류를 발생시킬 수 있습니다. 예를 들어 민감한 파일의 이름을 변경하거나 파일을 편집하고 생성하는 작업들은 일반 사용자가 쉽게 접근 및 실행할 수 없을 수도 있습니다.
배치 파일 관리자 권한 실행하기
따라서 파일 실행 전에 관리자 권한을 묻는 창을 띄워 파일 실행을 방해하지 않도록 내용을 추가해보겠습니다. 일반적으로 Windows 7 이상에서 관리자 권한을 얻기 위해서는 사용자 계정 컨트롤 (User Access Control, UAC)이라는 계정 관리 서비스에 의해서 관리자 권한을 사용하기 위한 승인을 받아야 합니다. 보통 프로그램을 설치하거나 실행할 때 쉽게 보게되는 아래와 같이 어두운 배경의 파란 박스가 사용자 계정 컨트롤 창입니다.
관리자 권한을 취득하는 배치 파일
아래 배치 파일의 내용은 관리자 권한을 취득하는 모든 과정이 포함되어 있습니다.
UACAccess 라벨에서 UAC 창이 띄워지며, Done 라벨에서는 권한 취득 완료 시에 진행되는 내용입니다. 만약 사용자 계정 컨트롤 창이 떴음에도 사용자가 아니요(거부)를 클릭하면 커맨드 창은 종료됩니다.
이 과정은 CMD 명령어로 처리하기 어렵기 때문에 VB Script를 사용하여 진행해야 합니다. 따라서 배치파일 명령어에는 uac_get_admin.vbs라는 파일을 별도로 만들어서 실행하는 내용이 포함되어 있습니다.
@echo off set uaccheck=0 :CheckUAC >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if '%errorlevel%' NEQ '0' ( goto UACAccess ) else ( goto Done ) :UACAccess echo 관리자 권한을 취득해야 합니다. pause echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\uac_get_admin.vbs" set params = %*:"="" echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\uac_get_admin.vbs" "%temp%\uac_get_admin.vbs" del "%temp%\uac_get_admin.vbs" exit /b :Done echo 관리자 권한을 취득하였습니다. pause exit
이제 batch 파일을 관리자 권한으로 직접 실행할 필요가 없습니다. 실행하면 권한을 자동으로 확인한 후 관리자 권한이 없다면 요청할 것입니다.
ㄱㅅㄱㅅ
감사합니다 잘보고 갑니다