This is post 4 of 7 in this series.
Some cmdlets are designed to work with any object. Take a look at the –InputObject parameter of Sort-Object.
-InputObject []
Specifies the
objects to sort.
When you use the
InputObject parameter to submit a collection of items, Sort-Object
receives one object
that represents the collection. Because one object cannot be
sorted, Sort-Object
returns the entire collection unchanged.
To sort objects,
pipe them to Sort-Object.
Required? false
Position? named
Default value none
Accept pipeline
input? true (ByValue)
Accept wildcard
characters? false
Whenever you see a parameter accepting objects of type Object or PSObject, then you know that this cmdlet can handle anything. Let’s
take a look at the results of Get-SMBShare
without using Sort-Object
PS C:\> Get-SmbShare
Name ScopeName
Path Description
---- ---------
----
-----------
ADMIN$ *
C:\WINDOWS
Remote Admin
C$ * C:\ Default
share
D$ * D:\ Default share
E$ * E:\ Default
share
IPC$ *
Remote IPC
print$ *
C:\WINDOWS\system32\spool\drivers Printer Drivers
Just by looking at it, the cmdlet sends the objects into the
pipeline sorted alphabetically on the Name
property. Now let’s pipe it to Sort-Object.
PS C:\> Get-SmbShare | Sort-Object
Name ScopeName
Path
Description
---- ---------
---- -----------
ADMIN$ *
C:\WINDOWS
Remote Admin
C$ * C:\ Default
share
D$ * D:\ Default
share
E$ * E:\
Default share
IPC$ *
Remote IPC
print$ *
C:\WINDOWS\system32\spool\drivers Printer Drivers
The results are the same.
Well, that was useful. The thing
that we forgot to do was to tell Sort-Object
how to sort our objects.
PS C:\> Get-SmbShare | Sort-Object -Property Description
Name ScopeName
Path
Description
---- ---------
----
-----------
C$ * C:\ Default
share
D$ * D:\ Default
share
E$ * E:\ Default
share
print$ *
C:\WINDOWS\system32\spool\drivers Printer Drivers
ADMIN$ *
C:\WINDOWS
Remote Admin
IPC$ *
Remote IPC
For this cmdlet to do anything, you need to give it some
instructions. In this case, which
property to sort on. Sort-Object has
been around since PowerShell v1.0. Get-SMBShare was introduced in
PowerShell v3.0, but only if you are running Windows 8 or newer. In other words, the author of the Sort-Object cmdlet had no idea that the
cmdlet Get-SMBShare would ever be
created. The author simple coded the Sort-Object cmdlet to accept all
objects. Because of this, we can
continue to sort objects evening with PowerShell v5.1.
Comments