I'm not a big fan of using long lists of values in a cmdlet, and I'm dead set against the use of "one-liners". Why obfuscate your meaning in a jumble of run-on pipes and punctuation?
But, to answer your question, your code will work.
Additionally, I think this is a lot clearer (it's almost the same code, just reformatted):
$props = "DisplayName,GivenName,Surname,SamAccountName,EmailAddress,Userprincipalname,title,Office,description,co,personalTitle,DepartmentNumber,employeeNumber,employeeType,manager" -split ","
import-csv c:\temp\input.csv |
ForEach-Object {
Get-ADUser -filter {employeeID -eq $id -or employeeNumber -eq $id} -Properties $props |
Select-Object Surname,GivenName,DisplayName,SamAccountName,EmailAddress,Userprincipalname,
title,Office,employeeNumber,employeeType,description,co,personalTitle,
@{Name='DepartmentNumber';Expression={[string]::join(";", $($_.DepartmentNumber))}},
@{name='Manager';expression={$_.manager -match '(?<=CN=).+?(?=,)'|Out-Null;$Matches.Values}}
}| Export-CSV -Path C:\temp\output.csv -Notypeinformation