Microsoft MVP성태의 닷넷 이야기
Windows: 127. Convert-WindowsImage.ps1 사용 방법 정리 [링크 복사], [링크+제목 복사],
조회: 14137
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

Convert-WindowsImage.ps1 사용 방법 정리

WIM 이미지를 vhd 설치 파일로 변환해주는 PowerShell 스크립트가 있습니다.

Convert-WindowsImage.ps1 - WIM2VHD for Windows 10 (also Windows 8 and 8.1)
; https://gallery.technet.microsoft.com/scriptcenter/Convert-WindowsImageps1-0fe23a8f
; https://www.powershellgallery.com/packages/Convert-WindowsImage/10.0

이 스크립트를 다음과 같은 식으로 그냥 사용하시면 아무 동작도 안 합니다.

PS C:\temp> .\Convert-WindowsImage.ps1 -WIM 'c:\temp\nanoserver\NanoServer.wim' -VHD 'c:\temp\vhd\nanoserver.vhd' -DiskType Fixed -VHDFormat VHD -SizeBytes 10GB -Edition 1

PS C:\temp> 

왜냐하면 Convert-WindowsImage.ps1은 내부에서 Convert-WindowsImage 메서드를 정의만 해두기 때문입니다. 따라서, 다음과 같이 ImportModule을 한 후에 Convert-WindowsImage 메서드를 호출하는 식으로 사용해야 합니다.

Import-Module .\Convert-WindowsImage.ps1

Convert-WindowsImage -WIM 'c:\temp\nanoserver\NanoServer.wim' -VHD 'c:\temp\vhd\nanoserver.vhd' -DiskType Fixed -VHDFormat VHD -SizeBytes 10GB -Edition 1




그런데 다음과 같이 명령을 내려 보면, 웬일인지 예외가 발생합니다.

PS C:\temp> Convert-WindowsImage -WIM 'c:\temp\nanoserver\NanoServer.wim' -VHD 'c:\temp\vhd\nanoserver.vhd' -DiskType Fixed -VHDFormat VHD -SizeBytes 10GB -Edition 1

Windows(R) Image to Virtual Hard Disk Converter for Windows(R) 10
Copyright (C) Microsoft Corporation.  All rights reserved.
Version 10.0.9000.0.amd64fre.fbl_core1_hyp_dev(mikekol).141224-3000 Beta

ERROR  : Cannot convert the "System.String[]" value of type "System.String[]" to type "System.Int32".
INFO   : Log folder is %USERPROFILE%\AppData\Local\Temp\Convert-WindowsImage\6977f150-4e06-4eff-8123-d35b0e37e8e2

INFO   : Closing Windows image...
INFO   : Done.

예외가 발생하는 위치는 Convert-WindowsImage.ps1의 $Edition을 열거하는 코드인데,

$Edition | ForEach-Object -Process {

    $Edition = $PSItem
    
    if ([Int32]::TryParse($Edition, [ref]$null)) {
        $openImage = $openWim[[Int32]$Edition]  // 예외 발생
    } else {
        $openImage = $openWim[$Edition]
    }    

    if ($null -eq $openImage) {
        Write-W2VError "The specified edition does not appear to exist in the specified WIM."
        Write-W2VError "Valid edition names are:"
        $openWim.Images | %{ Write-W2VError "  $($_.ImageFlags)" }
        throw
    }

    ...[생략]...
}

"$Edition = $PSItem" 설정하면서 열거형 변수가 $PSItem으로 겹쳐써져 오류가 발생하는 듯합니다. 그래서 다음과 같이 바꿔주면 정상적으로 동작합니다.

$Edition | ForEach-Object -Process {

    $nEdition = $PSItem
    
    if ([Int32]::TryParse($Edition, [ref]$null)) {
        $openImage = $openWim[[Int32]$nEdition]
    } else {
        $openImage = $openWim[$Edition]
    }    

    if ($null -eq $openImage) {
        Write-W2VError "The specified edition does not appear to exist in the specified WIM."
        Write-W2VError "Valid edition names are:"
        $openWim.Images | %{ Write-W2VError "  $($_.ImageFlags)" }
        throw
    }

    ...[생략]...
}




그 외에, Edition 인자로 숫자(인덱스) 말고 이름을 주는 방법이 있습니다. 이를 위해 WIM 파일에 포함된 Edition 이름을 알아야 하는데, 이는 imagex.exe를 이용해 나열할 수 있습니다.

C:\Program Files (x86)\Windows Kits\10\Tools\bin\i386>imagex /info e:\temp\NanoServer\NanoServer.wim

ImageX Tool for Windows
Copyright (C) Microsoft Corp. All rights reserved.
Version: 6.1.7600.16385

WIM Information:
----------------
Path:        e:\temp\NanoServer\NanoServer.wim
GUID:        {371880ba-0afa-4c84-a233-f1ba2d142e09}
Image Count: 2
Compression: LZX
Part Number: 1/1
Attributes:  0x8
             Relative path junction


