공유 블로그

모든 Batch파일은 악의적으로 사용하지 않을 것을 권고드립니다!!

 

코드부터 보시죠~

 

(복붙 하면 코드가 깨져서 나올 수 있으니 아래 첨부 파일 해두었습니다.)

(vscode로 진행하는 것을 추천드립니다. [접기 기능 사용 가능])

::.bat 기본 세팅 값
    ::모든 명령줄 끄기
    @echo off
    ::UTF8로 설정
    @chcp 65001
    ::모든 명령줄 clean
    cls


goto :CheckUAC

::관리자 권한 취득하기
	:CheckUAC
		::관리자 권한 체크
		>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
		if '%errorlevel%' NEQ '0' (
			goto :UACAccess
		) else ( 
			goto :Done 
		)
	:UACAccess
		cls
		echo.
		echo --- 관리자 권한이 없습니다. ---
		echo "ENTER"키(또는 "예" 버튼)를 눌러 관리자 권한을 취득 합니다...
		echo [참고 : 관리자 권한이 없기때문에 한번더 실행됩니다.]
		timeout 5 >nul
		::pause >nul
		
		::관리자 권한 주기위해 VBS파일을 생성
		echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
		echo UAC.ShellExecute "cmd", "/c """"%~f0"" """ + Wscript.Arguments.Item(0) + """ ""%user%""""", "%CD%", "runas", 1 >> "%temp%\getadmin.vbs"
		"%temp%\getadmin.vbs" "%file%"

		::관리자 권한 완료후 VBS파일 삭제
		del "%temp%\getadmin.vbs"
		exit /b
	:Done
		cls
		echo.
		echo --- 관리자 권한을 취득하였습니다. ---
		echo 1초후에 다음설치 단계로 이동...
		timeout 1

		::여기서부터 권리자 권한 필요한 명령어 입력
        
        pause
		exit

batch파일은 항상 띄어쓰기 주의하십시오!!(파워셀에서 실행하지 말 것...)

 

 

파일 첨부

압축본 올려드립니다.

필요하신 분은 공부용, 참고용으로 사용하세요

test.zip
0.00MB

(복붙 하면 코드가 깨져서 나올 수 있으니 첨부 파일 해두었습니다.)

(vscode로 진행하는 것을 추천드립니다. [접기 기능 사용 가능])

 

 

프로그램 구성도(흐름도)

자세히 보고싶으면 다운 받아서 보는것을 추천...(이미지에 우클릭하면 다운로드가능)

 

LOOP는 전 내용에서 다뤘으니 패스

이전 내용 : https://all-share-source-code.tistory.com/72

 

Batch파일 "Y(es)"입력 받을때 까지 Loop

