Arrays 如何使用powershell序列化哈希表/数组中的列表?
我正在序列化以下脚本片段的输出,$VM包含一个用Get-VM存储的VMArrays 如何使用powershell序列化哈希表/数组中的列表?,arrays,powershell,hashtable,hyper-v,Arrays,Powershell,Hashtable,Hyper V,我正在序列化以下脚本片段的输出,$VM包含一个用Get-VM存储的VM $VM.VMId | Get-VHD | Select @{N="Name";E={$VM.Name}},@{N="Disks";E={[math]::Round($_.Size/1GB,1)}} 输出如下所示: Name
$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
Name Disks
---- -----
Server 1 {28.41, 0.223, 0.848, 0.816}
但我想以某种方式将其序列化,以提供:
Name Disks
---- -----
ServerXYZ 136,7 + 465,7
我曾尝试在代码中到处添加一点-join“+”但没有成功
我后来谈到这一点:
$VM.Name, (($VM.VMId | Get-VHD | foreach{ [math]::round($_.size/1GB,1)}) -join " + ")
这类数据实际上是一个正确数据的列表,看起来像“ServerXYZ,136,7+465,7”,但我需要将其格式化为带有键值对的数组或哈希表。这里有一种方法:
$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
---- -----
ServerXYZ 136,7
ServerXYZ 465,7
Name Disks
---- -----
Server 1 {28.41, 0.223, 0.848, 0.816}
如果您确实希望“+”介于两者之间,请替换此行:
Disks = $_.Group.DiskSize
与:
这使得:
Name Disks
---- -----
Server1 28.41 + 0.223 + 0.848 + 0.816
哦,是的,这真是一团糟,令人费解,我喜欢它!这正是我想要的,非常感谢!实际上,我偶然发现了一些奇怪的东西,我可以使用这个Disks值导出到csv,在powershell窗口中我可以看到该值,但在导出过程中,该值会变成某种散列字符串,如“c83d6b91-e645-48ed-9a62-fa00f40fcd17”。我在过度复杂最后一部分时编辑了我的答案。在任何情况下,使用
Disks=$\u0.Group.DiskSize
获取磁盘大小意味着Disks
属性是一个数组,它在屏幕上显示为ok,但导出不太好。使用Disks=(${u.Group.DiskSize-join'+')
将其转换为字符串,这应该很好-无论如何对我来说都很有效。是的,我自己通过简单的操作达到了终点:$VHDs=$VHDs | Select Object Name,@{N=“Disks”;E={${u.Disks-join”+“}}基本相同,但可能有点丑陋:PExcellent。比我的简单。