성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] VT sequences to "CONOUT$" vs. STD_O...
[정성태] NetCoreDbg is a managed code debugg...
[정성태] Evaluating tail call elimination in...
[정성태] What’s new in System.Text.Json in ....
[정성태] What's new in .NET 9: Cryptography ...
[정성태] 아... 제시해 주신 "https://akrzemi1.wordp...
[정성태] 다시 질문을 정리할 필요가 있을 것 같습니다. 제가 본문에...
[이승준] 완전히 잘못 짚었습니다. 댓글 지우고 싶네요. 검색을 해보...
[정성태] 우선 답글 감사합니다. ^^ 그런데, 사실 저 예제는 (g...
[이승준] 수정이 안되어서... byteArray는 BYTE* 타입입니다...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Convert-WindowsImage.ps1 사용 방법 정리</h1> <p> WIM 이미지를 vhd 설치 파일로 변환해주는 PowerShell 스크립트가 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Convert-WindowsImage.ps1 - WIM2VHD for Windows 10 (also Windows 8 and 8.1) ; https://gallery.technet.microsoft.com/scriptcenter/Convert-WindowsImageps1-0fe23a8f ; <a target='tab' href='https://www.powershellgallery.com/packages/Convert-WindowsImage/10.0'>https://www.powershellgallery.com/packages/Convert-WindowsImage/10.0</a> </pre> <br /> 이 스크립트를 다음과 같은 식으로 그냥 사용하시면 아무 동작도 안 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 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> </pre> <br /> 왜냐하면 Convert-WindowsImage.ps1은 내부에서 Convert-WindowsImage 메서드를 정의만 해두기 때문입니다. 따라서, 다음과 같이 ImportModule을 한 후에 Convert-WindowsImage 메서드를 호출하는 식으로 사용해야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 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 </pre> <br /> <hr style='width: 50%' /><br /> <br /> 그런데 다음과 같이 명령을 내려 보면, 웬일인지 예외가 발생합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > PS C:\temp> <span style='color: blue; font-weight: bold'>Convert-WindowsImage -WIM 'c:\temp\nanoserver\NanoServer.wim' -VHD 'c:\temp\vhd\nanoserver.vhd' -DiskType Fixed -VHDFormat VHD -SizeBytes 10GB -Edition 1</span> 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 : <span style='color: blue; font-weight: bold'>Cannot convert the "System.String[]" value of type "System.String[]" to type "System.Int32".</span> INFO : Log folder is %USERPROFILE%\AppData\Local\Temp\Convert-WindowsImage\6977f150-4e06-4eff-8123-d35b0e37e8e2 INFO : Closing Windows image... INFO : Done. </pre> <br /> 예외가 발생하는 위치는 Convert-WindowsImage.ps1의 $Edition을 열거하는 코드인데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > $Edition | ForEach-Object -Process { $Edition = $PSItem if ([Int32]::TryParse($Edition, [ref]$null)) { <span style='color: blue; font-weight: bold'>$openImage = $openWim[[Int32]$Edition] // 예외 발생</span> } 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 } ...[생략]... } </pre> <br /> "$Edition = $PSItem" 설정하면서 열거형 변수가 $PSItem으로 겹쳐써져 오류가 발생하는 듯합니다. 그래서 다음과 같이 바꿔주면 정상적으로 동작합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > $Edition | ForEach-Object -Process { <span style='color: blue; font-weight: bold'>$nEdition = $PSItem</span> if ([Int32]::TryParse($Edition, [ref]$null)) { $openImage = <span style='color: blue; font-weight: bold'>$openWim[[Int32]$nEdition]</span> } 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 } ...[생략]... } </pre> <br /> <hr style='width: 50%' /><br /> <br /> 그 외에, Edition 인자로 숫자(인덱스) 말고 이름을 주는 방법이 있습니다. 이를 위해 WIM 파일에 포함된 Edition 이름을 알아야 하는데, 이는 <a target='tab' href='https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-vista/cc749447(v=ws.10)'>imagex.exe</a>를 이용해 나열할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\Program Files (x86)\Windows Kits\10\Tools\bin\i386><span style='color: blue; font-weight: bold'>imagex /info e:\temp\NanoServer\NanoServer.wim</span> 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><span style='color: blue; font-weight: bold'>Windows Server 2016 SERVERSTANDARDNANO</span></NAME> </IMAGE> <IMAGE INDEX="2"> ...[생략]... <WINDOWS> <ARCH>9</ARCH> <PRODUCTNAME>Microsoft® Windows® Operating System</PRODUCTNAME> <EDITIONID>ServerDatacenterNano</EDITIONID> ...[생략]... </WINDOWS> <NAME><span style='color: blue; font-weight: bold'>Windows Server 2016 SERVERDATACENTERNANO</span></NAME> </IMAGE> </WIM> </pre> <br /> 따라서 실행은 이렇게 하시면 됩니다.<br /> <br /> <div style='BACKGROUND-COLOR: #ccffcc; padding: 10px 10px 5px 10px; MARGIN: 0px 10px 10px 10px; FONT-FAMILY: Malgun Gothic, Consolas, Verdana; COLOR: #005555'> Convert-WindowsImage -WIM 'e:\temp\nanoserver\NanoServer.wim' -VHD 'e:\temp\vhd\nanoserver.vhd' -DiskType Fixed -VHDFormat VHD -SizeBytes 10GB <span style='color: blue; font-weight: bold'>-Edition "Windows Server 2016 SERVERSTANDARDNANO"</span> </div><br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1134
(왼쪽의 숫자를 입력해야 합니다.)