윈 도 우 VHD 부트에서 부팅된 VHD 파일경로 추출과 활용 스크립트

2020.05.31 21:37

Neutrino 조회:653 추천:5

WTG 등 VHD 부팅에서는 부트환경에 따라 vhd가 있는 드라이브명이 수시로 바뀌지만

윈도우에서는 이를 확인할수 있는 환경변수를 별도로 제공하지 않습니다.

이때 vhd와 함께 portable을 함께 운영하는 경우 부트 환경에 따라 볼륨명이 바뀌어 난처할수 있는데

아래 스크립트는 실제 부트된 vhd 파일의 절대경로를 추출하여 드라이브명으로 Portable 변수를 등록해줍니다.


@echo off
net session >nul 2>&1 && (set previlige=/m &set reg_env="HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment") || (set previlige= &set reg_env=HKCU\Environment)
Call :GET_VHD
echo.
If %errorlevel% NEQ 0 Call :Msg %errorlevel% -FAIL- 16 &Goto :EOF
For /f "tokens=3" %%a in ('reg query %reg_env% /v VHD') do (set VHD=%%a)
set Portable=%VHD:~0,2%\Portable& :포터블 위치가 다르면 수정시 공백주의.
setx %previlige% Portable %Portable%
Call :Msg 0 -SUCCESS- 64
Goto :EOF

