Search code examples
powershellsortingcustomization

PowerShell Custom Order Sorting


I have a simple script that runs a cmdlet of a 3rd party application and outputs a table with 3 columns - Name, Result, JobName. Result only contains one of three values: Success, Warning, or Failed.

Output:

Name      Result   JobName                          
----      ------   -------                          
server1   Success  servers-A            
server2   Success  servers-A            
server3   Warning  servers-A            
server4   Success  servers-A   
server5   Warning  servers-B            
server6   Success  servers-B            
server7   Failed   servers-C            
server8   Failed   servers-C   

What I'd like to do is sort the table by the Result column but in the following custom order (order of importance): Failed, Warning, then Success.

Example

Name    Result  JobName    
----    ------  -------                      
server7 Failed  servers-C            
server8 Failed  servers-C
server3 Warning servers-A            
server5 Warning servers-B            
server1 Success servers-A            
server2 Success servers-A            
server4 Success servers-A   
server6 Success servers-B

How can this be achieved?


Solution

  • Here is a script block option:

    ForEach ($Result in 'Success','Warning','Failed') {
        $Obj | Where-Object {$_.Result -eq $Result } | Sort-Object Name
    }
    

    Assumes that your cmdlet has output the original object into a variable named $Obj.