使用脚本移动 Hyper-V VM 时遇到问题
Having trouble with a script to move Hyper-V VM's
我正在尝试编写一个脚本,它将 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 : Cannot bind parameter 'VM'. Cannot convert the "Microsoft.PowerShell.Commands.Internal.Format.FormatEndData" value
of type "Microsoft.PowerShell.Commands.Internal.Format.FormatEndData" to type "Microsoft.SystemCenter.VirtualMachineManager.VM".
At 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 输出格式不正确吗?
从不 如果您打算继续处理数据,请使用 format-anything
。人们将它用于 "nice" 输出到文本文件(如果您喜欢控制台表),但它仅用于外观。 PowerShell 已将您的对象转换为 [Microsoft.PowerShell.Commands.Internal.Format.FormatEndData]
以便在屏幕上显示。那时原始对象被销毁。
如果您的 PowerShell 版本至少为 3.0,您需要使用 Select-Object -Expandproperty
从 Get-SCVirtualMachine
中提取正确的 属性,仅使用点符号。
$VMLIST = Get-SCVirtualMachine |
Where-Object {$_.Name -like "*$SEARCHPATTERN*"} |
Select-Object -ExpandProperty Name
这应该可以解决问题。
我正在尝试编写一个脚本,它将 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 : Cannot bind parameter 'VM'. Cannot convert the "Microsoft.PowerShell.Commands.Internal.Format.FormatEndData" value of type "Microsoft.PowerShell.Commands.Internal.Format.FormatEndData" to type "Microsoft.SystemCenter.VirtualMachineManager.VM". At 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 输出格式不正确吗?
从不 如果您打算继续处理数据,请使用 format-anything
。人们将它用于 "nice" 输出到文本文件(如果您喜欢控制台表),但它仅用于外观。 PowerShell 已将您的对象转换为 [Microsoft.PowerShell.Commands.Internal.Format.FormatEndData]
以便在屏幕上显示。那时原始对象被销毁。
如果您的 PowerShell 版本至少为 3.0,您需要使用 Select-Object -Expandproperty
从 Get-SCVirtualMachine
中提取正确的 属性,仅使用点符号。
$VMLIST = Get-SCVirtualMachine |
Where-Object {$_.Name -like "*$SEARCHPATTERN*"} |
Select-Object -ExpandProperty Name
这应该可以解决问题。