본문 바로가기

PE, ImageX, DISM

[윈도우 PE] 윈도우 PE 에서 로컬 드라이브에 설치된 윈도우의 버전 정보 확인하기

윈도우 PE 에서 로컬 드라이브에 설치된 윈도우의 버전 정보 확인하기 - 배치 파일

배치 파일에서 윈도우 버전 확인하기 글에서 제공한 배치 파일을 기본으로 하여 윈도우 PE 상에서 아주 단순하게 현재 로컬에 설치된 윈도우의 종류가 무엇인지만 확인해볼 수 있는 배치 파일을 만들어 봤습니다.

CheckVer.cmd : 윈도우 드라이브를 수동으로 지정하여 확인하거나 설치된 윈도우를 자동으로 검색하여 확인하는 것이 가능합니다. 이게 다음 세 가지 배치 파일의 기준이 되는 배치 파일입니다.
 
CheckVer1.cmd : 배치 파일 내에서 지정한 드라이브에 설치된 윈도우의 버전을 확인하는 형식입니다.

CheckVer2.cmd : 배치 파일 실행 후 사용자로부터 입력받은 드라이브에 설치된 윈도우의 버전을 확인하는 형식입니다.

CheckVer3.cmd : 자동으로 시스템의 모든 드라이브를(X: 는 PE 드라이브이기 때문에 제외) 검색한 후 첫 번째로 찾은 윈도우의 버전을 확인하는 형식입니다.


PE 상에서 현재 로컬 드라이브에 설치된 윈도우의 버전을 확인하는 것만 원하신다면 CheckVer.cmd 배치 파일을 사용하시면 됩니다. 아래는 실제로 사용해본 모습입니다.



만약에 어떠한 작업을 위해 배치 파일 내에서 윈도우의 버전을 확인하고 이를 변수로 저장하여 추가적인 작업의 분기를 원하신다면, CheckVer1.cmd 나 CheckVer2.cmd, CheckVer3.cmd 를 기반으로 하여 적절히 배치 파일을 작성하시면 될 듯 합니다.


현재 이 배치 파일들은 로컬 드라이브에 설치된 윈도우들의 상세한 버전 및 빌드 등의 정보를 확인하기 위한 목적보다는 단순하게 윈도우의 버전만 확인한 후 이를 다른 작업의 분기로 활용하는 목적을 위주로 짠 것입니다. 그래서 뭔가 굉장히 허접한 건 어쩔 수가 없네요. ^^; 아무튼 배치 파일을 뜯어보시고 이런 식으로 작업이 이루어진다는 것만 확인하셔서 자신의 배치 파일에 적절히 활용하시면 될 듯 합니다.

아래 단락은 제공해드린 배치 파일이 어떠한 작업을 통해 윈도우의 버전 정보를 확인하는 것인지 그것을 설명한 것입니다.






윈도우 PE 에서 로컬 드라이브에 설치된 윈도우의 버전 정보를 확인하는 방법

1. 레지스트리 하이브 로드를 통해 설치된 윈도우의 버전 정보 확인하기

일단 이 작업의 기초는 아래의 글에서 설명한 내용 중 레지스트리를 통해 확인하는 것에 있습니다.



즉, 윈도우의 버전 정보를 확인하는 것은 레지스트리를 통해 확인할 수 있다는 것만 아시면 됩니다. 그런데 현재는 윈도우 PE 로 부팅한 상태입니다. 그렇기 때문에 PE 상에서 로컬 드라이브에 설치된 윈도우의 하이브를 로드한 후 정보를 확인해야 합니다. 간단하게 PE 상에서 레지스트리 편집기(Regedit.exe)를 실행하신 후 SOFTWARE 하이브를 적절한 키로 로드하여 이렇게 로드된 키 하위의 ...\Microsoft\Windows NT\CurrentVersion 키 정보를 확인하시면 됩니다. 레지스트리 하이브 로드에 대해서 아신다면 별 다른 설명이 없어도 원할하게 정보를 확인하실 수 있을 것으로 믿습니다.



2. Reg 명령을 활용하여 설치된 윈도우의 버전 정보를 추출하기

