如何将输入文件中的值作为PowerShell中导出的输出文件中的列添加?

时间:2016-10-25 20:23:08

标签: powershell scripting active-directory

我有一个包含以下数据的输入文件(input.txt)。以下数据作为联系人保存在我的域中。我的任务是在我的域中为这些联系人标识相应的邮件ID。

 abcd@otherdomain.com
 efgh@otherdomain.com
 ijkl@otherdomain.com

下面是我为完成任务而编写的powershell脚本。这些联系人的目标地址将是我的域名电子邮件ID。但问题是,在导出时我需要将输入数据附加到我的结果中。

Write-Host "Reading Input File.. "
$users=""
ForEach ($contact in $(Get-Content 'Input.txt')) 
{
    $DomainId = Get-ADObject -Filter  {(mail -eq $contact) -and (ObjectClass -eq "Contact")} -Properties * | Select targetAddress
    $DomainId = $DomainId.targetAddress.remove(0,5) 
    $users+= (Get-AdUser -Filter {Mail -eq $DomainId} -Properties * | Select Mail)      
}
Write-Host "Exporting to CSV.."   
$users | Export-CSV -Path 'output.csv' -NoTypeInformation

以下是当前输出(output.csv)

Mail;
ab@mydomain.com;
ef@mydomain.com;
ij@mydomain.com;

但预期的输出是,

Mail;InputId;
ab@mydomain.com;abcd@otherdomain.com;
ef@mydomain.com;efgh@otherdomain.com;
ij@mydomain.com;ijkl@otherdomain.com;

是否有可能获得预期的输出。如果是这样,请协助。非常感谢您的支持。

1 个答案:

答案 0 :(得分:0)

未经测试,但这样的事情可以起作用:

Write-Host "Reading Input File.. "
$users = foreach ($contact in (Get-Content 'Input.txt')) 
{
    $DomainId = Get-ADObject -Filter {
                        (mail -eq $contact) -and (ObjectClass -eq "Contact")
                    } -Properties * | Select-Object -ExpandProperty targetAddress

    $DomainId = $DomainId.Remove(0,5)
    $Mail = (Get-AdUser -Filter {Mail -eq $DomainId} -Properties Mail).Mail

    [PSCustomObject]@{
        InputId = $DomainId
        Mail = $Mail
    } 
}

Write-Host "Exporting to CSV.."   
$users | Export-CSV -Path 'output.csv' -NoTypeInformation

您希望PSCustomObjects进入Export-CSV,每列有一个属性。而且它们很容易通过从哈希表中进行转换来构建,而不是使用大量的Add-Member。