Exercise 1: Why Format-Table Breaks a Downstream Filter — Possible Solution ==================================================================== WHY THE FILTER FAILS ------------------------------ Per this chapter, Format-Table doesn't pass process objects through unchanged - it converts the pipeline's contents into special internal formatting-instruction objects meant only to be displayed on a screen or written to a text file. By the time Where-Object receives anything in this pipeline, it is no longer receiving real process objects with a genuine CPU property attached - it's receiving formatting instructions that have no such property at all. Since $_.CPU doesn't meaningfully exist on those objects anymore, the -gt 10 comparison can't work the way it would against a real process object. THE UNDERLYING RULE ------------------------------ Per this chapter, Format-Table/Format-List must always be the LAST thing in a pipeline, followed only by something like Out-Host or Out-File (or nothing) - never by Where-Object, Sort-Object, Select-Object, or any other cmdlet that expects real, queryable objects. Filtering and sorting have to happen BEFORE formatting, not after: Get-Process | Where-Object { $_.CPU -gt 10 } | Format-Table Name, CPU would work correctly, because the filtering happens while the objects are still real process objects. WHY THIS WORKS AS AN ANSWER ------------------------------ It correctly explains that Format-Table converts objects into non-queryable formatting instructions, correctly identifies that the real CPU property is no longer present by the time Where-Object runs, and correctly states the underlying rule (format last, filter/sort first) rather than just describing the symptom.