배치 파일에서 윈도우의 버전 정보를 확인하여 활용한다는 가정하에 Reg 명령을 활용하는 방법을 설명해보도록 하겠습니다. 일단 기본적으로 윈도우 버전 정보에 대한 레지스트리는 HKEY_LOCAL_MACHINE\SOFTWARE (줄여서 HKLM\SOFTWARE) 하위에 있습니다. 해당 레지스트리 키에 해당하는 하이브 파일은 \Windows\System32\Config\SOFTWARE 파일입니다.

그렇기 때문에 만약에 C: 드라이브에 설치된 윈도우의 버전 정보를 확인하고 싶다면 Reg Load 명령을 통해 해당 파일을 임시 레지스트리 키에(글에선 HKLM\Temp 로 함) 먼저 로드해야 합니다.

reg load HKLM\Temp C:\Windows\System32\Config\SOFTWARE



이제 이렇게 임시로 로드한 레지스트리에서 버전 정보를 확인하면 됩니다. 윈도우의 버전 정보는 간단하게 ProductName 을 통해 윈도우의 종류가 무엇인지 확인할 수 있습니다. 하지만 배치 파일에서 변수로 활용하는 것은 ProductName 보다는 CurrentVersion 이 좀 더 활용하기에 좋습니다. 그래서 이 값의 데이터를 Reg Query 명령으로 확인합니다. 레지스트리 경로에 띄어쓰기가 있기 때문에 ""(큰 따옴표) 로 경로를 묶어주는 것을 잊지 마세요.

reg query "HKLM\Temp\Microsoft\Windows NT\CurrentVersion" /v "CurrentVersion"



그러면 보시는 것과 같이 윈도우에 대한 버전을 확인할 수 있습니다. 실제로 배치 파일에서 활용할 때는 위의 명령과 For /F 명령을 조합하여 버전 값을 추출하시면 됩니다. 아래와 같은 식으로 말이죠.

for /F "skip=2 tokens=3 usebackq" %%a in (`reg query "HKLM\Temp\Microsoft\Windows NT\CurrentVersion" /v "CurrentVersion"`) do (
    set CurVer=%%a
)


그러면 위의 스크린 샷을 기준으로 5.1 이라는 버전 값을 추출할 수 있습니다. 5.1 은 윈도우 XP 에 해당하죠.

5.0 = 2000         5.1 = XP        6.0 = 비스타        6.1 = 7        6.2 = 8

이런 식으로 배치 파일에서 현재 로컬 드라이브에 설치된 윈도우의 버전을 추출하여 변수로 저장한 후 적절히 활용하면 됩니다. 이후의 배치 파일 작업은 이제 알아서 짜셔야겠죠? 참고로 동일한 방식으로 에디션 정보 [EditionID(윈도우 비스타 이후)], 서비스팩 정보 [CSDVersion] 등도 추출이 가능합니다.


마지막으로 필요한 정보의 추출을 마쳤으면 이후 로드한 하이브 파일이 다른 어떠한 작업에 영향을 미치지 않도록 다른 작업 전 먼저 로드했던 하이브 파일을 언로드해주시면 됩니다.

reg unload HKLM\Temp



전체적으로 이와 같은 방식으로 버전 정보를 추출하여 변수로 저장 활용하시면 됩니다.


한 가지 더 첨언하자면 비트 버전 확인의 경우에는 만약에 오직 레지스트리 정보만을 통해 비트 버전을 확인하고자 한다면 BuildLabEX 값의 데이터를 다시 분해하여 [x86fre = 32비트 버전] [amd64fre = 64비트 버전] 으로 확인을 해야 하기 때문에 작업이 좀 귀찮아지는 문제가 있습니다. 그래서 비트 버전 정보는 레지스트리보다는 단순하게 \Windows\SysWOW64 폴더의 존재 유무의 판별로 좀 더 간단하게 확인이 가능하기 때문에 굳이 레지스트리에서 알아낼 필요는 없을 것 같습니다. 제가 이번 글에서 제공한 배치 파일에서는 해당 방법을 사용하고 있습니다.

아무튼, 단순하게 확인을 원할 때는 Regedit 를 통해 그래픽 인터페이스에서 확인을 하시고, 배치 파일에서 버전 정보를 토대로 어떠한 작업의 분기를 원한다면 현재 단락에서 설명한 것과 같은 방식으로 적절히 원하는 정보를 Reg 명령을 통해 수집하시면 될 듯 합니다. 질문이 들어와서 간단하게 정리해보았습니다. 이상입니다. ^^