From bb32b104bc75493fe5b2794e5fbaf7955f9f0653 Mon Sep 17 00:00:00 2001 From: JumpingYang001 Date: Mon, 16 May 2016 23:31:55 -0700 Subject: [PATCH 1/2] Add Sort-Object Pester Unit Test --- test/powershell/Sort-Object.Tests.ps1 | 202 ++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) diff --git a/test/powershell/Sort-Object.Tests.ps1 b/test/powershell/Sort-Object.Tests.ps1 index 9395e957c..aa097f12d 100644 --- a/test/powershell/Sort-Object.Tests.ps1 +++ b/test/powershell/Sort-Object.Tests.ps1 @@ -20,3 +20,205 @@ } } +Describe "Sort-Object DRT Unit Tests" -Tags DRT{ + It "Sort-Object with object array should work"{ + $employee1 = New-Object PSObject -Property @{"FirstName"="Eight"; "LastName"="Eight"; "YearsInMS"=8} + $employee2 = New-Object PSObject -Property @{"FirstName"="Eight"; "YearsInMS"=$null} + $employee3 = New-Object PSObject -Property @{"FirstName"="Minus"; "LastName"="Two"; "YearsInMS"=-2} + $employee4 = New-Object PSObject -Property @{"FirstName"="One"; "LastName"="One"; "YearsInMS"=1} + $employees = @($employee1,$employee2,$employee3,$employee4) + $results = $employees | Sort-Object -Property YearsInMS + + $results[0].FirstName | Should Be "Minus" + $results[0].LastName | Should Be "Two" + $results[0].YearsInMS | Should Be -2 + + $results[1].FirstName | Should Be "Eight" + $results[1].YearsInMS | Should BeNullOrEmpty + + $results[2].FirstName | Should Be "One" + $results[2].LastName | Should Be "One" + $results[2].YearsInMS | Should Be 1 + + $results[3].FirstName | Should Be "Eight" + $results[3].LastName | Should Be "Eight" + $results[3].YearsInMS | Should Be 8 + } + + It "Sort-Object with Non Conflicting Order Entry Keys should work"{ + $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=2} + $employees = @($employee1,$employee2,$employee3) + $ht = @{"e"="YearsInMS"; "descending"=$false; "ascending"=$true} + $results = $employees | Sort-Object -Property $ht -Descending + + $results[0] | Should Be $employees[2] + $results[1] | Should Be $employees[0] + $results[2] | Should Be $employees[1] + } + + It "Sort-Object with Conflicting Order Entry Keys should work"{ + $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=2} + $employees = @($employee1,$employee2,$employee3) + $ht = @{"e"="YearsInMS"; "descending"=$false; "ascending"=$false} + $results = $employees | Sort-Object -Property $ht -Descending + + $results[0] | Should Be $employees[1] + $results[1] | Should Be $employees[0] + $results[2] | Should Be $employees[2] + } + + It "Sort-Object with One Order Entry Key should work"{ + $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=2} + $employees = @($employee1,$employee2,$employee3) + $ht = @{"e"="YearsInMS"; "descending"=$false} + $results = $employees | Sort-Object -Property $ht -Descending + + $results[0] | Should Be $employees[2] + $results[1] | Should Be $employees[0] + $results[2] | Should Be $employees[1] + } + + It "Sort-Object with HistoryInfo object should work"{ + Add-Type -TypeDefinition "public enum PipelineState{NotStarted,Running,Stopping,Stopped,Completed,Failed,Disconnected}" + + $historyInfo1 = New-Object PSObject -Property @{"PipelineId"=1; "Cmdline"="cmd3"; "Status"=[PipelineState]::Completed; "StartTime" = [DateTime]::Now;"EndTime" = [DateTime]::Now.AddSeconds(5.0);} + $historyInfo2 = New-Object PSObject -Property @{"PipelineId"=2; "Cmdline"="cmd1"; "Status"=[PipelineState]::Completed; "StartTime" = [DateTime]::Now;"EndTime" = [DateTime]::Now.AddSeconds(5.0);} + $historyInfo3 = New-Object PSObject -Property @{"PipelineId"=3; "Cmdline"="cmd2"; "Status"=[PipelineState]::Completed; "StartTime" = [DateTime]::Now;"EndTime" = [DateTime]::Now.AddSeconds(5.0);} + + $historyInfos = @($historyInfo1,$historyInfo2,$historyInfo3) + + $results = $historyInfos | Sort-Object + + $results[0] | Should Be $historyInfos[0] + $results[1] | Should Be $historyInfos[1] + $results[2] | Should Be $historyInfos[2] + } + + It "Sort-Object with Non Existing And Null Script Property should work"{ + $n = new-object microsoft.powershell.commands.newobjectcommand + $d = new-object microsoft.powershell.commands.newobjectcommand + $d.TypeName = 'Deetype' + $b = new-object microsoft.powershell.commands.newobjectcommand + $b.TypeName = 'btype' + $a = new-object microsoft.powershell.commands.newobjectcommand + $a.TypeName = 'atype' + $results = $n, $d, $b, 'b', $a | Sort-Object -proper {$_.TypeName} + $results.Count | Should Be 5 + $results[2] | Should Be $a + $results[3] | Should Be $b + $results[4] | Should Be $d + #results[0] and [1] can be any order + } + + It "Sort-Object with Non Existing And Null Property should work"{ + $n = new-object microsoft.powershell.commands.newobjectcommand + $n.TypeName = $null + $d = new-object microsoft.powershell.commands.newobjectcommand + $d.TypeName = 'Deetype' + $b = new-object microsoft.powershell.commands.newobjectcommand + $b.TypeName = 'btype' + $a = new-object microsoft.powershell.commands.newobjectcommand + $a.TypeName = 'atype' + $results = $n, $d, $b, 'b', $a | Sort-Object -prop TypeName + $results.Count | Should Be 5 + $results[0] | Should Be $n + $results[1] | Should Be $a + $results[2] | Should Be $b + $results[3] | Should Be $d + $results[4] | Should Be 'b' + } + + It "Sort-Object with Non Case-Sensitive Unique should work"{ + $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12} + $employees = @($employee1,$employee2,$employee3) + $results = $employees | Sort-Object -Property "LastName" -Descending -Unique + + $results[0] | Should Be $employees[2] + $results[1] | Should Be $employees[1] + $results[2] | Should BeNullOrEmpty + } + + It "Sort-Object with Case-Sensitive Unique should work"{ + $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12} + $employees = @($employee1,$employee2,$employee3) + $results = $employees | Sort-Object -Property "LastName","FirstName" -Descending -Unique -CaseSensitive + + $results[0] | Should Be $employees[2] + $results[1] | Should Be $employees[0] + $results[2] | Should Be $employees[1] + } + + It "Sort-Object with Two Order Entry Keys should work"{ + $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=2} + $employees = @($employee1,$employee2,$employee3) + $ht1 = @{"expression"="LastName"; "ascending"=$false} + $ht2 = @{"expression"="FirstName"; "ascending"=$true} + $results = $employees | Sort-Object -Property @($ht1,$ht2) -Descending + + $results[0] | Should Be $employees[2] + $results[1] | Should Be $employees[1] + $results[2] | Should Be $employees[0] + } + + It "Sort-Object with -Descending:$false and Two Order Entry Keys should work"{ + $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12} + $employees = @($employee1,$employee2,$employee3) + $results = $employees | Sort-Object -Property "LastName","FirstName" -Descending:$false + + $results[0] | Should Be $employees[1] + $results[1] | Should Be $employees[0] + $results[2] | Should Be $employees[2] + } + + It "Sort-Object with -Descending and Two Order Entry Keys should work"{ + $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12} + $employees = @($employee1,$employee2,$employee3) + $results = $employees | Sort-Object -Property "LastName","FirstName" -Descending + + $results[0] | Should Be $employees[2] + $results[1] | Should Be $employees[0] + $results[2] | Should Be $employees[1] + } + + It "Sort-Object with Two Order Entry Keys with asc=true should work"{ + $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12} + $employees = @($employee1,$employee2,$employee3) + $ht1 = @{"e"="FirstName"; "asc"=$true} + $ht2 = @{"e"="LastName";} + $results = $employees | Sort-Object -Property @($ht1,$ht2) -Descending + + $results[0] | Should Be $employees[1] + $results[1] | Should Be $employees[2] + $results[2] | Should Be $employees[0] + } + + It "Sort-Object with Descending No Property should work"{ + $employee1 = 1 + $employee2 = 2 + $employee3 = 3 + $employees = @($employee1,$employee2,$employee3) + $results = $employees | Sort-Object -Descending + + $results[0] | Should Be 3 + $results[1] | Should Be 2 + $results[2] | Should Be 1 + } +} \ No newline at end of file From 8cd16e81c17e5fdba43860cfdb786d47d38a085c Mon Sep 17 00:00:00 2001 From: JumpingYang001 Date: Thu, 19 May 2016 21:37:41 -0700 Subject: [PATCH 2/2] Update fix based on comments for Sort-Object Pester Test --- test/powershell/Sort-Object.Tests.ps1 | 68 +++++++++++++-------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/test/powershell/Sort-Object.Tests.ps1 b/test/powershell/Sort-Object.Tests.ps1 index aa097f12d..4ed3ef43d 100644 --- a/test/powershell/Sort-Object.Tests.ps1 +++ b/test/powershell/Sort-Object.Tests.ps1 @@ -22,10 +22,10 @@ Describe "Sort-Object DRT Unit Tests" -Tags DRT{ It "Sort-Object with object array should work"{ - $employee1 = New-Object PSObject -Property @{"FirstName"="Eight"; "LastName"="Eight"; "YearsInMS"=8} - $employee2 = New-Object PSObject -Property @{"FirstName"="Eight"; "YearsInMS"=$null} - $employee3 = New-Object PSObject -Property @{"FirstName"="Minus"; "LastName"="Two"; "YearsInMS"=-2} - $employee4 = New-Object PSObject -Property @{"FirstName"="One"; "LastName"="One"; "YearsInMS"=1} + $employee1 = [pscustomobject]@{"FirstName"="Eight"; "LastName"="Eight"; "YearsInMS"=8} + $employee2 = [pscustomobject]@{"FirstName"="Eight"; "YearsInMS"=$null} + $employee3 = [pscustomobject]@{"FirstName"="Minus"; "LastName"="Two"; "YearsInMS"=-2} + $employee4 = [pscustomobject]@{"FirstName"="One"; "LastName"="One"; "YearsInMS"=1} $employees = @($employee1,$employee2,$employee3,$employee4) $results = $employees | Sort-Object -Property YearsInMS @@ -46,9 +46,9 @@ Describe "Sort-Object DRT Unit Tests" -Tags DRT{ } It "Sort-Object with Non Conflicting Order Entry Keys should work"{ - $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} - $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} - $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=2} + $employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=2} $employees = @($employee1,$employee2,$employee3) $ht = @{"e"="YearsInMS"; "descending"=$false; "ascending"=$true} $results = $employees | Sort-Object -Property $ht -Descending @@ -59,9 +59,9 @@ Describe "Sort-Object DRT Unit Tests" -Tags DRT{ } It "Sort-Object with Conflicting Order Entry Keys should work"{ - $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} - $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} - $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=2} + $employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=2} $employees = @($employee1,$employee2,$employee3) $ht = @{"e"="YearsInMS"; "descending"=$false; "ascending"=$false} $results = $employees | Sort-Object -Property $ht -Descending @@ -72,9 +72,9 @@ Describe "Sort-Object DRT Unit Tests" -Tags DRT{ } It "Sort-Object with One Order Entry Key should work"{ - $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} - $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} - $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=2} + $employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=2} $employees = @($employee1,$employee2,$employee3) $ht = @{"e"="YearsInMS"; "descending"=$false} $results = $employees | Sort-Object -Property $ht -Descending @@ -87,9 +87,9 @@ Describe "Sort-Object DRT Unit Tests" -Tags DRT{ It "Sort-Object with HistoryInfo object should work"{ Add-Type -TypeDefinition "public enum PipelineState{NotStarted,Running,Stopping,Stopped,Completed,Failed,Disconnected}" - $historyInfo1 = New-Object PSObject -Property @{"PipelineId"=1; "Cmdline"="cmd3"; "Status"=[PipelineState]::Completed; "StartTime" = [DateTime]::Now;"EndTime" = [DateTime]::Now.AddSeconds(5.0);} - $historyInfo2 = New-Object PSObject -Property @{"PipelineId"=2; "Cmdline"="cmd1"; "Status"=[PipelineState]::Completed; "StartTime" = [DateTime]::Now;"EndTime" = [DateTime]::Now.AddSeconds(5.0);} - $historyInfo3 = New-Object PSObject -Property @{"PipelineId"=3; "Cmdline"="cmd2"; "Status"=[PipelineState]::Completed; "StartTime" = [DateTime]::Now;"EndTime" = [DateTime]::Now.AddSeconds(5.0);} + $historyInfo1 = [pscustomobject]@{"PipelineId"=1; "Cmdline"="cmd3"; "Status"=[PipelineState]::Completed; "StartTime" = [DateTime]::Now;"EndTime" = [DateTime]::Now.AddSeconds(5.0);} + $historyInfo2 = [pscustomobject]@{"PipelineId"=2; "Cmdline"="cmd1"; "Status"=[PipelineState]::Completed; "StartTime" = [DateTime]::Now;"EndTime" = [DateTime]::Now.AddSeconds(5.0);} + $historyInfo3 = [pscustomobject]@{"PipelineId"=3; "Cmdline"="cmd2"; "Status"=[PipelineState]::Completed; "StartTime" = [DateTime]::Now;"EndTime" = [DateTime]::Now.AddSeconds(5.0);} $historyInfos = @($historyInfo1,$historyInfo2,$historyInfo3) @@ -135,9 +135,9 @@ Describe "Sort-Object DRT Unit Tests" -Tags DRT{ } It "Sort-Object with Non Case-Sensitive Unique should work"{ - $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} - $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} - $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12} + $employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12} $employees = @($employee1,$employee2,$employee3) $results = $employees | Sort-Object -Property "LastName" -Descending -Unique @@ -147,9 +147,9 @@ Describe "Sort-Object DRT Unit Tests" -Tags DRT{ } It "Sort-Object with Case-Sensitive Unique should work"{ - $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} - $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} - $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12} + $employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12} $employees = @($employee1,$employee2,$employee3) $results = $employees | Sort-Object -Property "LastName","FirstName" -Descending -Unique -CaseSensitive @@ -159,9 +159,9 @@ Describe "Sort-Object DRT Unit Tests" -Tags DRT{ } It "Sort-Object with Two Order Entry Keys should work"{ - $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} - $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} - $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=2} + $employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=2} $employees = @($employee1,$employee2,$employee3) $ht1 = @{"expression"="LastName"; "ascending"=$false} $ht2 = @{"expression"="FirstName"; "ascending"=$true} @@ -173,9 +173,9 @@ Describe "Sort-Object DRT Unit Tests" -Tags DRT{ } It "Sort-Object with -Descending:$false and Two Order Entry Keys should work"{ - $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} - $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} - $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12} + $employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12} $employees = @($employee1,$employee2,$employee3) $results = $employees | Sort-Object -Property "LastName","FirstName" -Descending:$false @@ -185,9 +185,9 @@ Describe "Sort-Object DRT Unit Tests" -Tags DRT{ } It "Sort-Object with -Descending and Two Order Entry Keys should work"{ - $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} - $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} - $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12} + $employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12} $employees = @($employee1,$employee2,$employee3) $results = $employees | Sort-Object -Property "LastName","FirstName" -Descending @@ -197,9 +197,9 @@ Describe "Sort-Object DRT Unit Tests" -Tags DRT{ } It "Sort-Object with Two Order Entry Keys with asc=true should work"{ - $employee1 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} - $employee2 = New-Object PSObject -Property @{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} - $employee3 = New-Object PSObject -Property @{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12} + $employee1 = [pscustomobject]@{"FirstName"="john"; "LastName"="smith"; "YearsInMS"=5} + $employee2 = [pscustomobject]@{"FirstName"="joesph"; "LastName"="smith"; "YearsInMS"=15} + $employee3 = [pscustomobject]@{"FirstName"="john"; "LastName"="smyth"; "YearsInMS"=12} $employees = @($employee1,$employee2,$employee3) $ht1 = @{"e"="FirstName"; "asc"=$true} $ht2 = @{"e"="LastName";}