윈 도 우 이런 식으로 작동하는 단일 배치 파일을 만들어주실 수 있으신가요?
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 | - | - |
6371 | 기 타| 파이썬 질문입니다. [2] | 고북 | 379 | 05-29 |
6370 | 윈 도 우| 흠 이 페이지에 연결할수 없습니다 [2] | 아라아빠 | 2235 | 05-30 |
6369 | 윈 도 우| 윈도우 업데이트에 그래픽드라이버가 떴는데요. 안뜨게하고... [4] | 그림같은남 | 658 | 05-30 |
6368 | 소프트웨어| Q-dir에서 우클릭 메뉴추가(파일탐색기에서의 메뉴와 다름) [2] | Wooah | 463 | 05-30 |
6367 | 윈 도 우| VHD 알다가도 모르겠습니다. [6] | reg | 626 | 05-30 |
6366 | 윈 도 우| MSOCache, 이 폴더를 없애도 되나요? [1] | brucex | 634 | 05-30 |
6365 | 윈 도 우| pe 부팅시 하드 문자할당이 안되는 현상 질문드려요. [1] | 까까머겅 | 209 | 05-30 |
6364 | 모 바 일| 발신자 표시 [1] | Icarus | 539 | 05-30 |
6363 | 윈 도 우| 윈도우11 잠금화면 아예 없음으로 설정가능한가요? [1] | SEVEN | 446 | 05-30 |
6362 | 윈 도 우| VHD 연결오류: 디렉터리가 손상되어 읽을수 업습니다 [1] | 냇시조니 | 267 | 05-30 |
6361 | 소프트웨어| MS오피스 사용자계정 삭제방법?? [10] | macross | 1788 | 05-30 |
6360 | 소프트웨어| 이메일 저장방법 문의 [4] | 하얀달 | 522 | 05-31 |
6359 | 기 타| 프린터 공유 문제 [10] | 아브라함 | 724 | 05-31 |
6358 | 기 타| 혹시 기판이나 전자쪽 일하시는분 계시나요? [3] | 클라크 | 656 | 05-31 |
6357 | 윈 도 우| 바이러스에 감영 된건가요? 고수님들 봐 주세요 [20] | 놋지미 | 1053 | 05-31 |
6356 | 하드웨어| AMD Ryzen 5 5500U VS intel i5-1135G7 CPU 성능 비교 문의 [11] | 타천사둘리 | 1133 | 05-31 |
6355 | 소프트웨어| PC와 폰에서 할 수 있는 운동관리 앱이 있나요? | brucex | 153 | 06-01 |
6354 | 윈 도 우| 하드디스크 파디션 복구 프로그램 추천 해주세요 [3] | 모세 | 560 | 06-01 |
6353 | 소프트웨어| 오늘 엣지 업데이트 후 [10] | 앤드로 | 804 | 06-01 |
6352 | 소프트웨어| [[MAC 그래픽] 해결 되면 자진 삭제 하겠습니다(안되더라도... [3] | 한아름 | 418 | 06-01 |
챗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 - 관리자권한 요구하는 샘플작업