将AD用户信息管道传输到CSV

时间:2019-12-05 13:50:17

标签: powershell

我这里有一些逻辑/格式化的脑筋。

  1. 我有一个具有GivenName和Surname属性的CSV

  2. 我需要将该信息传递给AD用户资产,并返回列表中具有一些属性的用户信息,包括他们的姓名,办公室,SamAccountName和电子邮件地址。我已经知道了:

    $employees = import-csv 'c:\employees\employeelist.csv'

    $UserInfo = ForEach ($user in $employees) { Get-ADUser -Filter * | `
               Where-Object { $_.GivenName -like
    $employee.GivenName -and $_.Surname -like $employee.Surname 
    }
    

返回的信息不是表格形式,我简直不敢相信我似乎无法弄清楚如何将其通过管道传输到CSV,它无法正常工作,因此返回的信息如下:

Reference         : 201111
Surname           : Smith
GivenName         : Name
Effective from    : 24-Sep-13
Business Area     : Client Ops
Department        : ATE
Organisation Unit : ATE Ops

有人知道为什么当我| export-csv时我没有得到正确的格式吗?

1 个答案:

答案 0 :(得分:1)

如前所述,您在foreach循环中使用了错误的变量名。 ($employee应该是$user),因为那是您在循环中定义的变量。

类似这样的东西:

$employees = Import-Csv 'c:\employees\employeelist.csv'

$UserInfo = foreach ($user in $employees) { 
    Get-ADUser -Filter * -Properties GivenName, Surname, Office, SamAccountName, EmailAddress  |
        Where-Object { $user.GivenName -eq $_.GivenName -and $user.Surname -eq $_.Surname } |
        Select-Object GivenName, Surname, Office, SamAccountName, EmailAddress
}

$UserInfo | Export-Csv -Path 'c:\employees\employees.csv' -NoTypeInformation

如您所见,我还在命名您要返回的属性,因为默认情况下,Get-ADUser返回属性的子集并随其一起使用,因此您将不会获得Office和EmailAddress属性。

此外,我将-like运算符更改为-eq以获取完全匹配项。

P.S。如果您像这样使用Where-Object,则可以使用以下代码来优化代码,而不是使用-Filter构造:

$UserInfo = foreach ($user in $employees) { 
    Get-ADUser -Filter "GivenName -eq '$($user.GivenName)' -and Surname -eq '$($user.Surname)'" -Properties GivenName, Surname, Office, SamAccountName, EmailAddress  |
    Select-Object GivenName, Surname, Office, SamAccountName, EmailAddress
}