CSV var as表达式为空,显示为{}



我遇到了一个小问题。我有一个CSV,里面有一些名字。我需要获得这些用户的电子邮件地址,所以我创建了一个小脚本,可以在AD.中查找具有该名字和姓氏的用户

之后,我想将其导出到一个新的CSV文件,但保留第一个CSV文件中的电话号码,以便在新的CSV导出中也可以使用。

最后一部分似乎不起作用。在输出中,该表达式显示为{}。

有人能帮我吗?

$csv = import-csv -path C:usersda6desktopUsersZonderEmail.csv
$output = @()
foreach ($i in $csv) {

$givenname = $i.Voornaam
$lastname = $i.Achternaam
$number = $i.IpPhone
$output += try {Get-ADUser -Filter {givenname -eq $givenname -and surname -eq $lastname} | select Name, UserPrincipalName, @{ name="ipphone"; expression=$number}} catch {}
}

基本上,代码的错误在于您忘记了计算属性的expressionoart中的左括号{

还要注意,-Filter应该是字符串,而不是脚本块。

最后,使用+=添加到数组是一个坏习惯,因为每次添加时都需要在内存中重建整个数组。

最好让PowerShell从循环中收集值:

$csv = Import-Csv -Path 'C:usersda6desktopUsersZonderEmail.csv'
$output = foreach ($item in $csv) {
Get-ADUser -Filter "GivenName -eq '$($item.Voornaam)' -and Surname -eq '$($item.Achternaam)'" -Properties EmailAddress | 
Select-Object Name, UserPrincipalName, @{ Name="ipphone"; Expression = {$item.IpPhone}}, EmailAddress
}
# output to new CSV file
$output | Export-Csv -Path 'C:usersda6desktopUsersMetEmail.csv' -NoTypeInformation

最新更新