윈 도 우 이런 식으로 작동하는 단일 배치 파일을 만들어주실 수 있으신가요?
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 | - | - |
98765 | 윈 도 우| 윈도우 설치할 대 귀찮은 무제......^^ [4] | 어차피 | 498 | 01-06 |
98764 | 윈 도 우| windowsxpe 147 149 [4] | 마로94 | 388 | 01-06 |
98763 | 윈 도 우| 인터넷 업데이트 설치 관련 질문 (장치관리자 > 네트워... [3] | 힘들땐웃쟈 | 227 | 01-06 |
98762 | 하드웨어| 네트워크 공유 좀 여쭙겠습니다. [4] | 바이오스 | 559 | 01-05 |
98761 | 윈 도 우| 서피스프로 4 전원부팅후 현상 [5] | crossway | 348 | 01-05 |
98760 | 하드웨어| M.2 NVME 초기화 방식 [5] | 햇님 | 964 | 01-05 |
98759 | 윈 도 우| 도와 주세요. 2개 모니터 사용하려는데 문제가 생겼습니다. [17] | RECALL | 646 | 01-05 |
98758 | 윈 도 우| 윈도우11 작업표시줄 트레이 아이콘 설정관련 문의 [10] | magoo | 689 | 01-05 |
98757 | 소프트웨어| 이지어스 투두 피시트랜스 사용법에 대해서 질문 드립니다. [1] | 마루나래 | 191 | 01-05 |
98756 | 소프트웨어| vmware 가상파일 열때마다 자꾸 파일이 생기는데.. [4] | 립뽀 | 293 | 01-04 |
98755 | 기 타| 부모님이 포터차키를 잃어버렸는데요. 질문점 [2] | 컴아저씨훈 | 627 | 01-04 |
98754 | 기 타| usb c to 이더넷 젠더로 인터넷 사용 [4] | ccnet | 481 | 01-04 |
98753 | 기 타| cmd 명령어 특정한 파일 삭제 명령어 [2] | jgbyuk | 273 | 01-04 |
98752 | 소프트웨어| VMware 괜찮은 포터블 있을까요?? [4] | 메리아 | 485 | 01-04 |
98751 | 소프트웨어| 백업 유틸 중에서 용량이 다른 디스크에도 복원 되는 것 있... [6] | 좋게멋지게 | 613 | 01-04 |
98750 | 하드웨어| OS영역 SSD 문의드립니다. [8] | 누구십니까 | 481 | 01-04 |
98749 | 윈 도 우| 포맷 없이 10에서 11로 업그레이드 하는 방법 [9] | 한우우웅 | 769 | 01-03 |
98748 | 소프트웨어| 엑셀 파일을 열때 딜레이가 있습니다. [3] | 『ⓖⓤⓝ』 | 371 | 01-03 |
98747 | 윈 도 우| 엣지 팝업 차단 및 리디렉션 설정을 배치파일로 [2] | 개골동자 | 181 | 01-03 |
98746 | 하드웨어| NVMe to USB 인클로저 [4] | 자슬내등사 | 484 | 01-03 |
챗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 - 관리자권한 요구하는 샘플작업