我有以下代码,从我想要输出到
$输出
并在最后写主持人:
$outputs = @()
foreach ($comp in $maschines.name) {
$output = New-Object PSObject -Property @{
invoke-command -computer comp3 -ScriptBlock { get-vm –VMName $using:comp | Select-Object VMId | Get-VHD | ft @{
label="vm"; expression={$using:comp}},
path,
VhdType,
VhdFormat,
@{label="file(gb)"; expression={($_.FileSize / 1GB) -as [int]}},
@{label="size(gb)"; expression={($_.Size / 1GB) -as [int]}} -AutoSize
}
}
$outputs += $output
}
$outputs
我收到了错误
在哈希文字中键入后缺少'='运算符
问题来自New-Object
cmdlet,它期望将哈希表提供给-Property
参数。
我认为你根本不需要New-Object
得到我认为你想要的东西。
您可能还需要考虑使用Select-Object
而不是Format-Table
,然后在最后使用Format-Table
,以便在需要时如何进一步操作结果时提供更大的灵活性。
您也可以直接返回ForEach
的结果,而不是添加到数组,因为每次重新创建数组时效率较低:
$output = foreach ($comp in $maschines.name) {
invoke-command -computer comp3 -ScriptBlock {
get-vm –VMName $using:comp | Select-Object VMId | Get-VHD | Select-Object @{ label = "vm"; expression = {$using:comp} },
path,
VhdType,
VhdFormat,
@{label = "file(gb)"; expression = {($_.FileSize / 1GB) -as [int]} },
@{label = "size(gb)"; expression = {($_.Size / 1GB) -as [int]} }
}
}
$output | Format-Table -AutoSize
我不能说你的哈希,但自定义对象的构造看起来很不稳定。我将首先使用名称/值对为$ outputs中的每个项目正确格式化自定义对象,并在每次迭代时直接附加$ outputs ...
$outputs = @()
foreach ($comp in $maschines.name) {
$outputs += [pscustomobject]@{
Prop1 = Get-VM -Name $comp | Select -ExpandProperty Value1
Prop2 = Get-VM -Name $comp | Select -ExpandProperty Value2
Prop3 = Invoke-Commmand -ComputerName $comp -Scriptblock {Get-Something | Select Something}
}
}