Copy-DiskToAHV.ps1

<#

.SYNOPSIS
Copy a disk to AHV.

.DESCRIPTION
Copy a disk to an AHV.

.PARAMETER Hostname
Specifies the hostname of the Nutanix system.

.PARAMETER Port
Specifies the network port of the Nutanix system.

.PARAMETER Username
Specifies the login username for authenticating with the Nutanix system.

.PARAMETER Password
Specifies the login password for authenticating with the Nutanix system.

.PARAMETER FileName
Specifies the filename of the disk to be copied. Can be local or on a share.

.PARAMETER Name
Specifies the name to give to the uploaded image on the Nutanix system.

.PARAMETER Description
Specifies a description to give to the uploaded image.

.PARAMETER SslNoCheck
If specified, ssl certificate checking is skipped for the Nutanix host.

.PARAMETER LogFile
Specifies the path to the file to log to. ".\Upload.log" is the default.

.PARAMETER OverwriteLog
If specified, the log file is overwritten otherwise it is appended to.

.INPUTS
None.

.OUTPUTS
System.String. The ID of image the disk was copied to.

.EXAMPLE

PS> Copy-DiskToAHV -FileName //smb.example.com//share/path/disk.vhd -Hostname "ahv.acme.com" -Username bob -Password "xxxx" -Name "Win10" -LogFile ahv-copy.log -OverwriteLog


.EXAMPLE

PS> Copy-DiskToAHV -FileName ./disks/disk.vhd -Hostname "ahv.acme.com" -Username bob -Password "xxxx" -Name "Win2019" -Description "v2"


#>


Function Copy-DiskToAHV
{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory = $True)]
        [string] $Hostname,
        [Parameter()]
        [string] $Port=9440,

        [Parameter(Mandatory = $True)]
        [string] $Username,
        [Parameter(Mandatory = $True)]
        [string] $Password,

        [Parameter(Mandatory = $True)]
        [string] $FileName,

        [Parameter(Mandatory = $True)]
        [string] $Name,
        [Parameter()]
        [string] $Description = "Uploaded by Citrix Image Uploader",

        [Parameter()]
        [switch] $SslNoCheck,

        [Parameter()]
        [string] $LogFile="AhvUpload.log",

        [Parameter()]
        [switch] $OverwriteLog
    )

    Begin
    {
        InitUploadLog $LogFile $OverwriteLog

        VersionCheck
    }

    Process
    {
        try
        {
            $InformationPreference = "Continue"
            try
            {
                return Copy-ToAhvDisk -Hostname $Hostname -Port $Port -Username $Username -Password $Password -Name $Name -FilePath $FileName -Description $Description -SslNoCheck $SslNoCheck.IsPresent -LogFileName $LogFile
            }
            catch
            {
                ThrowError ([UploaderError]::new("Failed to copy the disk to AHV", $_.Exception))
            }
        }
        catch [UploaderError]
        {
            LogIfSslError $_
            $PSCmdlet.ThrowTerminatingError($_)
        }
        catch
        {
            Log $_
            LogIfSslError $_
            $PSCmdlet.ThrowTerminatingError($_)
        }
    }
}