Powershell 在AD查询上使用Foreach对象,比较管道变量

Powershell 在AD查询上使用Foreach对象,比较管道变量,powershell,foreach,active-directory,Powershell,Foreach,Active Directory,我在Powershell中有以下代码: Get-ADUser -filter * -property Distinguishedname | Where-Object {($_.Distinguishedname.split(',')[2]).trimstart("OU=") -like 'Verkauf'} |

我在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}} 
除了最后一行外,其他一切都正常。我想过滤特定部门的广告用户。当我剪切最后一行时,我得到以下输出(我只审查了用户):

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

这可能与比较来自两个不同查询的两个管道变量有关吗


提前谢谢

可分辨名称是
Get ADUser
标准输出的一部分。您不需要使用参数
-Properties
强制它。另一方面,“邮件”不是标准输出的一部分。如果我猜对了,你正在寻找广告中某个特定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 

可分辨名称是
Get ADUser
的标准输出的一部分。您不需要使用参数
-Properties
强制它。另一方面,“邮件”不是标准输出的一部分。如果我猜对了,你正在寻找广告中某个特定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 

如果我没弄错的话,你是在过滤一个特定的OU。为什么不改用参数
-SearchBase
。它应该可以加快代码的速度,使其更易于阅读。您应该将第二个
对象
直接移动到
获取ADUser
后面,您不需要第二个
获取ADUser
-您已经拥有了数据。如果我没有弄错,您就是在筛选一个特定的OU。为什么不改用参数
-SearchBase
。它应该可以加快代码的速度,使其更易于阅读。您应该将第二个
对象
直接移动到
获取ADUser
的后面,而不需要第二个
获取ADUser
-您已经拥有了数据。