我这里有一些逻辑/格式化的脑筋。
我有一个具有GivenName和Surname属性的CSV
我需要将该信息传递给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
时我没有得到正确的格式吗?
答案 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
}