无法使用脚本移动Hyper-V VM

时间:2015-06-18 00:17:53

标签: powershell hyper-v

我正在尝试编写一个脚本,它将把hyper-V主机作为输入,以及我要移动的VM列表的搜索字符串...这都是通过SCCM VMM,及其所有2012R2

这是我到目前为止所拥有的......

$VMHOST = read-host "Enter the HyperV host you want to move your VM's to"

$SEARCHPATTERN = read-host "Enter the search pattern for the VM's you want to move"

$VMLIST = Get-SCVirtualMachine | Where-Object {$_.Name -like "*$SEARCHPATTERN*"} |format-table name -HideTableHeaders

foreach ($VMM in $VMLIST)
{

Move-SCVirtualMachine -VM $VMM -VMHost $VMHOST

}

如果我跑它,我会......

  

Move-SCVirtualMachine:无法绑定参数' VM'。无法转换" Microsoft.PowerShell.Commands.Internal.Format.FormatEndData"值   类型" Microsoft.PowerShell.Commands.Internal.Format.FormatEndData"键入" Microsoft.SystemCenter.VirtualMachineManager.VM"。   在C:\ Users \ jfalcon \ Desktop \ vmmove.ps1:6 char:27   + Move-SCVirtualMachine -VM $ VMM -VMHost $ VMHOST   + ~~~~       + CategoryInfo:InvalidArgument:(:) [Move-SCVirtualMachine],ParameterBindingException       + FullyQualifiedErrorId:CannotConvertArgumentNoMessage,Microsoft.SystemCenter.VirtualMachineManager.Cmdlets.DeployVMCmdlet

有什么想法吗? $ VMLIST输出格式不正确吗?

1 个答案:

答案 0 :(得分:2)

从不如果您打算继续处理数据,请使用format-anything。人们使用它来输出文本文件的“漂亮”(如果你喜欢控制台表),但它仅用于外观。 PowerShell已将您的对象转换为[Microsoft.PowerShell.Commands.Internal.Format.FormatEndData],以便在屏幕上显示。此时原始对象被破坏。

如果您的PowerShell版本至少为3.0,则需要使用仅使用点表示法的Get-SCVirtualMachineSelect-Object -Expandproperty中提取正确的属性。

$VMLIST = Get-SCVirtualMachine | 
    Where-Object {$_.Name -like "*$SEARCHPATTERN*"} | 
    Select-Object -ExpandProperty Name

这应该可以解决问题。