New-GPTDisk.ps1

function New-GPTDisk
{
  <#
      .SYNOPSIS
      Initializes a Disk as GPT
      .DESCRIPTION
      New-GPTDisk Initizalizes a VHD as GPT and creates all necessary Partitions for UEFI-Boot
      .EXAMPLE
      New-GPTDisk -VHD C:\disks\system.vhdx
      Partitions C:\disks\system.vhdx for use as a GPT Datadrive
      .NOTES
      Version: 1.0
      Author: Holger Voges
      Date: 2018-08-17
      www.netz-weise-it.training/weisheiten/
  #>

  param
  (   
    [Validateset('Dynamic','Fixed')]
    $disktype = 'Dynamic',
    
    [parameter(Mandatory=$true)]
    [object]
    $vhd
  )
 
  $partitionStyle = 'GPT'
  Initialize-Disk -PartitionStyle $partitionStyle -Number $vhd.Number
  $Partitions = @{}
  $Partitions['Boot'] = $vhd | New-Partition -Size 100MB | Format-Volume -FileSystem FAT32 -NewFileSystemLabel 'System' -Confirm:$false
  Set-Partition -DiskNumber $vhd.Number -PartitionNumber ( $partitions.Boot | Get-Partition ).PartitionNumber -NewDriveLetter ( Get-FreeDrive )
  # Refresh Drive-Letter Property
  $partitions.Boot = Get-Volume -UniqueId $Partitions.Boot.UniqueId
  # $null = $vhd | New-Partition -GptType $PartitionType.MSR -Size 128MB
  $Partitions['Data'] = $vhd | New-Partition -UseMaximumSize | 
    Format-Volume -FileSystem NTFS -NewFileSystemLabel 'Data' -Confirm:$false
  Set-Partition -DiskNumber $vhd.Number -PartitionNumber ( $partitions.Data | Get-Partition ).PartitionNumber -NewDriveLetter ( Get-FreeDrive ) 
  $Partitions.Data = Get-Volume -UniqueId $Partitions.Data.UniqueId
  $Null = Get-PSDrive
  $Partitions
}