Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何使用powershell序列化哈希表/数组中的列表?_Arrays_Powershell_Hashtable_Hyper V - Fatal编程技术网

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

Arrays 如何使用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包含一个用Get-VM存储的VM

$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。比我的简单。