如何使用powershell序列化哈希表/数组中的列表?

时间:2018-04-27 06:26:02

标签: arrays powershell hashtable hyper-v

我正在序列化以下脚本片段的输出,$ VM包含与Get-VM一起存储的VM。

$("#ques_response").submit(function(){
    $('#final-button').attr("disabled",true);
    $('#popup-final-button').attr("disabled",true);
});

输出如下:

$VM.VMId | Get-VHD | Select @{N="Name";E={$VM.Name}},@{N="Disks";E={[math]::Round($_.Size/1GB,1)}}

但我想以某种方式序列化这个而不是给我:

Name                                                                                                                                             Disks
----                                                                                                                                             -----
ServerXYZ                                                                                                                                        136,7
ServerXYZ                                                                                                                                        465,7

我徒劳地尝试添加-join" +"在这里和那里的代码都无济于事。

我后来谈到了这一点:

Name                                                                                                                                             Disks
----                                                                                                                                             -----
ServerXYZ                                                                                                                                136,7 + 465,7

这种方式接近于实际制作一个看起来像" ServerXYZ,136,7 + 465,7"的正确数据列表,但我需要将其格式化为数组或散列表键值对。

1 个答案:

答案 0 :(得分:1)

这是一种方法:

$vm.VMId | 
    Get-VHD |
        Select-Object @{N="Name";E={$VM.Name}},@{N="DiskSize";E={[math]::Round($_.Size/1gb,3)}} |
            Group-Object Name |
                ForEach-Object {
                    [PsCustomObject]@{
                        Name = $_.Name
                        Disks = $_.Group.DiskSize
                    }
                }

这样输出如下:

Name        Disks                       
----        -----                       
Server 1   {28.41, 0.223, 0.848, 0.816}

如果你真的想要' +'在中间,替换这一行:

Disks = $_.Group.DiskSize

使用:

Disks = ($_.Group.DiskSize -join ' + ')

这给出了:

Name        Disks                        
----        -----                        
Server1     28.41 + 0.223 + 0.848 + 0.816