我正在尝试编写一个脚本,它将把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输出格式不正确吗?
答案 0 :(得分:2)
从不如果您打算继续处理数据,请使用format-anything
。人们使用它来输出文本文件的“漂亮”(如果你喜欢控制台表),但它仅用于外观。 PowerShell已将您的对象转换为[Microsoft.PowerShell.Commands.Internal.Format.FormatEndData]
,以便在屏幕上显示。此时原始对象被破坏。
如果您的PowerShell版本至少为3.0,则需要使用仅使用点表示法的Get-SCVirtualMachine
从Select-Object -Expandproperty
中提取正确的属性。
$VMLIST = Get-SCVirtualMachine |
Where-Object {$_.Name -like "*$SEARCHPATTERN*"} |
Select-Object -ExpandProperty Name
这应该可以解决问题。