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

如何筛选AdObjects集合中含指定文本的属性并仅输出匹配属性?

PowerShell 筛选AD对象并保留匹配属性的实现方案

需求说明

拥有$adObjects集合,需筛选出属性值包含指定文本(示例为bingo!)的对象,且仅保留这些对象的name属性和所有值匹配的属性。

示例输入

# $adObjects包含以下对象及属性
$adObjects

name            : object1
property1       : asdf
property2       : bingo!
property3       : bingo!

name            : object2
property1       : asdf
property2       : bingo!
property3       : asdf

name            : object3
property1       : asdf
property2       : asdf
property3       : asdf

预期输出

name            : object1
property2       : bingo!
property3       : bingo!

name            : object2
property2       : bingo!

思路验证与代码实现

你的思路完全正确,Select-Object只能预先指定固定属性,无法动态根据属性值筛选并保留匹配项,必须通过遍历实现。以下是可直接运行的代码:

$targetText = "bingo!"
$result = $adObjects | ForEach-Object {
    $currentObj = $_
    # 筛选值包含目标文本的属性
    $matchingProps = $currentObj.PSObject.Properties | Where-Object {
        $_.Value -like "*$targetText*"
    }
    # 仅当存在匹配属性时,构建输出对象
    if ($matchingProps.Count -gt 0) {
        $outputProps = [ordered]@{ name = $currentObj.name }
        foreach ($prop in $matchingProps) {
            $outputProps[$prop.Name] = $prop.Value
        }
        [PSCustomObject]$outputProps
    }
}

# 输出最终结果
$result

简化优化版本

核心逻辑不变,可通过PowerShell的集合操作简化代码结构:

$targetText = "bingo!"
$adObjects | ForEach-Object {
    $matchProps = $_.PSObject.Properties.Where({$_.Value -like "*$targetText*"})
    if ($matchProps) {
        [PSCustomObject] ([ordered]@{ name = $_.name } + ($matchProps | Select-Object Name,Value | ConvertTo-HashTable -AsOrdered))
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:17:09