我遇到以下代码问题:
$NodeList = (get-scvmhostcluster ClusterName| where-object {$_.nodes.fullyqualifieddomainname -ne "Host001.Domain.Tld"}).nodes.fullyqualifieddomainname
通常这应该从主机列表中筛选出“Host001.Domain.tld”。 (Host001到Host014是这个列表通常生成的,未经过滤的。)
然而,当运行脚本块并查看$ NodeList变量中的什么时,我得到每个对象,好像没有应用过滤器一样。
我一直在尝试调试这几个小时,但无济于事。
任何人都能指出我的错误吗?
此致
答案 0 :(得分:1)
Get-SCVMHostCluster ClusterName
返回单个群集对象。
当您将其发送到Where-Object
时,您有以下内容:
$_.Nodes
是具有fullyqualifieddomainname
类型string
属性的对象的集合$_.Nodes.fullyqualifieddomainname
因此是字符串集合的集合 Where-Object
只会崩溃第一个"等级"对于集合,它不会更深入 - 因此你的过滤器永远不会匹配任何东西,字符串数组的集合永远不会匹配你正在比较的唯一字符串。
以下是我要做的事情,通过选择Nodes
属性来折叠第一级(为了便于阅读而将其分解为语句,随意将其括在一个语句中):
$Nodes = Get-SCVMHostCluster ClusterName|Select-Object -ExpandProperty Nodes
$NodeList = $Nodes |Where-Object {$_.fullyqualifieddomainname -ne "Host001.domain.tld"}|Select-Object -ExpandProperty fullyqualifieddomainname