A custom object is a PowerShell object containing only the properties you choose. Select-Object creates one when trimming a richer object, preserving property boxes while changing the object type. section 8.8 section 10.8
Select process properties
Run Get-Process | Sort-Object CPU -Descending | Select-Object Name,ID,CPU. The pipeline now contains custom objects rather than process objects, so PowerShell formats the output using its general PSObject rules. section 8.8
A custom object still contains properties. To retrieve a property's value instead of another object containing that property, use Select-Object -ExpandProperty. For example, expanding ResourceGroupName returns strings that another command can accept. section 10.8
