One thing that seems to keep causing confusion is using Select-Object to pick off one or more properties from a set of objects:
PS> Get-CimInstance -ClassName Win32_Share | select Path
Path
—-
C:\WINDOWS
C:\
C:\windows\system32\spool\drivers
C:\Users
The gap in the output is because the IPC$ share doesn’t have a path defined.
What you have is a ‘Selected’ version of the original object
PS> Get-CimInstance -ClassName Win32_Share | select Path | Get-Member
TypeName: Selected.Microsoft.Management.Infrastructure.CimInstance
Name MemberType Definition
—- ———- ———-
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Path NoteProperty string Path=C:\WINDOWS
Very often you’ll only want the value of the property. In which case you need to use the –ExpandProperty parameter on Select-Object
PS> Get-CimInstance -ClassName Win32_Share | select -ExpandProperty Path
C:\WINDOWS
C:\
C:\windows\system32\spool\drivers
C:\Users