Measuring objects in PowerShell 3.0
The Measure-Object cmdlet gives us a great way to find minimum and maximum values in a collection of objects. For example, if we want to know the smallest and largest size of a file in the current directory:
PS> Get-ChildItem | Measure-Object -Property Length -Minimum -Maximum
Count : 2751
Average :
Sum :
Maximum : 56297240
Minimum : 35
Property : Length
In PowerShell 2.0 it only worked with numeric properties (integers), we couldn't use it to compare properties like LastWriteTime (DateTime). In PowerShell 3.0 we can now use the Minimum and Maximum parameters to work with anything that is IComparable. We can tell if an instance of an object is IComparable by checking if the CompareTo method exist on the instance:
PS> $object.PSObject.Methods | Where-Object {$_.Name -eq 'CompareTo'}
But there's a simpler way using the -is operator. If we get $true - we can measure it:
PS> $object -is [IComparable]
In this example we measure the LastWriteTime property, which is a DateTime object. We can see the modification time of the oldest and newest files in the current directory.
PS> Get-ChildItem | Measure-Object -Property LastWriteTime -Minimum -Maximum
Count : 2844
Average :
Sum :
Maximum : 4/8/2012 8:03:32 PM
Minimum : 9/4/2004 3:00:00 AM
Property : LastWriteTime