Home > other >  CSV var as expression is empty, shown as {}
CSV var as expression is empty, shown as {}

Time:04-06

I got a small issue. I have a CSV with some names. I needed to get the email addresses of those users, so I created a small script that will find users with that firstname and lastname in AD.

After that, I wanted to export it to a new CSV file, but keep the phone-numbers from the first CSV file so its also available in the new CSV export.

That last part don't seem to work. In the output that expression is shown as {}.

Can someone help me?

$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 {}
}

CodePudding user response:

Basically what is wrong with your code is that you forgot the opening bracket { in the expression oart of the calculated property.

Also note that -Filter should be a string, not a scriptblock.

Lastly, adding to an array with = is a bad habit, as the entire array needs to be rebuilt in memory on every addition.

Better let PowerShell collect the values from the loop:

$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
  • Related