Powershell 从组中提取广告记录属性,但还需要经理的电子邮件地址

Powershell 从组中提取广告记录属性,但还需要经理的电子邮件地址,powershell,Powershell,我有一个脚本,它从一个安全组中获取所有成员,然后将它们的一组属性提取到一个文件中。它可以正常工作,除了提取经理的电子邮件地址。奇怪的是,如果我运行此命令直接在PowerShell中获取经理的电子邮件地址,它会返回他们的电子邮件地址 以下是整个脚本: Get-ADGroupMember -Identity "ACP Users" -Recursive | Get-ADUser -Property employeeNumber, SN, Manager, GivenName, Name, O

我有一个脚本,它从一个安全组中获取所有成员,然后将它们的一组属性提取到一个文件中。它可以正常工作,除了提取经理的电子邮件地址。奇怪的是,如果我运行此命令直接在PowerShell中获取经理的电子邮件地址,它会返回他们的电子邮件地址

以下是整个脚本:

Get-ADGroupMember -Identity "ACP Users" -Recursive |
    Get-ADUser -Property employeeNumber, SN, Manager, GivenName, Name, Office,
        Mobile, emailaddress, Department, Title, 
        samaccountname, officephone, homephone |
    select employeeNumber,SN, GivenName,Manager, Office, Mobile, 
        emailaddress,Department, Title, samaccountname, 
        officephone,homephone,enabled | 
    Select-object @{Name='Empno';Expression={$_."employeeNumber"}},
        @{Name='EmployeeName';Expression={$_."GivenName" + ' ' + $_."SN"}},
        @{N='Manager';E={(Get-ADUser $_.Manager).Name}},
        @{N='ManagerSAM';E={(Get-ADUser $_.Manager).samaccountname}},
        @{N='ManagerEmail';E={(Get-ADUser(Get-ADUser $._samaccountname -Properties manager).manager -properties mail).mail}},
        @{Name='EmployeeEmail';Expression={$_."emailAddress"}},
        @{Name='Office';Expression={$_."Office"}},
        @{Name='Title';Expression={$_."Title"}},
        @{Name='Department';Expression={$_."Department"}},
        enabled |
    Export-Csv -Path C:\temp\ACP_Uers.csv -NoTypeInformation
如果我在PowerShell中手动运行此部件,它会手动返回Active Directory用户记录,但工作正常:

(Get-ADUser(Get-ADUser chuck.east -Properties manager).manager -Properties mail).mail
文件输出作为整个脚本运行时,您可以看到经理的电子邮件为空,但它能够获取经理和经理的sam

"Empno","EmployeeName","Manager","ManagerSAM","ManagerEmail","EmployeeEmail","Office","Title","Department","enabled" "8921","Chuck East","Jim Dean","jim.dean",,"Chuck.East@sb.com","East","BSA","IT","True" 你知道为什么不拉经理的邮件吗

@{N='ManagerEmail';E={
    (Get-ADUser(
        Get-ADUser $._samaccountname - Properties manager).manager -properties mail).mail
    }
},
你有一个拼写错误,$。\u我想是samaccountname。应为$\.samaccountname

我不知道你为什么会偏离先前的模式。这应该起作用:

@{N='ManagerEmail';E={
        Get-ADUser $_.manager -properties mail).mail
    }
},
当然,您可以获得一次管理器对象,而不是三次。。。根据Matt的建议,构建对象而不是使用Select对象,类似这样:未测试。。。在我的电话里

Get-ADGroupMember -identity “ACP Users” -Recursive | get-aduser -Property employeeNumber,SN, Manager, GivenName, Name,Office, Mobile, emailaddress,Department, Title, samaccountname,officephone,homephone | Foreach-Object {
    $manager = Get-ADUser $_ -Properties email
    $outputData = [ordered] @{
            Empno=$_."employeeNumber"
            EmployeeName=$_."GivenName" + ' ' + $_."SN"
            Manager=$manager.distinguishedName
            #etc for the other properties you want
    }
    New-object psobject -properties $outputData
} | Export-csv -path C:\temp\ACP_Uers.csv -NoTypeInformation
你有一个拼写错误,$。\u我想是samaccountname。应为$\.samaccountname

我不知道你为什么会偏离先前的模式。这应该起作用:

@{N='ManagerEmail';E={
        Get-ADUser $_.manager -properties mail).mail
    }
},
当然,您可以获得一次管理器对象,而不是三次。。。根据Matt的建议,构建对象而不是使用Select对象,类似这样:未测试。。。在我的电话里

Get-ADGroupMember -identity “ACP Users” -Recursive | get-aduser -Property employeeNumber,SN, Manager, GivenName, Name,Office, Mobile, emailaddress,Department, Title, samaccountname,officephone,homephone | Foreach-Object {
    $manager = Get-ADUser $_ -Properties email
    $outputData = [ordered] @{
            Empno=$_."employeeNumber"
            EmployeeName=$_."GivenName" + ' ' + $_."SN"
            Manager=$manager.distinguishedName
            #etc for the other properties you want
    }
    New-object psobject -properties $outputData
} | Export-csv -path C:\temp\ACP_Uers.csv -NoTypeInformation

我赞成使用计算属性,但是由于您多次调用同一用户以获得不同的属性,因此使用foreach循环将更有效。这样,您可以更轻松地加载单个属性,并使用[pscustomobject]@{}将它们发送到管道中。嗨,Matt,您是说我从哪里多次获得manager属性?我对你所说的很感兴趣,但不确定如何做到这一点。我赞成使用计算属性。但是,由于你多次调用同一用户以获得不同的属性,因此使用foreach循环会更有效。这样,您可以更轻松地加载单个属性,并使用[pscustomobject]@{}将它们发送到管道中。嗨,Matt,您是说我从哪里多次获得manager属性?我对你所说的很感兴趣,但不知道如何做到。维夫,谢谢你在打字错误上的点睛之笔!我怎样才能完成同样的任务,并且只在获得所有三个管理器属性并将它们分配给三个变量后才能获得管理器对象?在我的手机上,编辑有点粗糙。。。但是用Foreach对象打开一个新块,然后$manager=get aduser$\.manager-properties name、smamaccountname、email然后将$\管道连接到现有的Select对象表达式,用$manager.name等替换所有get aduser$\.manager业务。更新后的答案带有一点示例。与@mattVeefu的建议一致,谢谢你在排版上的那个位置!我怎样才能完成同样的任务,并且只在获得所有三个管理器属性并将它们分配给三个变量后才能获得管理器对象?在我的手机上,编辑有点粗糙。。。但是用Foreach对象打开一个新块,然后$manager=get aduser$\.manager-properties name、smamaccountname、email然后将$\管道连接到现有的Select对象表达式,用$manager.name等替换所有get aduser$\.manager业务。更新后的答案带有一点示例。符合@matt的建议