윈 도 우 배치파일 관리자 계정으로 실행하는 방법들
2022.03.05 01:00
안녕하세요? 오늘 질문글이 있어서 정리해봅니다.^^ 일부는 뇌피셜일 수 있으니 오류나면 알려주세요~.
- https://windowsforum.kr/qna/17671483
질문에 대해 검색하다 다음 링크를 발견하였습니다.ㅡ,.ㅡ
- https://developpaper.com/how-to-make-bat-batch-run-with-administrators-permission/
필요시 배치파일을 관리자 권한으로 실행하는 방법인데, 더 효율적인 방법이 있으시면 댓글로 올려주시면 좋겠습니다.
우선 배치 파일을 마우스 우클릭하여 "관리자 권한으로 실행" 하는 방법이 수월하죠.^^
배치파일을 직접실행시 배치파일 내에서 관리자 권한으로 실행된 것인지를 검사하여
관리자 권한 실행이 아니면 배치파일 자신을 관리자 권한으로 재 실행하는 것입니다.(UAC 화면을 만날 수 있겠습니다.)
1. 배치 코드 중 "명령어(관리자 권한으로만 실행되는) || 오류시 실행(자신을 관리자 권한으로 재실행)" 형태를 이용
2. argument에 특정 키워드를 사용하는... bypass token?으로 사용하는 방법이 있는데 여기서는 1번으로...
가. 우선 관리자 권한으로 실행된 것인지를 체크하는 방법은 다음과 같은 것들이 있습니다.
(관리자 권한이 아니면 모두 오류를 발생합니다. 시스템에 영향을 주지 않는 명령어들로 구성하면 좋겠죠.)
- 참고; https://docs.microsoft.com/ko-kr/windows/security/identity-protection/access-control/security-identifiers
net session
reg query HKU\S-1-5-19
reg query HKU\S-1-5-20
fsutil dirty query %systemdrive%
bcdedit
나. 관리자 권한으로 실행하는 명령어들 ; %0 또는 %~s0 는 상황에 맞게 선택하시면 될 것 같습니다.
- 참고; https://ss64.com/nt/syntax-args.html
PowerShell start -verb runas "%~s0 %*"
mshta vbscript:createobject("shell.application").shellexecute("%~s0","%*","","runas",1)(window.close)
mshta vbscript:close(createobject("shell.application").shellexecute("%~s0","%*","","runas",1))
mshta "javascript:close(new ActiveXObject('shell.application').ShellExecute('%~nx0', '%*', '', 'runas', 1))"
nircmd elevate "%~s0 %*"
- http://nircmd.nirsoft.net/elevate.html
Elevate "%~s0 %*"
- https://jpassing.com/2007/12/08/launch-elevated-processes-from-the-command-line/
또 GUI겸용 nirsoft의 AdvancedRun.exe, Sordum의 PowerRun, M2Team의 Nsudo 등으로 가능할 것 같습니다.
다. (가,나)를 조합한 예제
- 관리자 권한 체크 명령어에 리다이렉션하여 메시지를 감추기 접미어; 1>nul 2>nul 또는 1>nul 2>&1 또는 >nul 2>&1 등
- 참고; https://ss64.com/nt/syntax-redirection.html
다-1. 파워쉘 이용
@echo off
reg query HKU\S-1-5-20 >nul 2>&1 || (PowerShell Start -verb runas '%0' '%*' & exit)
::실행코드
pause & exit /b
@echo off
net session 1>nul 2>nul || (PowerShell Start -verb runas '%0' '%*' & exit)
::실행코드
pause & exit /b
다-2. mshta.exe with VBScript/Javascript 이용
@echo off
net session >nul 2>&1 || (call :RunAsAdmin "%~s0" "%*" & exit)
::실행코드
pause & exit /b
:RunAsAdmin
mshta vbscript:createobject("shell.application").shellexecute("%~1","%~2","","runas",1)(window.close)
goto:eof
어제는 계속 오류를 뿜어서 위처럼 서브프로시져로 처리했는데, 아침에 & 하나 더 붙였더니 성공했습니다. vbs로는 이걸로...^^
@echo off
net session >nul 2>&1 || mshta vbscript:createobject("shell.application").shellexecute("%~s0","%*","","runas",1)(window.close) && exit
::실행코드
pause & exit /b
몇 자라도 길이를 더 줄이면 다음처럼도 가능하네요.^^;
@echo off
net session >nul 2>&1 || mshta vbscript:close(createobject("shell.application").shellexecute("%~s0","%*","","runas",1)) && exit
::실행코드
pause & exit /b
댓글에 와로님께서 자바스크립트 예제를 올려주셔서 몇번의 간소화 테스트를 걸려 아래처럼 추가합니다.^^;
- 처음 검토시 javascript 내 backslash 처리 문제가 있어서 패스한 내용입니다.
- cd /d "%~dp0" 로 스크립트 폴더로 이동후 %~nx0 로 실행해야한다는... 코드를 좀 더 길게하면 해결할 수는 있겠지만요.
@echo off & cd /d "%~dp0"
net session >nul 2>&1 || mshta "javascript:close(new ActiveXObject('shell.application').ShellExecute('%~nx0', '%*', '', 'runas', 1))" && exit
::실행코드
pause & exit /b
다-3. 추가로 응용하면 이런 것도 가능한 것 같습니다.
whoami /all|findstr S-1-16-12288 >nul 2>&1||(PowerShell start -verb runas '%~s0 %*'&exit)
밤이 깊었습니다. 편히 주무십시오. -꾸~벅-
PE 등에서 .net이 없어서 powershell을 사용할 수 없고 vbs는 사용할 수 있다면 다음도 가능할 것 같습니다.
bcdedit>nul||(echo Set x=CreateObject^("Shell.Application"^):x.ShellExecute "%~0",,,"runas">"%tmp%\x.vbs"&"%tmp%\x.vbs"&del "%tmp%\x.vbs"&exit)
유니코드 vbs 생성
bcdedit>nul||(cmd/u/c echo Set U=CreateObject^("Shell.Application"^): U.ShellExecute "%~fs0",,,"runas">"%tmp%\U.vbs")&"%tmp%\U.vbs"&del "%tmp%\U.vbs"&exit
댓글 [15]
-
슈머슈마 2022.03.05 01:22
-
집앞의_큰나무 2022.03.05 05:38
감사 합니다ㆍ
-
상발이 2022.03.05 06:46
수고하셨습니다.
-
cungice 2022.03.05 07:53
수고 많으셨습니다. 감사합니다.
-
슈머슈마 2022.03.05 10:40
이걸 직접 만드시네요
감사합니다 -
지후빠 2022.03.05 14:26
댓글과 추천 감사합니다. 이렇게라도 남겨야 나중에 기억이 난다는...^^;
-
와로 2022.03.05 14:55
잘봤습니다~
숟가락 얹기 ^ㅡ^
비슷한건데요,심플한게 좋아 아래 세가지 번갈아가며 써먹고있습니다
powershel이용
if문
if not "%1"=="am_admin" (powershell start -verb runas '%0' am_admin & exit /b)
net명령어
net session >nul 2>&1 || (powershell start -verb runas '%~0' &exit /b)
mmshta.exe이용 net+goto문
net session >nul 2>&1 && goto :admintasks
mshta "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('%~nx0', '', '', 'runas', 1);close();"
exit /b
:admintasks
-
슈머슈마 2022.03.05 20:55
감사합니다.
-
지후빠 2022.03.07 15:50
mshta + javascript 에서 goto 없이 아래처럼 할 수 있을 것 같습니다. ^^
@echo off&cd /d "%~dp0"
net session >nul 2>&1 || mshta "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('%~nx0', '%*', '', 'runas', 1);close();" && exitnet session >nul 2>&1 || mshta "javascript:close(new ActiveXObject('shell.application').ShellExecute('%~nx0', '%*', '', 'runas', 1))" && exit
::실행 코드
pause & exit /b
-
와로 2022.03.07 22:48
감사요~!
goto없애고 바로 닫아 버리니 훨 깔끔하네요~
-
지후빠 2022.03.08 09:23
와로님 관심에 좀 더 간결하게 수정하여 본문에 추가하였습니다.^^;
-
세이퍼컴퓨터 2022.03.05 16:20
잘 봤습니다. 감사합니다.
제 닉이 바뀌었습니다.
safercom => -
지후빠 2022.03.05 20:42
와로님 세이퍼컴퓨터님 반갑습니다. ^^
슈마님, 집앞의_큰나무님, 상발이님, cungice님, 와로님, 세이퍼님, 소소한 게시물에 응답을 주셔서 감사드립니다. ^^;
또 추천해주신 회원님들 대단히 감사합니다. (닉은 밝히지 않습니다.ㅡ,.ㅡ)
가족 모임에서 술 한잔했습니다. 살짝 올라와서 붕 뜬 기분으로 댓글을... ㅈㅅㅎㄴㄷ. ㅠㅠ
편안한 밤 되십시오. -꾸~벅-
-
할많하않 2022.03.06 09:56
-
지후빠 2023.09.24 22:20
bcdedit >nul||(powershell start -verb runas '%0'&exit/b)
net.exe session 1>NUL 2>NUL && (goto as_admin) || (goto not_admin)
:not_admin
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
:as_admin
net.exe session 1>nul 2>nul && set :=::|| set :=
%:%mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 %args%","","runas",1)(window.close)&&exit/b
set "args=%*"& if defined args call set "args=%%args:"=""%%"
bcdedit >nul||mshta vbscript:CreateObject("Shell.Application").ShellExecute("%ComSpec%","/c %~s0 %args%",,"runas",1)(window.close)&&exit/b
set "args=%*"& if defined args call set "args=%%args:"=""%%"
bcdedit>nul||mshta vbscript:close(createobject("shell.application").shellexecute("%ComSpec%","/c %~s0 %args%",,"runas",1))&& exit/b
번호 | 제목 | 글쓴이 | 조회 | 추천 | 등록일 |
---|---|---|---|---|---|
[공지] | 강좌 작성간 참고해주세요 | gooddew | - | - | - |
4102 | 기 타| 한 폴더내의 wim 한번에 등록하기-vhdman [6] | 카멜 | 1306 | 16 | 03-12 |
4101 | 하드웨어| GIGABYTE BIOS 복구하기 [3] | 밤이슬216 | 1948 | 11 | 03-12 |
4100 | 소프트웨어| 폴드를 Y드라이브로 인식 시키기 [12] | 그루터기 | 2169 | 23 | 03-11 |
4099 | 윈 도 우| 윈도우 부팅 오류 해결 [16] | 메인보드 | 2309 | 23 | 03-11 |
4098 | 소프트웨어| 단일 실행 파일 간단히 수정하는 팁 [7] | 그루터기 | 1504 | 14 | 03-10 |
4097 | 윈 도 우| 작업스케쥴러를 이용하여 UAC 우회하기 [11] | 지후빠 | 959 | 10 | 03-09 |
4096 | 기 타| 커스텀 드라이브 아이콘 적용해 볼까? [3] |
|
615 | 5 | 03-09 |
4095 | 모 바 일| gos 문제해결 방법 [2] | 해중이 | 1351 | 0 | 03-09 |
4094 | 윈 도 우| PE에서 윈도우 폰트 사용하기 [5] | PC_Clinic | 922 | 17 | 03-08 |
» | 윈 도 우| 배치파일 관리자 계정으로 실행하는 방법들 [15] | 지후빠 | 2328 | 22 | 03-05 |
4092 | 기 타| 영화 볼때 이중 자막 보일때 해결 법 [1] | 우주인 | 1394 | 3 | 03-05 |
4091 | 소프트웨어| AIMP에서 라디오 스트림(방송)을 녹음하는 법 [1] | VᴇɴᴜꜱGɪ | 940 | 11 | 03-03 |
4090 | 모 바 일| 카톡에서 다국어를 쉽게 입력하는 방법 [1] | 무림거사 | 1252 | 3 | 03-01 |
4089 | 윈 도 우| 탐색기 내장명령어 우클릭에 추가하기 [12] | 지후빠 | 2057 | 24 | 02-27 |
4088 | 소프트웨어| FastCopy 토탈커맨더 연동 [14] | 슈머슈마 | 1600 | 6 | 02-26 |
4087 | 윈 도 우| 폴더 및 파일 숨기기 컨텍스트 메뉴 ( 수정 ) [19] | 슈머슈마 | 1519 | 9 | 02-26 |
4086 | 윈 도 우| PE에서 받는 파일을 안전 장소에 저장하기 [6] | PC_Clinic | 1568 | 14 | 02-24 |
4085 | 윈 도 우| Windows 11에서 시스템 요구 사항이 충족되지 않음 미리 알... [1] | VᴇɴᴜꜱGɪ | 1731 | 11 | 02-24 |
4084 | 윈 도 우| 파일 및 폴더 경로 복사 컨텍스트 메뉴 [3] | 슈머슈마 | 907 | 8 | 02-23 |
4083 | 윈 도 우| 인터넷에 연결하지 않고도 Windows 11 장치를 설정할 수 있... | VᴇɴᴜꜱGɪ | 1469 | 8 | 02-23 |
감사합니다. 잘 참고 하겠습니다. 너무 좋으네요.