在 AD 查询上使用 foreach-object,比较管道变量



>我在Powershell中有以下代码:

Get-ADUser -filter * -property Distinguishedname | 
Where-Object {($_.Distinguishedname.split(',')[2]).trimstart("OU=") -like 'Verkauf'} | 
Select-Object  @{name='User'; expression={$_.samaccountname}}, @{Name='Abteilung' ;Expression={($_.Distinguishedname.split(',')[1]).trimstart("OU=")}} | 
Sort-Object Abteilung, user | 
Where-Object {$_.Abteilung -eq "z"} |
ForEach-Object{get-aduser -filter * -Properties mail | Where-Object {$_.samaccountname -eq $_.User}} 

除了最后一行之外,一切都有效。我想过滤特定部门的 AD 用户。当我剪切最后一行时,我得到以下输出(我只审查了用户(:

User    Abteilung
----    ---------
xx      Z        
xx      Z        
xx      Z        
xx      Z        
xx      Z        
xx      Z 

使用该数组,我想将每个用户名与活动目录中的用户列表进行比较,并获取其关联的电子邮件。但结果是,当我添加最后一行时,我没有得到任何输出。

它是否与来自 2 个不同查询的 2 个管道变量的比较有关?

提前感谢!

可分辨名称是Get-ADUser标准输出的一部分。您无需使用参数-Properties强制使用它。另一方面,"邮件"不是标准输出的一部分。 如果我猜对了,并且您正在寻找AD中特定OU中的用户,则以下代码片段就足够了。当然,您应该为参数指定 OU 的完整路径-SearchBase

Get-ADUser -filter * -Properties mail -SearchBase 'Pfad zur OU Verkauf' | 
Where-Object { ($_.Distinguishedname.split(',')[1]).trimstart("OU=") -eq "z" } |
Select-Object  @{name = 'User'; expression = { $_.samaccountname } }, @{Name = 'Abteilung' ; Expression = { ($_.Distinguishedname.split(',')[1]).trimstart("OU=") } }, Mail | 
Sort-Object Abteilung, user 

最新更新