functions/Get-VmSnapshot.ps1
function Get-VmSnapshot { [OutputType([PoshLibVirt.Snapshot])] [CmdletBinding(DefaultParameterSetName='Computer')] param ( [Parameter(Mandatory, ParameterSetName = 'Name', ValueFromPipeline, ValueFromPipelineByPropertyName)] [string[]] $ComputerName, [Parameter(Mandatory, ParameterSetName = 'Object', ValueFromPipeline)] [PoshLibVirt.VirtualMachine[]] $Computer, [Parameter(ParameterSetName = 'Name')] [Parameter(ParameterSetName = 'Object')] [string] $Name = '*' ) process { if (-not $Computer) { $Computer = foreach ($vmName in $ComputerName) { Get-Vm -ComputerName $vmName } } foreach ($machine in $Computer) { [string[]]$snappies = virsh snapshot-list --name --domain $machine.Name 2>$null | Where-Object { -not [string]::IsNullOrWhiteSpace($_) } | ForEach-Object { $_.Trim() } foreach ($snap in ($snappies -like $Name)) { [xml] $snapXml = virsh snapshot-dumpxml --domain $machine.Name $snap [PoshLibVirt.Snapshot]::new( $snapXml.domainsnapshot.name, $snapXml.domainsnapshot.description, $snapXml.domainsnapshot.state, $snapXml.domainsnapshot.creationTime ) } } } } |