Available Image Choices:
------------------------
<WIM>
  <TOTALBYTES>172753493</TOTALBYTES>
  <IMAGE INDEX="1">
    ...[생략]...
    <WINDOWS>
      <ARCH>9</ARCH>
      <PRODUCTNAME>Microsoft® Windows® Operating System</PRODUCTNAME>
      <EDITIONID>ServerStandardNano</EDITIONID>
      ...[생략]...
    </WINDOWS>
    <NAME>Windows Server 2016 SERVERSTANDARDNANO</NAME>
  </IMAGE>
  <IMAGE INDEX="2">
    ...[생략]...
    <WINDOWS>
      <ARCH>9</ARCH>
      <PRODUCTNAME>Microsoft® Windows® Operating System</PRODUCTNAME>
      <EDITIONID>ServerDatacenterNano</EDITIONID>
      ...[생략]...
    </WINDOWS>
    <NAME>Windows Server 2016 SERVERDATACENTERNANO</NAME>
  </IMAGE>
</WIM>

따라서 실행은 이렇게 하시면 됩니다.

Convert-WindowsImage -WIM 'e:\temp\nanoserver\NanoServer.wim' -VHD 'e:\temp\vhd\nanoserver.vhd' -DiskType Fixed -VHDFormat VHD -SizeBytes 10GB -Edition "Windows Server 2016 SERVERSTANDARDNANO"




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 7/17/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13613정성태5/1/2024103닷넷: 2253. C# - Video Capture 장치(Camera) 열거 및 지원 포맷 조회파일 다운로드1
13612정성태4/30/202489오류 유형: 902. Visual Studio - error MSB3021: Unable to copy file
13611정성태4/29/2024248닷넷: 2252. C# - GUID 타입 전용의 UnmanagedType.LPStruct - 두 번째 이야기파일 다운로드1
13610정성태4/28/2024360닷넷: 2251. C# - 제네릭 인자를 가진 타입을 생성하는 방법 - 두 번째 이야기
13609정성태4/27/2024498닷넷: 2250. PInvoke 호출 시 참조 타입(class)을 마샬링하는 [IN], [OUT] 특성파일 다운로드1
13608정성태4/26/2024871닷넷: 2249. C# - 부모의 필드/프로퍼티에 대해 서로 다른 자식 클래스 간에 Reflection 접근이 동작할까요?파일 다운로드1
13607정성태4/25/2024984닷넷: 2248. C# - 인터페이스 타입의 다중 포인터를 인자로 갖는 C/C++ 함수 연동
13606정성태4/24/2024970닷넷: 2247. C# - tensorflow 연동 (MNIST 예제)파일 다운로드1
13605정성태4/23/2024963닷넷: 2246. C# - Python.NET을 이용한 파이썬 소스코드 연동파일 다운로드1
13604정성태4/22/2024968오류 유형: 901. Visual Studio - Unable to set the next statement. Set next statement cannot be used in '[Exception]' call stack frames.
13603정성태4/21/20241014닷넷: 2245. C# - IronPython을 이용한 파이썬 소스코드 연동파일 다운로드1
13602정성태4/20/20241003닷넷: 2244. C# - PCM 오디오 데이터를 연속(Streaming) 재생 (Windows Multimedia)파일 다운로드1
13601정성태4/19/20241018닷넷: 2243. C# - PCM 사운드 재생(NAudio)파일 다운로드1
13600정성태4/18/20241037닷넷: 2242. C# - 관리 스레드와 비관리 스레드
13599정성태4/17/2024959닷넷: 2241. C# - WAV 파일의 PCM 사운드 재생(Windows Multimedia)파일 다운로드1
13598정성태4/16/20241007닷넷: 2240. C# - WAV 파일 포맷 + LIST 헤더파일 다운로드2
13597정성태4/15/20241019닷넷: 2239. C# - WAV 파일의 PCM 데이터 생성 및 출력파일 다운로드1
13596정성태4/14/20241129닷넷: 2238. C# - WAV 기본 파일 포맷파일 다운로드1
13595정성태4/13/20241083닷넷: 2237. C# - Audio 장치 열기 (Windows Multimedia, NAudio)파일 다운로드1
13594정성태4/12/20241105닷넷: 2236. C# - Audio 장치 열람 (Windows Multimedia, NAudio)파일 다운로드1
13593정성태4/8/20241105닷넷: 2235. MSBuild - AccelerateBuildsInVisualStudio 옵션
13592정성태4/2/20241257C/C++: 165. CLion으로 만든 Rust Win32 DLL을 C#과 연동
13591정성태4/2/20241226닷넷: 2234. C# - WPF 응용 프로그램에 Blazor App 통합파일 다운로드1
13590정성태3/31/20241095Linux: 70. Python - uwsgi 응용 프로그램이 k8s 환경에서 OOM 발생하는 문제
13589정성태3/29/20241208닷넷: 2233. C# - 프로세스 CPU 사용량을 나타내는 성능 카운터와 Win32 API파일 다운로드1
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...