使用Where-Object从对象获取其他数据

时间:2017-08-07 22:11:28

标签: powershell

我有两个对象集合,A和B.A来自CSV文件,B来自Get-ADUser。 A和B都有一个名为"用户名"的字段。我想要做的是检查B是否包含A,如果是,请将描述从B复制到A.这样的事情:

$A.'Description' = $B | ? {$A.Username -eq $B.Username; $B.Description}

我觉得有一种方法可以在不迭代另一个循环的情况下执行此操作(我已经循环遍历A中的每个obj)。

1 个答案:

答案 0 :(得分:1)

创建一个hashtable将用户名从$B映射到相应的描述:

$ht = @{}
$B | ForEach-Object { $ht[$_.Username] = $_.Description }

然后迭代$A的元素,并在$ht包含匹配键时更新这些描述:

$A | Where-Object {
    $ht.ContainsKey($_.Username)
} | ForEach-Object {
    $_.Description = $ht[$_.Username]
}