You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerCLI教程:如何按使用数据存储的主机过滤数据存储

解决PowerShell过滤包含指定主机的数据存储问题

我懂你遇到的痛点了——你之前的代码失效,是因为$_.ExtensionData.Host返回的不是直接的主机对象,而是一堆DatastoreHostMount挂载对象,这些对象里包含了主机的引用信息,但没法直接和$clusterhost对象做比对。咱们得钻到挂载对象里,用主机的唯一标识来匹配才行。

正确的实现步骤

  1. 先获取目标主机的唯一MoRef ID(这是vSphere中识别对象的核心标识):
# 提取目标主机的Managed Object Reference ID
$targetHostId = $clusterhost.ExtensionData.MoRef.Value
  1. 过滤数据存储时,检查每个数据存储的挂载主机列表里是否包含这个ID:
# PowerShell 5.x及以上通用写法
$filteredDatastores = Get-Datastore | Where-Object {
    # 遍历当前数据存储的所有挂载主机,判断是否存在匹配的ID
    $_.ExtensionData.Host | ForEach-Object {
        if ($_.Host.Value -eq $targetHostId) { return $true }
    }
}

如果你的环境用的是PowerShell 7+,还可以用更简洁的写法(利用数组属性直接判断):

# PowerShell 7+ 简化写法
$filteredDatastores = Get-Datastore | Where-Object {
    $_.ExtensionData.Host.Host.Value -contains $targetHostId
}

为什么之前的代码不生效?

你原来用-contains $clusterhost,是在拿完整的主机对象和DatastoreHostMount对象做比对——这俩根本不是同一类型的对象,自然匹配不上。必须提取两者共有的唯一标识(也就是主机的MoRef ID),才能准确判断数据存储是否被目标主机挂载。

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:02:12