:GET_VHD
(echo $i=23; $j=20
echo Import-Module %SystemRoot%\DevicePath.psm1
echo If ^^^(-Not $?^^^) {Exit 100}
echo $dev=Get-Disk ^^^| Select-Object Location ^^^|findstr \Device
echo If ^^^(-Not $?^^^) {Exit 101}
echo While ^^^($dev.SubString^^^($i, 1^^^) -eq '\'^^^) {$i++}
echo $dev1=$dev.substring^^^(0,$i-1^^^)
echo $dev2=$dev.substring^^^($i^^^)
echo $drv=DevicePath ^^^|findstr $dev1
echo If ^^^(-Not $?^^^) {Exit 102}
echo $drv=$drv.replace^^^($dev1, ""^^^).trim^^^(^^^)
echo $VHD=^^^(attrib ^^^($drv + '\' + $dev2^^^)^^^).substring^^^($j^^^).trim^^^(^^^)
echo reg add %reg_env% /v VHD /d $VHD /f ^^^|out-null
) | powershell -ExecutionPolicy bypass -NoLogo
Exit /b

:Msg
If %1==0 set msg=이 VHD 시스템은 %VHD% 파일로 부팅되었고 환경변수 VHD 그리고 Portable 이 등록되었습니다.
If %1==100 set msg=DevicePath.psm1 모듈을 %SystemRoot% 위치에 복사후 실행하세요.
If %1==101 set msg=이 시스템은 VHD 부팅된 시스템이 아닌것 같습니다
If %1==102 set msg=죄송합니다. VHD 파일을 추출해내는데 실패했습니다
(echo Add-Type -AssemblyName PresentationCore,PresentationFramework
 echo [System.Windows.MessageBox]::Show^^^('%msg%' ,'%2', 0, %3^^^)
) | powershell >nul
Exit /b

위 내용을 .cmd로 저장후 콘솔창에서 실행 또는 서비스로 등록할수 있습니다.

서비스로 등록하면 드라이브가 변경돼도 환경변수 값이 자동으로 갱신됩니다.

파워쉘 함수가 외부모듈로 작성되어 첨부한 DevicePath.psm1 모듈을 Windows 폴더에 넣어줘야 실행됩니다.

 

먼저 Call :GET_VHD 명령으로 현재 부팅된 .vhd 경로를 추출 %VHD% 환경변수로 저장되며

이어 이 값의 첫자를 잘라 드라이브 문자로 빼서 %Portable% 변수를 조합 등록합니다.

실행시 관리자권한이 있으면 모든 사용자에 적용되는 시스템 변수로 저장되고 아니면 사용자 변수로 저장됩니다.

 

※ CMD에서 테스트후 서비스로 등록할때는 아래쪽 :Msg 블록내의 모든줄을 삭제하고 맨 끝의 Exit/b만 남기세요.

이 스크립트는  vhd 부트 환경에서 호스트 드라이브에 Portable 폴더를 보관한 경우 유효합니다.

%Portable% 하위함목을 PATH에 추가할때는 set path=%PATH%;%%Portable%%\Programs 처럼 %기호를 두번써야 합니다.

환경변수는 최초 등록시 기존 콘솔창에서는 보이지 않고 새 콘솔창부터 적용됩니다.

이는 콘솔이 시작될때 모든 환경변수를 일괄 불러오기 때문으로 나중에 추가된건 레지에서 뽑아옵니다.

 

'연결 프로그램' 에서 %Portable% 경로 적용을 위해서는 일단 일반적으로 등록후 레지스트리 수정을 거처야 합니다.

예를들어 .torrent 가 일반적으로 등록된 경우

HKCR\.torrent 에서 연결 명칭을 찾아 (torrent_auto_file) 다시 HKCR\torrent_auto_file 을 찾아가서

shell →open →command 에서 기본값을 편집, 등록된 경로중 드라이브명을 포함한 앞부분을 %Portable%로 수정합니다.

번호 제목 글쓴이 조회 추천 등록일
[공지] 강좌 작성간 참고해주세요 gooddew - - -
3747 소프트웨어| YUMI – Multiboot USB Creator (멀티 부트 USB 제작기) [5] VenusGirl 2228 11 06-10
3746 윈 도 우| DISM++ 를 이용해서 윈도우 10 설치하기 [18] gooddew 3104 21 06-07
3745 서버 / IT| CentOS 8 기본 설치 안내서 [2] VenusGirl 1193 5 06-07
3744 윈 도 우| 나만의 복구 솔루션 만들기 -1부- (UEFI) [34] gooddew 4884 31 06-06
3743 윈 도 우| CMD 배치파일을 로컬 시스템 서비스로 등록 [5] Neutrino 1278 8 06-05
3742 소프트웨어| Ventoy 4GB이상의 이미지 혹시나 해서 해보니 재미난 상황... [9] 비비씨씨 2608 7 06-04
3741 하드웨어| [Tip] EU 플러그 -> KS 플러그 변환 [7] asklee 1463 4 06-02
3740 소프트웨어| 이런 식의 포터블 런처는 어떨까요?(프로그램 있슴.) [6] 타락천사둘 1676 14 06-02
3739 윈 도 우| VHD 동적확장-고정간 변환 및 크기 변경 [1] 신세계 791 4 06-01
3738 소프트웨어| [내용 업데이트] 무료로 내 PC(또는 폰,TV BOX)를 영화 감... [16] windowsand 3172 11 05-31
» 윈 도 우| VHD 부트에서 부팅된 VHD 파일경로 추출과 활용 스크립트 [2] update Neutrino 653 5 05-31
3736 서버 / IT| 손쉽게 멀티부팅용 USB 만들기. (내용추가) [51] 디폴트 4491 59 05-31
3735 윈 도 우| LG 복원 솔류션 이식하기 (UEFI) [14] gooddew 2331 14 05-30
3734 기 타| 노래 무료로 평생 듣는 방법 [27] windowsand 4710 4 05-27
3733 소프트웨어| vmware workstation 에서 그나마 게임을 원할하게 굴리기 ... [4] 모노스타일 1261 4 05-26
3732 윈 도 우| LG Recovery(UEFI)에 대해서.... [9] 밤이슬216 2664 13 05-25
3731 소프트웨어| 한컴오피스 2020 교육기관용 워터마크 지우기 [15] 삿갓구름 5263 15 05-23
3730 윈 도 우| 일반 PC 에 삼성 복원 솔루션 이식하기 (UEFI) [50] gooddew 5765 41 05-21
3729 윈 도 우| [팁] 윈도우 탐색기 자동 새로고침에 대한 간단한 팁. [5] 메리아 1730 2 05-19
3728 윈 도 우| SRS7에 대해서..좀 더 자세하게..일반 PC용으로.... [14] 밤이슬216 2128 5 05-18
XE1.11.6 Layout1.4.8