
사용자 계정 컨트롤(User Account Control, UAC)은 Windows의 보안에 큰 도움이 되는 기능입니다. UAC가 도입되기 이전의 Windows는 최소한의 필터링도 없이 모든 권한이 열려 있었기 때문입니다.
하지만 이 보안 기능이 때로는 번거로움을 주는 것도 사실입니다. 내가 무엇을 하고 있는지 정확히 알고 있음에도 매번 나타나는 UAC 확인 창은… 솔직히 말해 꽤 귀찮습니다.
그래서 최초 한 번의 실행을 제외하면 UAC 확인 창이 표시되지 않도록 하는 배치 스크립트를 작성했습니다.
스크립트 사용 방법
경고
다음 스크립트는 UAC 확인 창을 우회하도록 설계되었습니다. 이는 Windows의 보안 수준을 낮추는 행위입니다.
본인이 무엇을 하고 있는지 명확히 이해한 경우에만 아래 스크립트를 사용하시기 바랍니다.
주의 사항
다음 사항을 반드시 준수해야 합니다.
- 스크립트 파일 이름에는 공백이 포함되어서는 안 됩니다.
- 스크립트를 실행한 이후에는 파일 이름을 변경하거나 위치를 이동해서는 안 됩니다.
반드시 안전한 경로에 스크립트 파일을 저장한 후 실행하세요.- 해당 스크립트는 실행 인수를 지원하지 않습니다. 실행 인수가 필요하다면 스크립트 파일을 직접 수정하세요.
확인 사항
스크립트를 최초로 실행하는 시각이 오후 11시 59분일 경우, 스크립트가 중복 실행될 수 있습니다.
gsudo 사용)Windows 11의 보안 강화로 인해 net, mshta 명령어가 스크립트 내에서 정상 작동하지 않습니다. 따라서 해당 명령어를 gsudo와 powershell로 대체하였습니다.
gsudo.exe가 위치한 경로를 %PATH%에 추가한 후 사용하세요.
@echo off
setlocal ENABLEDELAYEDEXPANSION
REM Check admin privileges
gsudo status IsElevated >nul 2>&1
if !ErrorLevel! equ 0 (set "IS_ADMIN=true") else (set "IS_ADMIN=false")
if "%1" == "TASKRUN" (
if "!IS_ADMIN!" == "true" (
@REM ================ 아래에 실행할 내용 입력 ================
cd /d "C:\Windows"
start "First" "C:\Windows\notepad.exe" "C:\Windows\Logs\CBS\CBS.log"
@REM ================ 위에 실행할 내용 입력 ================
) else (
powershell -Command "[System.Windows.Forms.MessageBox]::Show('This task requires admin privileges', 'Error', 0, 16)"
)
) else (
set "TNAME=SkipUAC\%~n0"
schtasks /query /tn "!TNAME!" >nul 2>&1
if !ErrorLevel! equ 0 (
REM Task exists. Run it.
echo Task detected. Running it...
schtasks /run /tn "!TNAME!"
) else (
REM Task doesn't exists. Create it.
echo Task is not detected. Creating new one...
REM Task creation needs admin privileges
if not "!IS_ADMIN!" == "true" (goto ELEVATE)
schtasks /create /f /tn "!TNAME!" /sc ONCE /st "23:59" /tr "\"%~dpnx0\" TASKRUN" /rl HIGHEST
powershell -Command "& { $task = Get-ScheduledTask -TaskName '%~n0'; foreach ($trigger in $task.Triggers) { $trigger.Enabled = $false; } Set-ScheduledTask -InputObject $task; }"
if !ErrorLevel! equ 0 (
REM Run newly created task
schtasks /run /tn "!TNAME!"
) else (
REM Task creation failed
powershell -Command "[System.Windows.Forms.MessageBox]::Show('Failed to create task', 'Failed', 0, 16)"
)
)
)
goto:eof
:ELEVATE
gsudo "%~f0" %*
exit /bnet, mshta 사용)Microsoft의 보안 강화로 인해 아래 스크립트는 Windows 11 이상의 OS에서 작동하지 않을 수 있습니다. 가능하다면 gsudo를 사용하는 스크립트를 사용해 주세요.
@echo off
setlocal ENABLEDELAYEDEXPANSION
REM Check admin privileges
net session >nul 2>&1
if !ErrorLevel! equ 0 (set "IS_ADMIN=true") else (set "IS_ADMIN=false")
if "%1" == "TASKRUN" (
if "!IS_ADMIN!" == "true" (
@REM ================ 아래에 실행할 내용 입력 ================
cd /d "C:\Windows"
start "First" "C:\Windows\notepad.exe" "C:\Windows\Logs\CBS\CBS.log"
@REM ================ 위에 실행할 내용 입력 ================
) else (
mshta vbscript:Execute^("msgbox ""This task requires admin privileges"",0,""Error"":close"^)
)
) else (
set "TNAME=SkipUAC\%~n0"
schtasks /query /tn "!TNAME!" >nul 2>&1
if !ErrorLevel! equ 0 (
REM Task exists. Run it.
echo Task detected. Running it...
schtasks /run /tn "!TNAME!"
) else (
REM Task doesn't exists. Create it.
echo Task is not detected. Creating new one...
REM Task creation needs admin privileges
if not "!IS_ADMIN!" == "true" (goto ELEVATE)
schtasks /create /f /tn "!TNAME!" /sc ONCE /st "23:59" /tr "\"%~dpnx0\" TASKRUN" /rl HIGHEST
powershell -Command "& { $task = Get-ScheduledTask -TaskName '%~n0'; foreach ($trigger in $task.Triggers) { $trigger.Enabled = $false; } Set-ScheduledTask -InputObject $task; }"
if !ErrorLevel! equ 0 (
REM Run newly created task
schtasks /run /tn "!TNAME!"
) else (
REM Task creation failed
mshta vbscript:Execute^("msgbox ""Failed to create task"",0,""Failed"":close"^)
)
)
)
goto:eof
:ELEVATE
cd /d %~dp0
mshta "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('%~nx0', '', '', 'runas', 1);close();"
exit사용 방법은 다음과 같습니다.
- 위 스크립트를 복사하여
OpenNotepad.bat과 같은 이름으로 안전한 경로에 저장합니다.- ⚠️ 다운로드 폴더는 안전한 경로가 아닙니다.
- ⚠️ 파일 이름에 공백이 포함되어서는 안 됩니다.
- 저장한 스크립트 파일을 열고, 다음 두 줄 사이에 실행할 명령어를 입력합니다.스크립트 수정 방법은 아래 내용을 참고하세요.
@REM ================ 아래에 실행할 내용 입력 ================ @REM ================ 위에 실행할 내용 입력 ================ - 파일을 저장한 뒤 한 번 실행합니다.
최초 실행 시 UAC 확인 창이 나타나며, 이후부터는 UAC 확인 창이 표시되지 않습니다.- ⚠️ 스크립트 파일의 이름을 변경하거나 위치를 이동해서는 안 됩니다.
위 배치 스크립트는 다음과 같은 원리로 동작합니다.
- 스크립트 실행 시, 첫 번째 실행 인수가
TASKRUN인지 확인합니다. - 첫 번째 실행 인수가
TASKRUN인 경우, 현재 스크립트가 관리자 권한으로 실행 중인지 확인합니다.- 관리자 권한으로 실행 중이라면, 작업 스케줄러에 등록된 작업을 실행합니다.
- 첫 번째 실행 인수가
TASKRUN이 아닌 경우, 작업 스케줄러에SkipUAC/<스크립트 파일 이름>형식의 작업이 존재하는지 확인합니다.- 해당 작업이 이미 존재하면 그 작업을 실행합니다.
- 작업이 존재하지 않으면, 작업 스케줄러의
SkipUAC폴더 아래에 스크립트 파일 이름으로 새 작업을 등록합니다.
이 작업은 스크립트 파일을 관리자 권한으로 실행하도록 설정됩니다.
작업 등록이 완료되면, 해당 작업을 즉시 실행합니다.
스크립트 수정 방법
다른 프로그램 실행
명령 프롬프트 스크립트의 특성상, 여러 프로그램을 동시에 실행하려면 다음과 같이 수정해야 합니다.
cd /d "<프로그램 A가 위치한 폴더 경로>"
start "<아무 문자열 1>" "<프로그램 A의 전체 경로>" <프로그램 A의 실행 인수>
cd /d "<프로그램 B가 위치한 폴더 경로>"
start "<아무 문자열 2>" "<프로그램 B의 전체 경로>" <프로그램 B의 실행 인수>단순히 아래와 같이 작성하면, 프로그램 A가 종료된 이후에 프로그램 B가 실행됩니다.
"<프로그램 A의 전체 경로>" <프로그램 A의 실행 인수>
"<프로그램 B의 전체 경로>" <프로그램 B의 실행 인수>![[Debian] 마인크래프트 서버 설치기 (2) - 마인크래프트 서버](/d/server/debian-minecraft-server-2/logo.86ca6ab6e86a276b4ae79d7fa1bea66f.webp)
![[Debian] 마인크래프트 서버 설치기 (1) - 데비안 설치](/d/server/debian-minecraft-server-1/logo.86ca6ab6e86a276b4ae79d7fa1bea66f.webp)
![[Go] 바이너리 파일 크기 줄이기](/d/development/go-reduce-binary-size/go.bf1d3c89973bfed4966f685e124cfdfa.webp)
![[Prism Launcher] 설정](/d/game/prism-launcher-configuration/logo.f3d9c39d1f7cfd4c479d6d90c4917eb2.webp)
![[Prism Launcher] 설치](/d/game/prism-launcher-install/logo.f3d9c39d1f7cfd4c479d6d90c4917eb2.webp)
![[Windows] 업그레이드 차단하기](/d/desktop/windows-block-upgrade/logo.1dc0ab65e12a8e9a0bb1ae2f179d7a83.webp)
![[macOS] Finder 도구 막대에 버튼 추가하기](/d/desktop/macos-add-button-to-finder-toolbar/003.0caaabd1cfdef47e683ebf823397f56e.webp)
![[Android] 삼성 스마트폰 카메라 촬영음 없애기](/d/mobile/android-disable-samsung-smartphone-camera-shutter-sound/logo.afa3141f6fef59f61f9ae0ff6a791fc8.webp)
![[Visual Studio] UI 요소 숨기기](/d/development/visual-studio-hide-ui-element/logo.64e4d119ae00189abe69768e00da86a8.webp)
![[Windows] Wi-Fi 프로필 내보내기/불러오기](/d/desktop/windows-wifi-profile-import-export/logo.0d08578a12ef60ebe6ede2982d77af4a.webp)