Bird
Raised Fist0
PowerShellscripting~5 mins

Sort-Object for ordering in PowerShell

Choose your learning style10 modes available
Introduction

Sorting helps you organize data so it's easier to read and understand. Sort-Object arranges items in order, like sorting names alphabetically.

You have a list of files and want to see them by date from newest to oldest.
You want to organize a list of names alphabetically.
You need to sort numbers from smallest to largest.
You want to display processes sorted by memory usage.
You want to sort data before exporting it to a report.
Syntax
PowerShell
Sort-Object [-Property] <string[]> [-Descending] [-Unique] [-CaseSensitive] [-Culture <string>] [-Stable]

-Property specifies the property or value to sort by. If omitted, it sorts the objects themselves.

-Descending sorts from highest to lowest instead of lowest to highest.

Examples
Sorts running processes by CPU usage in ascending order.
PowerShell
Get-Process | Sort-Object -Property CPU
Sorts files by last modified date, newest first.
PowerShell
Get-ChildItem | Sort-Object -Property LastWriteTime -Descending
Sorts a list of strings alphabetically.
PowerShell
'apple','banana','cherry' | Sort-Object
Sorts numbers from largest to smallest.
PowerShell
5,3,9,1 | Sort-Object -Descending
Sample Program

This script creates a list of people with their ages. It sorts them by age from youngest to oldest and prints their names with ages.

PowerShell
$data = @(
    @{Name='John'; Age=30},
    @{Name='Anna'; Age=25},
    @{Name='Mike'; Age=35}
)

$data | Sort-Object -Property Age | ForEach-Object { "$($_.Name) is $($_.Age) years old" }
OutputSuccess
Important Notes

Sort-Object works well with both simple values and complex objects.

Use -Descending to reverse the order.

Sorting large data sets may take more time.

Summary

Sort-Object arranges data in order to make it easier to understand.

You can sort by any property or value.

Use -Descending to sort from highest to lowest.

Practice

(1/5)
1. What does the PowerShell cmdlet Sort-Object do?
easy
A. It creates new objects from scratch.
B. It arranges objects in a specified order based on property values.
C. It deletes objects from a list.
D. It counts the number of objects in a list.

Solution

  1. Step 1: Understand the purpose of Sort-Object

    Sort-Object is used to order or arrange objects based on their properties or values.
  2. Step 2: Compare options with the cmdlet's function

    Only It arranges objects in a specified order based on property values. correctly describes arranging objects in order. Other options describe unrelated actions.
  3. Final Answer:

    It arranges objects in a specified order based on property values. -> Option B
  4. Quick Check:

    Sort-Object orders data = C [OK]
Hint: Sort-Object means arranging data in order [OK]
Common Mistakes:
  • Confusing sorting with deleting or counting
  • Thinking Sort-Object creates new objects
  • Assuming it only works on numbers
2. Which of the following is the correct syntax to sort a list of numbers stored in $numbers in descending order?
easy
A. $numbers | Sort-Object Descending
B. $numbers | Sort-Object /Descending
C. $numbers | Sort-Object -descend
D. $numbers | Sort-Object -Descending

Solution

  1. Step 1: Recall the correct parameter for descending order

    The correct parameter is -Descending with a dash and full word.
  2. Step 2: Check each option's syntax

    $numbers | Sort-Object -Descending uses the correct dash and spelling. Options A, C, and D have syntax errors or wrong parameter format.
  3. Final Answer:

    $numbers | Sort-Object -Descending -> Option D
  4. Quick Check:

    Use dash and full '-Descending' [OK]
Hint: Use dash before parameters like -Descending [OK]
Common Mistakes:
  • Omitting the dash before parameters
  • Using incorrect parameter spelling
  • Using slashes instead of dashes
3. What is the output of this PowerShell code?
$data = @( @{Name='John'; Age=30}, @{Name='Anna'; Age=25}, @{Name='Mike'; Age=35} )
$data | Sort-Object Age | ForEach-Object { $_.Name }
medium
A. Anna, John, Mike
B. John, Anna, Mike
C. Mike, John, Anna
D. Anna, Mike, John

Solution

  1. Step 1: Understand sorting by Age property

    The code sorts the array of objects by the Age property in ascending order: 25, 30, 35.
  2. Step 2: Map sorted objects to their Name property

    After sorting, the names in order are Anna (25), John (30), Mike (35).
  3. Final Answer:

    Anna, John, Mike -> Option A
  4. Quick Check:

    Sort by Age ascending = Anna, John, Mike [OK]
Hint: Sort-Object defaults to ascending order [OK]
Common Mistakes:
  • Assuming Sort-Object sorts descending by default
  • Mixing up property names
  • Not accessing the Name property after sorting
4. You run this code but get an error:
$items = @(5, 3, 8, 1)
$items | Sort-Object -descendingg

What is the problem?
medium
A. You must use parentheses around the array.
B. Sort-Object cannot sort numbers.
C. The parameter '-descendingg' is misspelled.
D. The pipe operator '|' is not allowed here.

Solution

  1. Step 1: Check the parameter spelling

    The parameter should be -Descending, but it is misspelled as -descendingg.
  2. Step 2: Understand impact of misspelling

    PowerShell does not recognize the misspelled parameter, causing an error.
  3. Final Answer:

    The parameter '-descendingg' is misspelled. -> Option C
  4. Quick Check:

    Parameter spelling must be exact [OK]
Hint: Check parameter spelling carefully [OK]
Common Mistakes:
  • Misspelling parameters
  • Thinking Sort-Object can't sort numbers
  • Misunderstanding pipe usage
5. You have this list of objects:
$people = @( @{Name='Sam'; Score=90}, @{Name='Liz'; Score=90}, @{Name='Tom'; Score=85} )

You want to sort by Score descending, but if scores are equal, sort by Name ascending. Which command achieves this?
hard
A. $people | Sort-Object -Property @{Expression='Score';Descending=$true}, @{Expression='Name';Descending=$false}
B. $people | Sort-Object Name, Score -Descending
C. $people | Sort-Object Score -Descending | Sort-Object Name
D. $people | Sort-Object -Property Score, Name -Descending

Solution

  1. Step 1: Understand sorting by multiple properties with different orders

    You want Score sorted descending and Name sorted ascending when scores tie.
  2. Step 2: Analyze each option's approach

    $people | Sort-Object -Property @{Expression='Score';Descending=$true}, @{Expression='Name';Descending=$false} uses script blocks to specify descending for Score and ascending for Name correctly. $people | Sort-Object -Property Score, Name -Descending applies descending to both, which is wrong. $people | Sort-Object Score -Descending | Sort-Object Name sorts twice, losing the first order. $people | Sort-Object Name, Score -Descending sorts Name first, which is incorrect order.
  3. Final Answer:

    $people | Sort-Object -Property @{Expression='Score';Descending=$true}, @{Expression='Name';Descending=$false} -> Option A
  4. Quick Check:

    Use script blocks for mixed ascending/descending [OK]
Hint: Use script blocks to mix ascending and descending [OK]
Common Mistakes:
  • Applying -Descending to all properties at once
  • Sorting twice losing original order
  • Sorting properties in wrong priority order
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard