【问题标题】:PowerShell hashtable filtering values in arrayPowerShell哈希表过滤数组中的值
【发布时间】:2021-02-15 05:55:40
【问题描述】:

文件:https://drive.google.com/file/d/10GAlcA9PI-mFHUmACvC5CPbzjl3QLrwJ/view?usp=sharing

$data = import-csv .\vDisk.csv |where 'raw lun id' -NotLike ''|Group-Object -Property VM -ashashtable

我从 rvtools 中提取了 vdisk 并尝试按 VM 名称对共享 RDM 进行分组,代码的输出是:

Name                           Value
----                           -----
MGTMKS1112M                    {@{VM=MGTMKS1112M; Powerstate=poweredOff; Template=False; Disk=Hard disk 7; Capacity MB=150; Raw=True; Disk Mode=independent_persistent; Thin=; Eagerly Scrub=; Split=; Wri...
PRDSKM1111M                    {@{VM=PRDSKM1111M; Powerstate=poweredOff; Template=False; Disk=Hard disk 5; Capacity MB=1,024; Raw=True; Disk Mode=independent_persistent; Thin=; Eagerly Scrub=; Split=; W...
MGTMKS1111M                    {@{VM=MGTMKS1111M; Powerstate=poweredOff; Template=False; Disk=Hard disk 11; Capacity MB=150; Raw=True; Disk Mode=independent_persistent; Thin=; Eagerly Scrub=; Split=; Wr...
PRDSKM1112M                    {@{VM=PRDSKM1112M; Powerstate=poweredOff; Template=False; Disk=Hard disk 5; Capacity MB=1,024; Raw=True; Disk Mode=independent_persistent; Thin=; Eagerly Scrub=; Split=; W...

我想要下面的 ashashtable 或分组对象的输出。因为两个节点共享相同的原始 lun id。如果这种方法行不通。任何替代方法?请指教。


Name                      Value
----                      -----
MGTMKS1112M,MGTMKS1111M   {@{VM=MGTMKS1112M; Powerstate=poweredOff; Template=False; Disk=Hard disk 7; Capacity MB=150; Raw=True; Disk Mode=independent_persistent; Thin=; Eagerly Scrub=; Split=; Wri...
PRDSKM1112M,PRDSKM1112M   {@{VM=PRDSKM1112M; Powerstate=poweredOff; Template=False; Disk=Hard disk 5; Capacity MB=1,024; Raw=True; Disk Mode=independent_persistent; Thin=; Eagerly Scrub=; Split=; W...

【问题讨论】:

    标签: powershell hashtable


    【解决方案1】:

    您可以向 Group-Object 提供一个自定义属性,以便在其中进行分组

    $data = import-csv .\vDisk.csv |where 'raw lun id' -NotLike ''
    $data | Group-Object -Property { $sub = $_.vm.substring(0,9); ($data.vm -match $sub |  Select-Object -Unique | Sort-Object) -join ", "} -ashashtable
    

    输出类似这样的东西

        Name                     Value
    ----                     -----
    MGTMKS1111M, MGTMKS1112M {@{VM=MGTMKS1111M; Powerstate=poweredOff; Template=False; Disk=Hard disk 11; Capacity MB=150; Raw=True; Disk Mode=independent_persistent; Thin=; Eagerly Scrub=; Split=; Write Through=; Level=normal; Shares=1,000; Reservation=0; L...
    PRDSKM1111M, PRDSKM1112M {@{VM=PRDSKM1111M; Powerstate=poweredOff; Template=False; Disk=Hard disk 5; Capacity MB=1,024; Raw=True; Disk Mode=independent_persistent; Thin=; Eagerly Scrub=; Split=; Write Through=; Level=normal; Shares=1,000; Reservation=0; ...
    

    【讨论】:

    • 名称因子字符串 (0..9) 而被修剪。任何其他方式我可以有重复的参考名称?例如:MGTMKS1112M 作为 MGTMKS1111M 的重复参考。否则都以逗号分隔为单个字符串。我也需要稍后在函数中枚举值。
    • 任何其他方式,我可以按VM过滤并比较它的值吗?主键是与 VM 名称匹配的原始 lun 映射。
    • 更新了我的答案。试试看。
    • 以上代码输出与您显示的输出不同。可以帮忙查一下。
    • 抱歉,之前无法访问您的 csv 文件。通过添加Select-Object -Unique 再次更新以删除重复项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2019-05-21
    • 2015-09-18
    • 2021-10-15
    • 2013-07-19
    • 2012-04-10
    相关资源
    最近更新 更多