Edit

Share via


Compare-VM

Compares a virtual machine and a virtual machine host for compatibility, returning a compatibility report.

Syntax

Compare-VM
       [-ComputerName <String[]>]
       [-Credential <PSCredential[]>]
       [-AsJob]
       [-Name] <String>
       [-DestinationHost] <String>
       [-DestinationCredential <PSCredential>]
       [-IncludeStorage]
       [-DestinationStoragePath <String>]
       [-ResourcePoolName <String>]
       [-RetainVhdCopiesOnSource]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Compare-VM
       [-CimSession <CimSession[]>]
       [-AsJob]
       [-Name] <String>
       [-DestinationCimSession] <CimSession>
       [-IncludeStorage]
       [-DestinationStoragePath <String>]
       [-ResourcePoolName <String>]
       [-RetainVhdCopiesOnSource]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Compare-VM
       [-CimSession <CimSession[]>]
       -VirtualMachinePath <String>
       [-SnapshotFilePath <String>]
       [-SmartPagingFilePath <String>]
       [-AsJob]
       [-Name] <String>
       [-DestinationCimSession] <CimSession>
       [-Vhds <Hashtable[]>]
       [-ResourcePoolName <String>]
       [-RetainVhdCopiesOnSource]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Compare-VM
       [-CimSession <CimSession[]>]
       [-ComputerName <String[]>]
       [-Credential <PSCredential[]>]
       [-AsJob]
       [-Path] <String>
       [-Register]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Compare-VM
       [-CimSession <CimSession[]>]
       [-ComputerName <String[]>]
       [-Credential <PSCredential[]>]
       [-VirtualMachinePath <String>]
       [-SnapshotFilePath <String>]
       [-SmartPagingFilePath <String>]
       [-AsJob]
       [-Path] <String>
       [[-VhdDestinationPath] <String>]
       [-Copy]
       [-VhdSourcePath <String>]
       [-GenerateNewId]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Compare-VM
       [-ComputerName <String[]>]
       [-Credential <PSCredential[]>]
       [-VirtualMachinePath <String>]
       [-SnapshotFilePath <String>]
       [-SmartPagingFilePath <String>]
       [-AsJob]
       [-Name] <String>
       [-DestinationHost] <String>
       [-DestinationCredential <PSCredential>]
       [-Vhds <Hashtable[]>]
       [-ResourcePoolName <String>]
       [-RetainVhdCopiesOnSource]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Compare-VM
       [-VirtualMachinePath <String>]
       [-SnapshotFilePath <String>]
       [-SmartPagingFilePath <String>]
       [-AsJob]
       [-VM] <VirtualMachine>
       [-DestinationHost] <String>
       [-DestinationCredential <PSCredential>]
       [-Vhds <Hashtable[]>]
       [-ResourcePoolName <String>]
       [-RetainVhdCopiesOnSource]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Compare-VM
       -VirtualMachinePath <String>
       [-SnapshotFilePath <String>]
       [-SmartPagingFilePath <String>]
       [-AsJob]
       [-VM] <VirtualMachine>
       [-DestinationCimSession] <CimSession>
       [-Vhds <Hashtable[]>]
       [-ResourcePoolName <String>]
       [-RetainVhdCopiesOnSource]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Compare-VM
       [-CompatibilityReport] <VMCompatibilityReport>
       [-AsJob]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Compare-VM
       [-AsJob]
       [-VM] <VirtualMachine>
       [-DestinationCimSession] <CimSession>
       [-IncludeStorage]
       [-DestinationStoragePath <String>]
       [-ResourcePoolName <String>]
       [-RetainVhdCopiesOnSource]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]
Compare-VM
       [-AsJob]
       [-VM] <VirtualMachine>
       [-DestinationHost] <String>
       [-DestinationCredential <PSCredential>]
       [-IncludeStorage]
       [-DestinationStoragePath <String>]
       [-ResourcePoolName <String>]
       [-RetainVhdCopiesOnSource]
       [-WhatIf]
       [-Confirm]
       [<CommonParameters>]

Description

The Compare-VM cmdlet compares a virtual machine and a virtual machine host for compatibility, returning a compatibility report. This is useful when trying to import or migrate a virtual machine that is incompatible with the target server that runs Hyper-V.

Examples

Example 1

PS C:\> Compare-VM -Name TestVM -DestinationHost TestDestinationHost

Compares virtual machine TestVM and Hyper-V host TestDestinationHost for compatibility.

Example 2

Attempts import of a virtual machine; the attempt fails due to incompatibilities with the Hyper-V host.
PS C:\> Import-VM -Path 'D:\vm1\Virtual Machines\53EAE599-4D3B-4923-B173-6AEA29CB7F42.XML'
Import-VM : Unable to import virtual machine due to configuration errors.  Please use Compare-VM to repair the virtual machine.
At line:1 char:1
+ import-vm -Path 'D:\vm1\Virtual Machines\53EAE599-4D3B-4923-B173-6AEA29CB7F42.XM ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Import-VM], VirtualizationOperationFailedException
    + FullyQualifiedErrorId : Microsoft.HyperV.PowerShell.Commands.ImportVMCommand

