강좌 / 팁

윈 도 우 배치파일 관리자 계정으로 실행하는 방법들

2022.03.05 01:00

지후빠 조회:2263 추천:21

안녕하세요? 오늘 질문글이 있어서 정리해봅니다.^^ 일부는 뇌피셜일 수 있으니 오류나면 알려주세요~.

- 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

 

번호 제목 글쓴이 조회 추천 등록일
[공지] 강좌 작성간 참고해주세요 gooddew - - -
3889 소프트웨어| ★ Premiere CS6 강좌 10 오디오 조절 방법 [2] murimgasa 1978 1 09-29
3888 기 타| Y2K 유사 문제 - 2038년 문제와 GPS WNRO [7] asklee 1979 1 11-02
3887 윈 도 우| 초보가 초보에게 알려주는Win10 XPE에 그래픽 드라이버 적... [1] 멋진거지 1984 3 04-26
3886 Windows 11 버전 24H2 다운로드 및 설치 방법 VᴇɴᴜꜱGɪ 1984 1 09-03
3885 윈 도 우| CMD 배치파일을 로컬 시스템 서비스로 등록 [8] Neutrino 1989 9 06-05
3884 윈 도 우| Windows 11 (22623.741) 2022.10.11 베타 채널 업데이트 방법 [3] 타천사둘리 1993 5 10-11
3883 윈 도 우| 윈도우에서 ELAM (Early Launch Anti-malware) 비활성화 방... Star★Bros 1997 1 02-18
3882 윈 도 우| Windows 11에 새 바로 가기 키 [2] VₑₙᵤₛG 1997 1 07-10
3881 소프트웨어| vmware workstation 에서 그나마 게임을 원할하게 굴리기 ... [3] 모노스타일 1998 4 05-26
3880 하드웨어| SSD 2개로 레이드 0 구성하기 [7] 슈퍼사이즈 1999 6 09-27
3879 윈 도 우| 저해상도 게임 실행시 각종 창 크기 작아지는 증상 해결 방법 [3] 오호라7 1999 3 05-12
3878 소프트웨어| [초보용] 7ZIP (7z) 파일 압축해제하는 방법 [1] 무림거사 2001 3 07-05
3877 윈 도 우| 언어만 변경하면 코타나를 사용할수 있다??? [5] windowsand 2001 2 07-13
3876 윈 도 우| VHD 에 ISO 이용하여 Zorin-OS 설치하기(윈도우 설치도 동... [5] 타천사둘리 2005 8 11-10
3875 소프트웨어| 구글 크롬 창이 갑자기 커져 버렸을때.. WhiteFox 2009 0 11-07
3874 윈 도 우| Windows 11의 시작 메뉴에서 권장 항목을 숨기는 방법 [1] VₑₙᵤₛG 2010 5 08-17
3873 윈 도 우| PowerShell을 사용하여 Windows Defender 제어된 폴더 사용... [1] 7850 2011 2 07-05
3872 하드웨어| HDD Firmware 를 복사해서 데이터 복구하기 [4] gooddew 2013 13 05-09
3871 소프트웨어| vmware core 설정 [10] 카이지 2013 6 10-30
3870 윈 도 우| [1탄] install.wim 누적 업데이트 통합 하기 [26] 무월 2013 45 08-19
XE1.11.6 Layout1.4.8