Skip to content

Get-HardDisk

VMware: Retrieves virtual hard disks

#Requires -Version 5.1

[CmdletBinding(DefaultParameterSetName = "VM")]
Param(
    [Parameter(Mandatory = $true, ParameterSetName = "VM")]
    [Parameter(Mandatory = $true, ParameterSetName = "Template")]
    [Parameter(Mandatory = $true, ParameterSetName = "Snapshot")]
    [Parameter(Mandatory = $true, ParameterSetName = "Datastore")]
    [string]$VIServer,
    [Parameter(Mandatory = $true, ParameterSetName = "VM")]
    [Parameter(Mandatory = $true, ParameterSetName = "Template")]
    [Parameter(Mandatory = $true, ParameterSetName = "Snapshot")]
    [Parameter(Mandatory = $true, ParameterSetName = "Datastore")]
    [pscredential]$VICredential,
    [Parameter(Mandatory = $true, ParameterSetName = "VM")]
    [Parameter(Mandatory = $true, ParameterSetName = "Snapshot")]
    [string]$VMName,
    [Parameter(Mandatory = $true, ParameterSetName = "Template")]
    [string]$TemplateName,
    [Parameter(Mandatory = $true, ParameterSetName = "Snapshot")]
    [string]$SnapshotName,
    [Parameter(Mandatory = $true, ParameterSetName = "Datastore")]
    [string]$DatastoreName,
    [Parameter(ParameterSetName = "VM")]
    [Parameter(ParameterSetName = "Template")]
    [Parameter(ParameterSetName = "Snapshot")]
    [Parameter(ParameterSetName = "Datastore")]
    [string]$DiskName = '*',
    [Parameter(ParameterSetName = "VM")]
    [Parameter(ParameterSetName = "Template")]
    [Parameter(ParameterSetName = "Snapshot")]
    [Parameter(ParameterSetName = "Datastore")]
    [string]$DiskID,
    [Parameter(ParameterSetName = "VM")]
    [Parameter(ParameterSetName = "Template")]
    [Parameter(ParameterSetName = "Snapshot")]
    [Parameter(ParameterSetName = "Datastore")]
    [ValidateSet("rawVirtual", "rawPhysical", "flat", "unknown")]
    [string]$DiskType
)

Process {
    try {
        $vmServer = Connect-VIServer -Server $VIServer -Credential $VICredential -ErrorAction Stop
        $cmdArgs = @{ ErrorAction = 'Stop'; Server = $vmServer }
        if ($PSCmdlet.ParameterSetName -eq "Snapshot") { $vm = Get-VM @cmdArgs -Name $VMName; $snap = Get-Snapshot @cmdArgs -Name $SnapshotName -VM $vm; $cmdArgs.Add('Snapshot', $snap) }
        elseif ($PSCmdlet.ParameterSetName -eq "Template") { $temp = Get-Template @cmdArgs -Name $TemplateName; $cmdArgs.Add('Template', $temp) }
        elseif ($PSCmdlet.ParameterSetName -eq "Datastore") { $store = Get-Datastore @cmdArgs -Name $DatastoreName; $cmdArgs.Add('Datastore', $store) }
        else { $vm = Get-VM @cmdArgs -Name $VMName; $cmdArgs.Add('VM', $vm) }
        if (-not [System.String]::IsNullOrWhiteSpace($DiskID)) { $cmdArgs.Add('Id', $DiskID) }
        else { $cmdArgs.Add('Name', $DiskName) }
        if (-not [System.String]::IsNullOrWhiteSpace($DiskType)) { $cmdArgs.Add('DiskType', $DiskType) }
        $result = Get-HardDisk @cmdArgs
        if ($null -ne $result) { foreach ($item in $result) { $item | Add-Member -NotePropertyName Timestamp -NotePropertyValue (Get-Date -Format "yyyy-MM-dd HH:mm:ss") -PassThru -Force } }
    }
    catch { throw }
    finally { if ($null -ne $vmServer) { Disconnect-VIServer -Server $vmServer -Force -Confirm:$false -ErrorAction SilentlyContinue } }
}

IP address or DNS name of the vSphere server

Credentials for authenticating with the server

Virtual machine name to retrieve disks from

Template name to retrieve disks from

Snapshot name to retrieve disks from

Datastore name to search for hard disks

Name of the hard disk to retrieve

ID of the hard disk to retrieve

Type filter: rawVirtual, rawPhysical, flat, unknown

An interactive directory of PowerShell scripts.