모든 Batch파일은 악의적으로 사용하지 않을 것을 권고드립니다!! 단도직입적으로 코드부터 가겠습니다. (선 코드 후 설명) (코드가 깨져서 나오니 아래 첨부 파일 해두었습니다.) (vscode로 진행하

all-share-source-code.tistory.com

 

위 코드 설명

1. :CheckUAC로 이동합니다.(이용하기 쉬우라고 별도로 블락함)

 

2-1. if문에 %errorlevel%이 0인지 체크합니다.('NEQ'는 '=='와 같은 용어)

 

2-2-1. if문이 참이면 :UACAccess로 이동합니다.(관리자 권한 취득하로 이동)

2-2-2. 설명과 함께 5초 대기후에 권리자 권한 취득하기 위한 VBS코드 작성합니다.('>nul'은 명령줄에 표시 안 함)

2-2-3. echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" 파일 작성합니다.('echo "내용" > "c:\저장\위치.vbs"' 파일 쓰기 즉 UNIX&Linux의 'cat >'과 유사 또는 'echo'동일)

2-2-4. echo UAC.ShellExecute "cmd""/c """"%~f0"" """ + Wscript.Arguments.Item(0) + """ ""%user%""""""%CD%""runas"1 >> "%temp%\getadmin.vbs"이내용을 기존 파일에 내용 추가합니다.('echo "내용" >> "c:\저장\위치.vbs"' 파일 내용 추가 즉 UNIX&Linux의 'cat >'과 유사 또는 'echo'동일)

2-2-5. %temp%에 'getadmin.vbs'실행합니다.(위 코드 내용 : "%temp%\getadmin.vbs" "%file%")

2-2-6. 작업이 완료되면 %temp%에 getadmin.vbs를 삭제합니다.('%temp%'위치는 'C:\Users\계정명\AppData\Local\Temp'임[실행창에 %temp% 입력해볼것])

 

2-3-1. if문이 거짓이면 :Done으로 이동합니다.(관리자 권한이 이미 취득됨)

2-3-2. 설명과 함께 1초를 대기합니다.

2-3-3. '::여기서부터 권리자 권한 필요한 명령어 입력' 이다음부터 코드 입력하면 됩니다.

2-3-4. 아무 키나 입력하면 배치파일을 종료합니다.

 

참고 : https://stackoverflow.com/questions/31069891/passing-unicode-parameters-to-windows-bat-file-when-rerunning-it


VBS 추가 설명입니다.

 

작성된 VBS파일 위치는 '%temp%'위치 즉 'C:\Users\계정명\AppData\Local\Temp'에 있습니다.

(실행창에 %temp% 입력해볼것[cmd 창 말고])

Set UAC = CreateObject("Shell.Application") 
UAC.ShellExecute "cmd", "/c """"D:\Users\USER\Downloads\test\test.bat"" """ + Wscript.Arguments.Item(0) + """ """"""", "D:\Users\USER\Downloads\test", "runas", 1

저는 위와 같이 VBS코드가 작성이 되었습니다. [사용자마다 다르게 나올 수 있음]

 

위에 대한 설명을 하자면,

Shell.Application라는 API를 가져오게 됩니다.

해당 API는 Microsoft에서 제공됩니다.

출처 : https://docs.microsoft.com/en-us/windows/win32/shell/shell-application

 

API에서 ShellExecute라는 함수를 사용하게 됩니다. [아래 이미지는 함수의 매개변수에 대한 설명]

출처 : https://docs.microsoft.com/en-us/windows/win32/shell/shell-shellexecute

위 이미지 간략하게 설명을 하자면,

ShellExecute("실행파일", "타깃 파일", "실행시킬 위치", "어떻게 실행할 건지", 표시 방법)으로 볼 수 있습니다.

[','(콤마)로 구분됨]

 

다시 VBS 생성된 코드를 보시면

                  1.                         2.
UAC.ShellExecute "cmd", "/c """"D:\Users\USER\Downloads\test\test.bat"" """ + Wscript.Arguments.Item(0) + """ "" """" ", 
        3.                         4.    5.
"D:\Users\USER\Downloads\test", "runas", 1

로 볼 수 있는데 일단 여기서 어려운 부분만 설명하자면, '2.'에서 Wscript.Arguments.Item(0) 입니다.

이 부분은 vbs의 매개변수를 가져오는 함수입니다.

 

(내용 생략...)

"%temp%\getadmin.vbs" "%file%"

(내용 생략...)

[흐름도 참조]

이 부분에서 %file%을 가져오게 됩니다. [%file% 이 정의가 안되어 있기 때문에 의미기 없습니다.]

그리고 큰 따옴표를 모두 제거하면 남는 건 D:\Users\USER\Downloads\test\test.bat만 남게 되며,

마지막으로 cmd의 /c 옵션을 주게 됩니다.

 

여기서 '4.'에 runas인 UAC모드로

다시 배치파일을 실행하게 되어

관리자 권한을 얻을 수 있는 표시가 나오게 되는 겁니다.

출처 : https://docs.microsoft.com/en-us/windows/win32/shell/launch

 

마지막으로 '5.'인 어떻게 보여줄 건지에 대한 설명입니다.

출처 : https://docs.microsoft.com/ko-kr/windows/win32/shell/shell-shellexecute

해당 번호를 입력하면 그에 맞게 보여주게 되는데

위 코드 같은 경우에는 '1'인 CMD창과 동일하게 설정되어 보여주게 됩니다.

 

이로써 VBS에서 관리자 권한을 얻으면서 다시 배치파일로 넘어가게 되는 원리입니다.

 

 

참고로 exit 아래의 코드는 모두 인식 안되니 그아래 코드를 입력하지 마세요...

(설명 같은 거 써놓는 건 나쁘지 않겠네요ㅎㅎ;;)

 

추가 내용

더보기

사용자 계정 컨트롤 최하로 설정할 경우

허용 메시지 안 나오니 참고하시면 되겠습니다.

 

 

 

 

확인 영상

https://youtu.be/hQog3z9_Pz8

 

 

실행 버그 해결(22/07/27 추가됨)

더보기

이번에 알게 된 사실로 실행 버그가 있었습니다.

(추가 내용에서 사용자 계정 컨트롤을 최하로 사용하시고 쓰셨던 분들 한해서 생김)

 

 계속 이창에서 실행이 안 되는 버그가 있습니다.

 

해결방법은 간단합니다.

administrator 계정 활성화시켜 접속해줍니다.

 

admin계정에서 사용자 계정 컨트롤 설정을 기본값으로 변경해 줍니다.

재부팅 후에 다시 배치파일을 실행해 봅니다.

권한 요청이 잘 나온다면

 

다시 계정 컨트롤 최하로 설정하고

재부팅 후 다시 실행해 봅니다.

그럼 잘 실행되는 것을 볼 수 있습니다.

그리고 선택사항으로 admin계정 비활성화하셔도 됩니다.

끝으로 본계정으로 넘어와서 되는지 확인하시면 되겠습니다.


만약 소속 그룹이 Users(사용자)로 되어있다면 

 

아래와 같이 소속 그룹인 Adminstrators(관리자)에게 권한을 요청하게 됩니다.

 따라서 소속 그룹을 Users(사용자)보다는 Adminstrators(관리자)로 사용하시는 것을 추천드립니다.

 

 

다음 작업

지금 쓰고 있는 블로그는 "https://all-share-source-code.tistory.com/10"내용을 업데이트하기 위한 작업이며

다음 batch 프로젝트는 "https://all-share-source-code.tistory.com/40"입니다.(이 또한 업데이트 관련 내용입니다.)

또한 작성한 "안드로이드 WIFI 또는 USB로 화면 미러링 -> https://all-share-source-code.tistory.com/74"에서도 사용되었습니다.

 

많이 이용 부탁드립니다~

 

관련 글

  1. 2020.07.30 - [OS/WINDOWS] - Windows 포맷후 전에 깔려있는 프로그램들 한번에 설치 방법 {업데이트중...}
  2. 2021.08.27 - [Project/Batch] - 관리자권한 실행 안하고 Batch파일로 관리자권한 취득하기
  3. 2021.08.26 - [Project/Batch] - Batch파일 "Y(es)"입력 받을때 까지 Loop
  4. 2021.09.08 - [Project/Batch] - Batch파일 Refresh(setx 인식) 하기

 

 

최종본

https://all-share-source-code.tistory.com/41

 

Windows 포맷후 전에 깔려있는 프로그램들 한번에 자동 설치 방법 Ver2

아직 버그가 있어 이때까지 만든 영상 올려 봅니다.( 시간 날때만 틈틈이 만들어 재작이 좀 늦네요.ㅎㅎ;; ) 내용에 참고한 링크들 https://all-share-source-code.tistory.com/40 https://all-share-source-code...

all-share-source-code.tistory.com

 

공유하기

facebook twitter kakaoTalk naver band kakaostory Copy URL