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

CSV var as expression is empty, shown as {}

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

在那之后,我想将它导出到一个新的 CSV 文件,但保留第一个 CSV 文件中的 phone-numbers,因此它也可以在新的 CSV 导出中使用。

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

有人可以帮助我吗?

$csv = import-csv -path C:\users\da6\desktop\UsersZonderEmail.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 {}
}

基本上,您的代码有什么问题是您忘记了计算 属性.

expression 开头括号 {

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

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

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

$csv = Import-Csv -Path 'C:\users\da6\desktop\UsersZonderEmail.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:\users\da6\desktop\UsersMetEmail.csv' -NoTypeInformation