Gets a compatibility report that describes the attempted import and lists the virtual machine's incompatibilities with the Hyper-V host.
PS C:\> $report = Compare-VM -Path 'D:\vm1\Virtual Machines\53EAE599-4D3B-4923-B173-6AEA29CB7F42.XML'


Displays the compatibility report, revealing that the virtual network adapter was connected to switch Production. The Hyper-V host has no switch by that name.
PS C:\> $report.Incompatibilities | Format-Table -AutoSize
Message                                      MessageId Source
-------                                      --------- ------
Could not find Ethernet switch 'Production'.     33012 Microsoft.HyperV.PowerShell.VMNetworkAdapter

Disconnects the virtual network adapter.
PS C:\> $report.Incompatibilities[0].Source | Disconnect-VMNetworkAdapter


Generates a new compatibility report to determine if the virtual machine is compatible with the Hyper-V host.
PS C:\> Compare-VM -CompatibilityReport $report


Displays the compatibility report.
PS C:\> $report
VM                 : Microsoft.HyperV.PowerShell.VirtualMachine
OperationType      : ImportVirtualMachine
Destination        : HYPER-V-1
Path               : D:\vm1\Virtual Machines\53EAE599-4D3B-4923-B173-6AEA29CB7F42.XML
SnapshotPath       : D:\vm1\Snapshots
VhdDestinationPath :
VhdSourcePath      :
Incompatibilities  :

Imports the virtual machine.
PS C:\> import-vm -CompatibilityReport $report
Name State CPUUsage(%) MemoryAssigned(M) MemoryDemand(M) MemoryStatus Uptime   Status             ReplicationState
---- ----- ----------- ----------------- --------------- ------------ ------   ------             ----------------
VM1  Off   0           0                 0                            00:00:00 Operating normally Disabled

Imports a virtual machine whose configuration is not compatible with the Hyper-V host. Note the use of Compare-VM to troubleshoot the import failure in the first step.

Parameters

-AsJob

Runs the cmdlet as a background job.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CimSession

Runs the cmdlet in a remote session or on a remote computer. Enter a computer name or a session object, such as the output of a New-CimSession or Get-CimSession cmdlet. The default is the current session on the local computer.

Type:CimSession[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CompatibilityReport

Specifies a compatibility report which resolves any incompatibilities between the virtual machine and the virtual machine host.

Type:VMCompatibilityReport
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-ComputerName

Specifies one or more Hyper-v hosts that run this cmdlet. NetBIOS names, IP addresses, and fully qualified ___domain names are allowable. The default is the local computer. Use localhost or a dot (.) to specify the local computer explicitly.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

Prompts you for confirmation before running the cmdlet.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Copy

Specifies that the comparison should be made for a copy import operation.

Type:SwitchParameter
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Credential

Specifies one or more user accounts that have permission to perform this action. The default is the current user.

Type:PSCredential[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DestinationCimSession

Specifies the CIMSession on the Hyper-V host to which this cmdlet compares the virtual machine for compatibility.

Type:CimSession
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-DestinationCredential

Specifies a user account that has permission to perform this action. The default is the current user.

Type:PSCredential
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DestinationHost

Specifies the Hyper-V host to which the virtual machine is to be compared for compatibility.

Type:String
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-DestinationStoragePath

Specifies a destination storage path to which all virtual machine storage is to be moved.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-GenerateNewId

Specifies that the virtual machine should be copied and given a new unique identifier.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeStorage

Specifies that the compatibility comparison should include both the virtual machine and its storage.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

Specifies the name of the virtual machine to be compared.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Path

Specifies the path to the configuration file of the virtual machine to be compared.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Register

Specifies that the comparison should be made for an in-place import operation.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ResourcePoolName

Specifies the friendly name of the resource pool.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RetainVhdCopiesOnSource

Indicates that this cmdlet retains parent virtual hard disks on the source computer.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SmartPagingFilePath

Specifies the new path to use for a smart paging file, if one is needed.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SnapshotFilePath

Specifies the path for any snapshot files associated with the virtual machine.

Type:String
Aliases:CheckpointFileLocation, SnapshotFileLocation
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-VhdDestinationPath

Specifies the folder to which the virtual machine's VHD is to be copied.

Type:String
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Vhds

Specifies an array of hash tables that specifies a ___location for each individual virtual hard disk that needs to be compared. Each hash table has two entries. The first entry specifies the current ___location of the virtual hard disk to move, and has a key of SourceFilePath. The second entry specifies the new ___location for the virtual hard disk, and has a key of DestinationFilePath. The virtual hard disk names must be identical in both entries.

Type:Hashtable[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-VhdSourcePath

Specifies the folder from which the virtual machine's VHD files are to be copied.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-VirtualMachinePath

Specifies the path where the resulting virtual machine configuration files are to be stored.

Type:String
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-VM

Specifies a virtual machine.

Type:VirtualMachine
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-WhatIf

Shows what would happen if the cmdlet runs. The cmdlet is not run.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Outputs

Microsoft.HyperV.PowerShell.VMCompatibilityReport