Format output of csv

I am looking to format the output of an object, my code is below:

Get-ADUser -Filter {department -like "*"} -Properties * |Select-Object givenname, surname, department, emailaddress, office, manager |Export-Csv "c:\test.csv"

the output is as follows: John, Doe, IT, email@domain.com, Office, CN=John Manager, OU=admin, DC=domain, DC=local

I would like to format the Manager portion and knock out the domain objects so it would simply show John Manger. How could I accomplish this please?

 

 

You can do this with a calculated value

Get-ADUser -Filter {department -like "*"} -Properties * |
Select-Object givenname, surname, department, emailaddress, office, 
@{n='manager';e={(get-aduser $_.manager).name}} |
Export-Csv "c:\test.csv"

I like this:

Get-ADUser -Filter {department -like "*"} -Properties * |
Select-Object givenname, surname, department, emailaddress, office, 
@{N="manager";E={($_.manager.split(","))[0].replace("CN=","")}}|
Export-Csv -path "c:\test.csv" -Encoding oem -NoTypeInformation

get-aduser only once,increase efficiency with a large number of users

Never select all properties unless you absolutely really need to. Only select what you want.
For example:

By default you already get this

# Testing by just select the first user from AD.
(Get-ADUser -Filter '*' )[0] 

# Results

DistinguishedName : CN=Administrator...
Enabled           : True
GivenName         : 
Name              : Administrator
ObjectClass       : user
ObjectGUID        : 4113...
SamAccountName    : Administrator
SID               : S-1-5-2...
Surname           : 
UserPrincipalName : Administrator@...

So you only need to add these, from what you show you wanted

(Get-ADUser -Filter '*' -Properties department, emailaddress, office, manager)[0] 

# Results

Department        : 
DistinguishedName : CN=Administrator,...
EmailAddress      : Administrator...
Enabled           : True
GivenName         : 
Manager           : CN=Administrator,...
Name              : Administrator
ObjectClass       : user
ObjectGUID        : 41133...
Office            : 
SamAccountName    : Administrator
SID               : S-1-5-2...
Surname           : 
UserPrincipalName : Administrator@...

So, to get this…

John, Doe, IT, email@domain.com, Office, SomeManagerName

… just do this…

(Get-ADUser -Filter '*' -Properties department, emailaddress, office, manager)[0] | 
Select-Object -Property givenname, surname, department, emailaddress, office, 
@{Name = 'Manager';Expression = {$($PSItem.manager -replace '^CN=|,.*$' )}}

# Results

givenname    : 
surname      : 
department   : 
emailaddress : Administrator@...
office       : 
Manager      : Administrator


# Or as screen table
(Get-ADUser -Filter '*' -Properties department, emailaddress, office, manager)[0] | 
Select-Object -Property givenname, surname, department, emailaddress, office, 
@{Name = 'Manager';Expression = {$($_.manager -replace '^CN=|,.*$' )}} | 
Format-Table -AutoSize


# Or Export to csv
(Get-ADUser -Filter '*' -Properties department, emailaddress, office, manager)[0] | 
Select-Object -Property givenname, surname, department, emailaddress, office, 
@{Name = 'Manager';Expression = {$($_.manager -replace '^CN=|,.*$' )}} | 
Export-Csv -Path 'C:\temp\Test.csv' -NoTypeInformation

Import-Csv -Path 'C:\temp\Test.csv'

# Results

givenname    : 
surname      : 
department   : 
emailaddress : Administrator@...
office       : 
Manager      : Administrator


Import-Csv -Path 'C:\temp\Test.csv' | 
Format-Table -AutoSize

# Results

givenname surname department emailaddress         office Manager      
--------- ------- ---------- ------------         ------ -------      
                             Administrator@...           Administrator

# Or as a variable that you can read back from for later use case, without the need for a separate file

$ADUserRecord = (Get-ADUser -Filter '*' -Properties department, emailaddress, office, manager)[0] | 
Select-Object -Property givenname, surname, department, emailaddress, office, 
@{Name = 'Manager';Expression = {$($_.manager -replace '^CN=|,.*$' )}}

$ADUserRecord.emailaddress

# Or this way, from the default variable $PSDrive.
Get-Content -Path 'Variable:\ADUserRecord'

@postanote you are right,thanks!

No worries.