PowerCLI中为Get-Datastore输出添加主机名的技术咨询
解决PowerCLI获取主机关联存储容量&可用空间的问题
嘿,作为PowerCLI新手碰到这种字段调整的问题太正常啦!我来帮你把存储对应的主机名加到输出里~
先说说你原命令的两个小问题:
- 你用
Get-Datastore拿到的存储对象其实已经包含了关联的VM主机信息,但你没把它提取出来,所以默认只显示存储的Name - 排序部分的写法有点问题,两次
Sort-Property会覆盖前一次的排序,而且后面的$disk放在管道里是多余的
直接给你修正后的命令,完美满足你的需求:
Get-VMHost | Get-Datastore | Sort-Object -Property CapacityGB, FreeSpaceGB | # 先按容量排序,再按可用空间排,顺序可以调换 Select-Object @{Name='HOSTNAME'; Expression={$_.VMHost.Name}}, FreeSpaceGB, CapacityGB | Export-Csv -Path .\DiskStats.csv -NoTypeInformation
我给你拆解开解释下关键部分:
- 计算属性提取主机名:
@{Name='HOSTNAME'; Expression={$_.VMHost.Name}}这行是核心,它把每个存储关联的VM主机名称提取出来,并重命名为你想要的HOSTNAME列,替换掉原来的存储Name - 用Export-Csv替代Out-File:
Export-Csv输出的是标准CSV格式,比Out-File的纯文本表格更实用,-NoTypeInformation会去掉CSV开头的类型注释行,让结果更干净 - 修正排序逻辑:把两次
Sort-Property合并成一次,指定多个排序属性,这样不会出现排序被覆盖的问题
额外补充个小场景:如果你的存储挂载在多台ESXi主机上,上面的命令会为每个主机-存储组合输出一行。要是你想每个存储只显示一行,同时列出所有关联的主机,只需要把主机名的表达式改成这样:
@{Name='HOSTNAME'; Expression={$_.VMHosts.Name -join ','}}
这样多个主机名会用逗号分隔在同一个单元格里~
内容的提问来源于stack exchange,提问作者Cole
相关产品推荐
相关产品推荐

