使用 Where-Object 的 Powershell 过滤不适用
Powershell Filtering with Where-Object not applying
我在使用以下代码时遇到问题:
$NodeList = (get-scvmhostcluster ClusterName| where-object {$_.nodes.fullyqualifieddomainname -ne "Host001.Domain.Tld"}).nodes.fullyqualifieddomainname
通常这应该从主机列表中过滤出列表中的 "Host001.Domain.tld"。 (Host001 到 Host014 是此列表通常生成的内容,未过滤)。
但是,当 运行 脚本块并查看 $NodeList 变量中的内容时,我得到了每个对象,就好像没有应用过滤器一样。
我已经尝试调试了几个小时,但无济于事。
谁能指出我的错误?
此致,
Get-SCVMHostCluster ClusterName
returns 单个簇对象。
当您将其通过管道传输到 Where-Object
时,您将得到以下内容:
$_.Nodes
是 fullyqualifieddomainname
属性 类型 string
的对象集合
$_.Nodes.fullyqualifieddomainname
因此是字符串集合的集合
Where-Object
只会折叠第一个 "level" 集合,它不会更深 - 因此你的过滤器永远不会匹配任何东西,字符串数组的集合永远不会匹配单独的字符串你在比较。
这是我会做的,通过选择 Nodes
属性 来折叠第一层(为了便于阅读而分成语句,请随意将其放在一个语句中):
$Nodes = Get-SCVMHostCluster ClusterName|Select-Object -ExpandProperty Nodes
$NodeList = $Nodes |Where-Object {$_.fullyqualifieddomainname -ne "Host001.domain.tld"}|Select-Object -ExpandProperty fullyqualifieddomainname
我在使用以下代码时遇到问题:
$NodeList = (get-scvmhostcluster ClusterName| where-object {$_.nodes.fullyqualifieddomainname -ne "Host001.Domain.Tld"}).nodes.fullyqualifieddomainname
通常这应该从主机列表中过滤出列表中的 "Host001.Domain.tld"。 (Host001 到 Host014 是此列表通常生成的内容,未过滤)。
但是,当 运行 脚本块并查看 $NodeList 变量中的内容时,我得到了每个对象,就好像没有应用过滤器一样。
我已经尝试调试了几个小时,但无济于事。
谁能指出我的错误?
此致,
Get-SCVMHostCluster ClusterName
returns 单个簇对象。
当您将其通过管道传输到 Where-Object
时,您将得到以下内容:
$_.Nodes
是fullyqualifieddomainname
属性 类型string
的对象集合
$_.Nodes.fullyqualifieddomainname
因此是字符串集合的集合
Where-Object
只会折叠第一个 "level" 集合,它不会更深 - 因此你的过滤器永远不会匹配任何东西,字符串数组的集合永远不会匹配单独的字符串你在比较。
这是我会做的,通过选择 Nodes
属性 来折叠第一层(为了便于阅读而分成语句,请随意将其放在一个语句中):
$Nodes = Get-SCVMHostCluster ClusterName|Select-Object -ExpandProperty Nodes
$NodeList = $Nodes |Where-Object {$_.fullyqualifieddomainname -ne "Host001.domain.tld"}|Select-Object -ExpandProperty fullyqualifieddomainname