윈 도 우 이런 식으로 작동하는 단일 배치 파일을 만들어주실 수 있으신가요?
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 | - | - |
94014 | 윈 도 우| 윈7 통합이미지 제작에 관한 질문입니다. [2] | 세이군 | 269 | 08-22 |
94013 | 하드웨어| 뭐가 문제일까요? [1] | 윈도우즈3.0 | 269 | 09-30 |
94012 | 소프트웨어| Xyplorer 파일 복사/이동 단축키가 있나요? [1] | 우성이 | 269 | 11-18 |
94011 | 윈 도 우| 컴퓨터에서 일본어가 제대로 보이게 하려면 어떻게 해야 하... [3] | 하얀달 | 269 | 01-10 |
94010 | 윈 도 우| vbs로 실행한 프로세스가 안닫힙니다. [3] | 내찬AEEV | 269 | 04-07 |
94009 | 기 타| 안드로이드 kms에뮬 관련 질문입니다 [2] | 현랑 | 269 | 03-16 |
94008 | 윈 도 우| virtualox에서 윈도우7 인증하는 방법 중 설명이 쉬운 거 ... [4] | brucex | 269 | 03-19 |
94007 | 소프트웨어| sandboxie로 실행한 IE 설정 [2] | 개골동자 | 269 | 03-26 |
94006 | 기 타| 크롬 [2] | 아침천사 | 269 | 07-23 |
94005 | 윈 도 우| 윈도우10 2004 탐색기 메뉴 치 조정 못하나요? [1] | 레전드한화 | 269 | 08-05 |
94004 | 기 타| cdrom 인식문제 [4] | 요동치는세 | 269 | 01-19 |
94003 | 기 타| cmd 창만 있는 백업 복구 만들기 어떻게 할까요? [2] | 슈머슈마 | 269 | 03-08 |
94002 | 소프트웨어| 윈도우10 이벤트 오류 이벤트ID 10016 설정중에... [2] | 파워클래식 | 269 | 03-23 |
94001 | 소프트웨어| 토탈커맨더 한글 폴더 오류? [3] | 귀신 | 269 | 12-29 |
94000 | 소프트웨어| swf -> 동영상 파일 변환 프로그램 [3] | 무저울 | 269 | 07-20 |
93999 | 윈 도 우| 크롬 오류 질문입니다. [3] | 준이오빠 | 269 | 08-27 |
93998 | 윈 도 우| 매번 로그인하라고 창이 뜨는대 [2] | 까투리 | 269 | 10-13 |
93997 | 윈 도 우| 윈도우10 사용자 로그오프 단축키 비활성 되나요 [1] | 치토스 | 269 | 08-01 |
93996 | 윈 도 우| vhd에서 로그인암호........................................ [6] | 카니발 | 269 | 11-22 |
93995 | 소프트웨어| 리눅스와 개인정보 보호 [15] | 스티어 | 269 | 04-11 |
챗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 - 관리자권한 요구하는 샘플작업