윈 도 우 배치파일 관리자 계정으로 실행하는 방법들
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
PUSHD %~DP0
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
번호 | 제목 | 글쓴이 | 조회 | 추천 | 등록일 |
---|---|---|---|---|---|
[공지] | 강좌 작성간 참고해주세요 | gooddew | - | - | - |
4300 | 윈 도 우| 파일을 디펜더가 차단할때, 파워쉘로 허용시키기 [7] |
|
1729 | 14 | 02-06 |
4299 | 윈 도 우| 강제로 Internet Explorer 열기 스크립트 [13] | 사랑이7 | 2841 | 20 | 02-05 |
4298 | 윈 도 우| 윈도우11 $OEM$소스 및 WinNTSetup 응용 설치! [40] | 무월 | 3462 | 49 | 02-03 |
4297 | 윈 도 우| 윈도우 부팅시 신용카드 정보를 요구할때 넘어가기 [5] | 고장난우주 | 2415 | 1 | 02-01 |
4296 | 윈 도 우| 감춰진 모든 고급 전원옵션 표시하기 [4] |
|
2130 | 13 | 01-30 |
4295 | 윈 도 우| 특정 폴더 내 임의 파일/폴더 선택 배치 함수 [10] | 지후빠 | 697 | 16 | 01-29 |
4294 | 윈 도 우| 프로그램 필요없이, 윈도우 설치 USB 만들기 [16] |
|
5664 | 27 | 01-18 |
4293 | 기 타| CMD BAT 를 UTF8 모드로 사용 [13] | 입니다 | 1660 | 22 | 01-16 |
4292 | 윈 도 우| 폴더 깊이 제한하여 파일,폴더 찾기 배치 함수 [11] | 지후빠 | 1275 | 15 | 01-12 |
4291 | 윈 도 우| 배치파일 명령어 > nul 2>&1 해석 [6] | 컨피그 | 1239 | 12 | 01-11 |
4290 | 윈 도 우| BCD 백업 및 복구 프로그램 입니다 [14] | 지룡자 | 2789 | 41 | 01-10 |
4289 | 하드웨어| Windows 11에서 Realtek 오디오 드라이버를 쉽게 수정하는 ... [6] | VᴇɴᴜꜱGɪ | 2839 | 7 | 01-04 |
4288 | 하드웨어| USB 키패드를 매크로 키패드로 사용하기 [7] | 지후빠 | 1898 | 15 | 01-02 |
4287 | 윈 도 우| 삭제할수 없는 시스템 앱, 삭제 방법 [8] |
|
3512 | 13 | 01-01 |
4286 | 소프트웨어| Wise care 365 사용시 주의점 [5] | heykevin | 2512 | 9 | 12-30 |
4285 | 윈 도 우| 포맷없이 , diskpart 작업 없이 기존 디스크에 EFI 파티션 ... [13] | heykevin | 3407 | 23 | 12-30 |
4284 | 윈 도 우| Chromium 기반 브라우저 OS 지원 종료 예정 알림 제거 자동... [8] | 녹색조각 | 1644 | 15 | 12-29 |
4283 | 윈 도 우| IP 주소 변경 배치(DSN/WINS) [20] | 무월 | 3591 | 30 | 12-28 |
4282 | 윈 도 우| Microsoft Update 카탈로그 (업데이트 항목 . 빨리 받아 적... [3] | heykevin | 1387 | 7 | 12-28 |
4281 | 하드웨어| ASROCK 메인보드에 관하여..... [5] | 밤이슬216 | 2555 | 5 | 12-25 |
감사합니다. 잘 참고 하겠습니다. 너무 좋으네요.