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

Powershell 使用Where对象从对象获取其他数据,powershell,Powershell,我有两个对象集合,A和B。A来自CSV文件,B来自Get ADUser。A和B都有一个名为“用户名”的字段。我想做的是检查B是否包含A,如果是,将描述从B复制到A。类似这样: $A.'Description' = $B | ? {$A.Username -eq $B.Username; $B.Description} 我觉得有一种方法可以做到这一点,而无需迭代另一个循环(我已经在循环中遍历了每个obj) 创建一个将用户名从$B映射到相应描述的映射: $ht = @{} $B | ForEach

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

$A.'Description' = $B | ? {$A.Username -eq $B.Username; $B.Description}
我觉得有一种方法可以做到这一点,而无需迭代另一个循环(我已经在循环中遍历了每个obj)

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

$ht = @{}
$B | ForEach-Object { $ht[$_.Username] = $_.Description }
然后迭代
$A
的元素,如果
$ht
包含匹配的键,则更新这些描述:

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

<代码>前缀($AUSER为$A){$AUSER。描述=($B){ $$·用户名-EQ$AUSER。用户名})。