Weirdness with Convert-WindowsImage.ps1

This topic contains 7 replies, has 2 voices, and was last updated by  David Jones 2 years, 3 months ago.

  • Author
    Posts
  • #29484

    Mike Fal
    Participant

    I've encountered some oddities with using the Convert-WindowsImage.ps1 script found on the Microsoft Script Gallery: https://gallery.technet.microsoft.com/scriptcenter/Convert-WindowsImageps1-0fe23a8f

    Using my Win10 Enterprise desktop at home, I'm able to create bootable VHDX files from any OS and use them for VMs. If I run the exact same steps on my Surface 3 Pro (Win10 Pro), I am unable to create a bootable media.

    Edit: Followup from Twitter exchange.
    The error that occurs is when I try to start the VM with the created VHDX, the message is 'Boot failure.' This happens regardless of whether the image is Gen 1 (MBR) or Gen 2 (GPT).

    Hyper-V: 10.0.10240.16431
    Powershell: 5.0.10240.16384
    Sample command:

    Convert-WindowsImage -SourcePath C:\VMs\ISOs\en_windows_server_2012_r2_with_update_x64_dvd_6052708.iso -VHDPath C:\VMs\ISOs\GM2012R2Core.vhdx -VHDFormat VHDX -VHDType Dynamic -Edition ServerStandardCore -VHDPartitionStyle MBR -UnattendPath C:\VMs\ISOs\unattend.xml -BCDinVHD VirtualMachine 

    I can only speculate that there's a difference between Pro and Enterprise, but at this point I'm grasping at straws. I'm wondering if anyone else has run in to this.

  • #29493

    David Jones
    Participant

    I have had a number of isues with Convert-WindowsImage. The version on the TechNet galary is old. the one on microsoft's GitHub is more current but still a work in process.

    Your example code uses VHDX and MBR, that is not a valid combination with but Convert-WindowsImage from TechNet lets you run that anyway.

    I ended up writing my own Convert-WIM2VHD function. It's part of WindowsImageTools on the PowerShell Galary.

    Install-Module -Name WindowsImageTools

    it's also on GitHub https://github.com/BladeFireLight/WindowsImageTools

    I have not had issues with it on Windows 10 so far. and I would be happy for some input.

  • #29507

    Mike Fal
    Participant

    As stated on Twitter, running your functions gets the same result. Here's the info:

    Command:

    Convert-Wim2VHD -Path C:\VMS\VHDs\test2.vhdx -SourcePath C:\VMS\ISOs\en_windows_server_2012_r2_with_update_x64_dvd_6052708.iso -DiskLayout UEFI -Dynamic -Index 3 -Size 50GB  -Force -Verbose -RecoveryImage

    Verbose Log:

    VERBOSE: [Convert-Wim2VHD] : Overwrite partitions inside [C:\VMS\VHDs\test2.vhdx] with content of [C:\VMS\ISOs\en_windows_server_2012_r2_with_update_x64_dvd_6052708.iso]
    VERBOSE: [Convert-Wim2VHD] : InitializeVHDPartitionParam
    VERBOSE: 
    Name                           Value                                                                                                                                                                     
    ----                           -----                                                                                                                                                                     
    Path                           C:\VMS\VHDs\test2.vhdx                                                                                                                                                    
    Size                           53687091200                                                                                                                                                               
    DiskLayout                     UEFI                                                                                                                                                                      
    force                          True                                                                                                                                                                      
    Dynamic                        True                                                                                                                                                                      
    RecoveryImage                  True                                                                                                                                                                      
    
    
    
    VERBOSE: [Convert-Wim2VHD] : SetVHDPartitionParam
    VERBOSE: 
    Name                           Value                                                                                                                                                                     
    ----                           -----                                                                                                                                                                     
    Confirm                        False                                                                                                                                                                     
    Path                           C:\VMS\VHDs\test2.vhdx                                                                                                                                                    
    Index                          3                                                                                                                                                                         
    force                          True                                                                                                                                                                      
    SourcePath                     C:\VMS\ISOs\en_windows_server_2012_r2_with_update_x64_dvd_6052708.iso                                                                                                     
    
    
    
    VERBOSE: [Convert-Wim2VHD] : ParametersToPass
    VERBOSE: 
    Name                           Value                                                                                                                                                                     
    ----                           -----                                                                                                                                                                     
    Verbose                        True                                                                                                                                                                      
    
    
    
    VERBOSE: [Initialize-VHDPartition] Create partition structure for Bootable vhd(x) on [C:\VMS\VHDs\test2.vhdx]
    VERBOSE: [Initialize-VHDPartition] Validating : Dislayout [UEFI] Setting Format to VHDX
    VERBOSE: [Initialize-VHDPartition] Validating : [.vhdx] like [.VHDX]
    VERBOSE: [Initialize-VHDPartition] [test2.vhdx] : Creating
    VERBOSE: [Initialize-VHDPartition] [test2.vhdx] : @vhdParms
    VERBOSE: 
    Name                           Value                                                                                                                                                                     
    ----                           -----                                                                                                                                                                     
    Path                           C:\VMS\VHDs\test2.vhdx                                                                                                                                                    
    SizeBytes                      53687091200                                                                                                                                                               
    Dynamic                        True                                                                                                                                                                      
    ErrorAction                    Stop                                                                                                                                                                      
    
    
    
    VERBOSE: [Initialize-VHDPartition] [test2.vhdx] : Mounting disk image
    VERBOSE: [Initialize-VHDPartition] [test2.vhdx] : Initializing disk [1] as GPT
    VERBOSE: [Initialize-VHDPartition] [test2.vhdx] : Clearing disk partitions to start all over
    VERBOSE: [Initialize-VHDPartition] [test2.vhdx] : Recovery tools : Creating partition of [314572800] bytes
    VERBOSE: [Initialize-VHDPartition] [test2.vhdx] : Recovery tools : Formatting NTFS
    VERBOSE: [Initialize-VHDPartition] [test2.vhdx] : EFI system : Creating partition of [209715200] bytes
    VERBOSE: [Initialize-VHDPartition] [test2.vhdx] : EFI system : Formatting FAT32
    VERBOSE: [Initialize-VHDPartition] [test2.vhdx] : EFI system : Setting system partition as ESP
    VERBOSE: [Initialize-VHDPartition] [test2.vhdx] : MSR : Creating partition of [134217728] bytes
    VERBOSE: [Initialize-VHDPartition] [test2.vhdx] : Windows : Creating partition of [36920360960] bytes
    VERBOSE: [Initialize-VHDPartition] [test2.vhdx] : Windows : Formatting volume NTFS
    VERBOSE: [Initialize-VHDPartition] [test2.vhdx] : Recovery Image : Creating partition using remaing free space
    VERBOSE: [Initialize-VHDPartition] [test2.vhdx] : Recovery Image : Formatting volume NTFS
    VERBOSE: [Initialize-VHDPartition] [test2.vhdx] : Dismounting disk image
    VERBOSE: [Set-VHDPartition] : Overwrite partitions inside [C:\VMS\VHDs\test2.vhdx] with content of [C:\VMS\ISOs\en_windows_server_2012_r2_with_update_x64_dvd_6052708.iso]
    VERBOSE: [Set-VHDPartition] : Opening ISO [en_windows_server_2012_r2_with_update_x64_dvd_6052708.iso]
    VERBOSE: [Set-VHDPartition] : Looking for D:\sources\install.wim
    VERBOSE: [Set-VHDPartition] [test2.vhdx] : Mounting disk image [C:\VMS\VHDs\test2.vhdx]
    VERBOSE: [Set-VHDPartition] [test2.vhdx] : Munted as disknumber [1]
    VERBOSE: [Set-VHDPartition] [test2.vhdx] : Partition Table
    VERBOSE: 
    PartitionNumber DriveLetter        Size Type    
    --------------- -----------        ---- ----    
                  1           G   314572800 Recovery
                  2           H   209715200 System  
                  3               134217728 Reserved
                  4           I 36920360960 Basic   
                  5           J 16106127360 Recovery
    
    
    
    VERBOSE: [Set-VHDPartition] [test2.vhdx] Recovery Image Partition [5] : copying [D:\sources\install.wim] to [J:\Recovery\install.wim]
    VERBOSE: [Set-VHDPartition] [test2.vhdx] Windows Partition [4] : Applying image from [D:\sources\install.wim] to [I:\] using Index [3]
    VERBOSE: Dism PowerShell Cmdlets Version 10.0.0.0
    VERBOSE: [Set-VHDPartition] [test2.vhdx] System Partition [2] : Running [I:\Windows\System32\bcdboot.exe] -> I:\Windows /s H: /v /f UEFI
    VERBOSE: [Run-Executable] : Running [bcdboot.exe] [I:\Windows /s H: /v /f UEFI]
    VERBOSE: 
    Name                           Value                                                                                                                                                                     
    ----                           -----                                                                                                                                                                     
    PassThru                       True                                                                                                                                                                      
    FilePath                       bcdboot.exe                                                                                                                                                               
    ArgumentList                   {I:\Windows, /s H:, /v, /f UEFI}                                                                                                                                          
    RedirectStandardError          C:\Users\Mike\AppData\Local\Temp\bcdboot.exe-StandardError.txt                                                                                                            
    NoNewWindow                    True                                                                                                                                                                      
    Wait                           True                                                                                                                                                                      
    RedirectStandardOutput         C:\Users\Mike\AppData\Local\Temp\bcdboot.exe-StandardOutput.txt                                                                                                           
    
    
    
    VERBOSE: [Run-Executable] : Return code was [0]
    VERBOSE: [Set-VHDPartition] [test2.vhdx] Recovery Tools Partition [1] : []
    VERBOSE: [Set-VHDPartition] [test2.vhdx] Recovery Tools Partition [1] : Creating Recovery\WindowsRE folder [G:\Recovery\WindowsRE]
    VERBOSE: [Set-VHDPartition] [test2.vhdx] Recovery Tools Partition [1] : Copying [I:\Windows\System32\recovery\winre.wim] to [G:\Recovery\WindowsRE]
    VERBOSE: [Set-VHDPartition] [test2.vhdx] : Removing Drive letters
    VERBOSE: [Set-VHDPartition] [test2.vhdx] : Dismounting
    VERBOSE: [Set-VHDPartition] [test2.vhdx] : Finished

    VHDX validation:

    Get-VMHardDiskDrive Test2 | Select VMName,Controller*,DiskNumber,Path,@{Name="TestPath";Expression={$_ | Test-Path}}
    
    
    VMName             : Test2
    ControllerLocation : 0
    ControllerNumber   : 0
    ControllerType     : SCSI
    DiskNumber         : 
    Path               : C:\vms\VHDs\test2.vhdx
    TestPath           : True

    I'll test with a Win10 ISO later tonight.

  • #29545

    David Jones
    Participant

    That is odd I just ran the same command and had no problems.
    Have you tried a manual install from the ISO to make sure it's good?

  • #29566

    Mike Fal
    Participant

    ISO is valid, just ran an install from it to a blank VM.

  • #29647

    David Jones
    Participant

    Have you tried this on another computer?

    also give the scripts here a try. Jeff uses the files from inside the new VHDX to set the boot config. so the version always matches.

  • #29648

    Mike Fal
    Participant

    As stated in the original post, I can run the same script(s) with the same ISOs on my Win10 Enterprise desktop and home and make bootable VHDXs files. In fact, I've copied these files to my Surface and they work fine there as well. This is what I'm currently using for getting GM images for my Surface VMs.

  • #29699

    David Jones
    Participant

    If this is just Win10 on the Surface. sounds like an interesting bug with the underlying PowerShell and DISM function.

You must be logged in to reply to this topic.