[CmdletBinding()]
Param(
    [Parameter(Mandatory)]
    [string]$VMName,
    [Parameter(Mandatory)]
    [string]$VSphereFQDN,
    [Parameter(Mandatory)]
    [string]$VSphereUsername,
    [Parameter(Mandatory)]
    [string]$VSpherePassword
)

$PowerCliConfigurationSplat = @{
    Scope                    = 'User'
    ParticipateInCEIP        = $False
    Confirm                  = $False
    InvalidCertificateAction = 'Ignore'
}
Set-PowerCLIConfiguration @PowerCliConfigurationSplat

$ConnectVIServerSplat = @{
    Server        = $VSphereFQDN
    User          = "$VSphereUsername"
    Password      = "$VSpherePassword"
    WarningAction = 'SilentlyContinue'
}
Connect-VIServer @ConnectVIServerSplat | Out-Null

$GetVMSplat = @{
    Name = $VMName
}
$VM = Get-VM @GetVMSplat

$GetHarddiskSplat = @{
    VM = $VM
}
$Harddisk = Get-Harddisk @GetHarddiskSplat
$VMFolder = ($Harddisk.Filename.Substring(0, $Harddisk.Filename.LastIndexOf('/')) -split ' ')[1]

$NewDatastoreDriveSplat = @{
    Name      = 'ds'
    Datastore = ($VM | Get-Datastore)
}
New-DatastoreDrive @NewDatastoreDriveSplat

$CopyDatastoreItemSplat = @{
    Item        = "ds:\$($VMFolder)\*.vmdk"
    Destination = (Get-Item $PWD)
}
Copy-DatastoreItem @CopyDatastoreItemSplat

Disconnect-VIServer * -Confirm:$False