在select -expandproperty中调用变量

时间:2016-07-15 13:47:36

标签: powershell

我试图制作一个报告,列出来自虚拟机的服务器名称,虚拟机名称和备注部分,但我似乎无法运行此代码,它总是给我这个错误

  

Select-Object:无法转换' System.Object []'到类型   ' System.String'参数' ExpandProperty'需要。不支持。   在C:\ Cooper \ Jobs \ Get-VmNotes - Copy.ps1:32 char:48 + get-vm -server   FA0150 |选择-expandproperty $ server,Name,Notes +
  ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidArgument:   (:) [Select-Object],ParameterBindingException +   FullyQualifiedErrorId:   CannotConvertArgument,Microsoft.PowerShell.Commands.SelectObjectCommand

我可以将vmname和notes一起输出,但我只想要一个列出与之关联的vcenter服务器的列。

2 个答案:

答案 0 :(得分:1)

展开属性与说(Get-VM -Server FA0150).Name一样。它会扩展您选择的属性名称。您试图扩展3个属性(System.Object[]),但它只查找要扩展的属性的字符串名称。请改用-Property

get-vm -server FA0150 | Select-Object -Property Name,Notes

get-vm -server FA0150 | Select-Object -Property Name,Notes | Format-Table -Autosize

还包括我将其作为脚本表单的服务器名称,因为它不再是单行:

[CmdletBinding()]
Param ( $Server )
$VMs = Get-VM -Server $Server
$VMs | Select-Object -Properties @(
    @{ Label = 'Server';Expression = { $Server } }
    'Name'
    'Notes'
)

答案 1 :(得分:0)

我使用New-ViProperty找到了解决问题的方法。唯一的问题是现在它创建了四个单独的csv文件,我想根据文件名将它们全部合并为一个,保持相同的格式,并根据文件名删除其他四个。有一个简单的方法吗?