Royston
Royston

Reputation: 598

Piping AD-User Information to CSV

I've got some logic/formatting brain block here.

  1. I have a CSV with GivenName and Surname Property to use

  2. I need to pipe that info against the AD User Estate and Return the information on the users in the list with a few properties including their name, Office, SamAccountName and Email address. I've got as far as this:

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

The information is returned but not in a table form and i can't believe i cant seem to figure how to pipe it to a CSV, it's not working out, it is returned like this:

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

Any Ideas why when i | export-csv i don't get the correct format?

Upvotes: 0

Views: 85

Answers (1)

Theo
Theo

Reputation: 61028

As commented, you are using the wrong variable name in your foreach loop. ($employee should be $user) since that is the variable you define in the loop.

Something like this:

$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

As you can see, I'm also naming the properties you want returned, because Get-ADUser by default returns a subset of properties and withour it, you won't get the Office and EmailAddress properties.

Also, I have changed the -like operator into -eq to fetch exact matches.

P.S. Instead of using the Where-Object construction, the code would be more optimized if you use the -Filter like:

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

Upvotes: 1

Related Questions