PowerShell按子字符串分组统计VMware虚拟机数组项数量
统计PowerCLI中VM按前缀分组的数量
刚好我经常处理这类VM批量统计的需求,给你几个实用的方案:
基础方案:按第一个连字符提取前缀统计
首先你已经拿到了目标数据存储上的VM数组:
$items = Get-Datastore "YourDatastoreName" | Get-VM
接下来用Group-Object配合字符串拆分提取前缀,直接统计数量:
$items | Group-Object -Property { $_.Name.Split('-')[0] } | Select-Object Name, Count
这段代码的逻辑很清晰:
$_.Name.Split('-')[0]把每个VM的名称按连字符拆分,取第一部分作为分组依据Group-Object按这个前缀完成分组Select-Object只展示前缀(Name列)和对应的VM数量(Count列)
更精准的方案:用正则匹配3/4字符前缀
如果担心有些VM名称不符合“3/4字符+连字符”的格式(比如没有连字符或者前缀长度不对),可以用正则表达式精准匹配:
$items | Group-Object -Property { # 匹配开头3或4个字母/数字加连字符的前缀 if ($_.Name -match '^([A-Za-z0-9]{3,4})-') { $matches[1] } else { '无匹配前缀' } } | Select-Object Name, Count
这个正则^([A-Za-z0-9]{3,4})-会严格匹配名称开头的3或4个字母/数字,后面跟着连字符的情况,避免误统计不符合规则的VM。
友好输出:格式化表格
如果想要更易读的表格格式,把Select-Object换成Format-Table即可:
$items | Group-Object -Property { $_.Name.Split('-')[0] } | Format-Table Name, Count -AutoSize
这样输出的内容会自动调整列宽,看起来更清爽。
内容的提问来源于stack exchange,提问作者McKenning
相关产品推荐
相关产品推荐

