윈 도 우 이런 식으로 작동하는 단일 배치 파일을 만들어주실 수 있으신가요?
2024.01.03 20:13
관리자 권한으로 스크립트를 실행하고자 할 때, 흔히 다음과 같은 스크립트를 씁니다.
@echo off
net session
if %errorlevel% neq 0 goto ELEVATE
goto ADMINTASKS
:ELEVATE
cd /d %~dp0
mshta "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('%~nx0', '', '', 'runas', 1);close();"
exit
:ADMINTASKS
REM Your own script here
하지만 이 방식은 실행시 매번 UAC 권한을 묻는 창이 나타나게 됩니다.
이를 우회하기 위해 쓰이는 방법이 '작업 스케줄러'를 이용한 방법이고요.
그래서 질문이 있습니다.
다음과 같이 작동하는 단일 배치 파일 작성이 가능할까요?
1. 'SkipUAC/<스크립트 파일 이름>'의 작업이 존재하는지 확인
1-1. 존재할 시, 해당 작업 실행
1-2. 존재하지 않을 시, 'SkipUAC/<스크립트 파일 이름>'이라는 새로운 작업 생성. 해당 작업은 해당 스크립트를 UAC 확인 창 없이 관리자 권한으로 실행함. 이후 새로 생성된 작업 실행.
2. 작업 생성 실패 시, 작업 생성이 실패했다는 내용의 MsgBox 출력
이렇게 하면 처음 작업을 등록할 때만 UAC 창이 나타나고, 이후에는 전혀 나타나지 않을 것으로 생각하고 있습니다.
2번에 대해서는 다음 코드를 쓰면 MsgBox를 출력할 수 있다고 하네요.
if 1 == 1 (
mshta vbscript:Execute^("msgbox ""message"",0,""title"":close"^)
)
도움을 주신 분들께 미리 감사 인사를 드립니다.
댓글 [2]
-
메리아 2024.01.04 16:27
-
ViArPl 2024.01.04 22:43
큰 틀을 잡아주신 덕분에 스크립트를 무사히 완성할 수 있었습니다. 감사합니다.
@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 Run script REM Do what you want to do in here. They will run with admin privileges. ) 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 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
스크립트 하나 만드는 데 드는 노력이 장난 아니네요... 장인 분들의 노력이 한층 더 대단해 보입니다...
번호 | 제목 | 글쓴이 | 조회 | 등록일 |
---|---|---|---|---|
[공지] | 질문과 답변 게시판 이용간 유의사항 | gooddew | - | - |
99012 | 윈 도 우| 탐색기 mp3만 썸네일이 안보여요 도와주세요~ [10] | JayJ | 230 | 02-02 |
99011 | 윈 도 우| IFEX 명령문에 관한 문의 [6] | 동백66 | 124 | 02-02 |
99010 | 소프트웨어| 한컴 재설치 질문입니다. [5] | 파풍초 | 721 | 02-02 |
99009 | 윈 도 우| 윈도우 기간 을 리셋 하는방법 | jgbyuk | 496 | 02-02 |
99008 | 기 타| 간단히 보기 표시 [6] | 그루터기 | 364 | 02-02 |
99007 | 윈 도 우| 윈도우10 LSTC도 21H2 에서 22H2 로 업그레이드가 되나요? [8] | MSTSC | 599 | 02-02 |
99006 | 윈 도 우| 윈도우 서버 2012 한글 언어팩 [5] | jgbyuk | 161 | 02-02 |
99005 | 윈 도 우| win10 랜카드 드라이버 통합 [3] | 수리수리 | 299 | 02-02 |
99004 | 소프트웨어| YouTube는 1분 이동, 5분 이동 단축키가 없는 것 같은데 [7] | Abundance | 342 | 02-02 |
99003 | 소프트웨어| 프리미어 프로의 기본 저장 경로 위치 바꾸기 [1] | brucex | 130 | 02-01 |
99002 | 윈 도 우| 윈11유저분들 우클릭메뉴 순정상태로 쓰시나요? [9] | chrome' | 496 | 02-01 |
99001 | 소프트웨어| 크롬 최근 업데이트이후에 화면깜빡임 문제에 대 해서 | shy1911 | 244 | 02-01 |
99000 | 윈 도 우| 바탕화면에서 파일이름 변경시 위치 강제 이동 | Amattare | 166 | 02-01 |
98999 | 윈 도 우| 다른 드라이브에 윈도우 인플레이스 설치 하는방법이 있을... [1] | 다이키리 | 169 | 02-01 |
98998 | 윈 도 우| 읜도우 시스템 앱 삭제 하는 방법이 궁금합니다 [8] | Leaaaa | 306 | 02-01 |
98997 | 윈 도 우| 윈도10 자체 복원 오류 가 생기네요ㅠ [4] | younz | 401 | 01-31 |
98996 | 소프트웨어| ssd 마이그레이션 후 부팅 오류 질문 [5] | jsin22 | 413 | 01-31 |
98995 | 모 바 일| 핸드폰서 4기가(usb)이상은 인식이 [4] | nissan | 413 | 01-31 |
98994 | 소프트웨어| 안랩 safe 삭제 좀 도와주세요. [7] | 소소생 | 372 | 01-31 |
98993 | 윈 도 우| "설정"-"pc설정"에서 "네트워크... [15] | 수학으로의 | 314 | 01-31 |
챗GPT에 질문을 그대로 넣어봤는데
역시 답변 수준은 80점 정도네요.
금방 완벽하게 만들어준줄 알았더니 세세하게 손볼게 좀 있더군요.
결과물입니다.
----------------------------------------------------------------------
@echo off
setlocal ENABLEDELAYEDEXPANSION
set "SCRIPT_NAME=관리자 권한 테스트7.cmd"
set "SCRIPT_PATH=C:\test"
set "TASK_NAME=SkipUAC\%SCRIPT_NAME%"
set "time_HH_MM=16:20"
REM 1. 작업이 존재하는지 확인
schtasks /query /TN "%TASK_NAME%" > nul 2>&1
echo ^^!errorlevel^^! 1 : !errorlevel! - 작업이 존재하는지 확인 결과
if !errorlevel! equ 0 (
REM 1-1. 작업이 이미 존재할 경우 실행
schtasks /run /TN "%TASK_NAME%"
) else (
REM 1-2. 작업이 존재하지 않을 경우 새로운 작업 생성 후 실행
@REM schtasks /create /TN "%TASK_NAME%" /SC ONCE /TR "%SCRIPT_NAME%" /RL HIGHEST /F
schtasks /create /TN "%TASK_NAME%" /SC ONCE /ST "%time_HH_MM%" /TR "%SCRIPT_PATH%\%SCRIPT_NAME%" /RL HIGHEST /F
echo ^^!errorlevel^^! 2 : !errorlevel! - 새로운 작업 생성 결과
if !errorlevel! equ 0 (
schtasks /run /TN "%TASK_NAME%"
) else (
REM 2. 작업 생성 실패 시 MsgBox 출력 (여기서는 간단한 에코로 대체)
echo 작업 생성에 실패했습니다.
mshta vbscript:Execute^("msgbox ""작업 생성에 실패했습니다."",0,""실패"":close"^)
)
)
echo.
echo.
pause
exit /b 0
----------------------------------------------------------------------
윈10 22H 순정에서 실험했고, 잘되는거 같네요.
정확하게 무슨 스케쥴로 매일 한번씩 실행한다거나 하시려는 건가요?
그런거라면 스케쥴 주기는 또 따로 연구해보셔야겠습니다.
저건 그냥 한번만 실행하는 명령으로 보입니다.
저도 cmd창에서 윈도우 스케쥴러 스케쥴 등록해보는건 처음이라 구체적인건 잘 모르거든요.
저거도 에러나서 좀 수정하고...
아무튼 해보니 적절하게 잘 되는듯 합니다.
스케쥴만 조정하는 명령 알아보시면 되겠네요.
이건 챗GPT로 쉽게 가능하리라 생각됩니다.
작업스케쥴러 등록 테스트2.cmd - 작업스케쥴러 등록
관리자 권한 테스트7.cmd - 관리자권한 요구하는 샘플작업