Bird
Raised Fist0
PowerShellscripting~10 mins

PowerShell vs Bash vs CMD comparison - Visual Side-by-Side Comparison

Choose your learning style10 modes available
Concept Flow - PowerShell vs Bash vs CMD comparison
Start: Choose Shell
↓
PowerShell
↓
Commands
↓
Output
↓
Summary
This flow shows choosing a shell, comparing their commands and outputs, then summarizing differences.
Execution Sample
PowerShell
powershell -Command "Get-Process | Select-Object -First 3"
bash -c "ps | head -3"
cmd /c "tasklist | findstr /R /C:\"^[^ ]\" | more +3"
Runs a command in each shell to list first 3 running processes.
Execution Table
StepShellCommandActionOutput Example
1PowerShellGet-Process | Select-Object -First 3Lists first 3 processes with detailed infoShows process names, IDs, CPU usage
2Bashps | head -3Lists first 3 lines of process listShows PID, TTY, TIME, CMD columns
3CMDtasklist | findstr /R /C:"^[^ ]" | more +3Lists processes skipping header linesShows Image Name, PID, Session Name, Mem Usage
4ComparisonN/ACompare output format and command stylePowerShell is object-based; Bash and CMD text-based
5SummaryN/ASummarize differencesPowerShell: rich objects, Bash: Unix style, CMD: legacy Windows
💡 All commands executed and outputs compared to understand differences.
Variable Tracker
ShellCommandOutput TypeOutput Detail
PowerShellGet-Process | Select-Object -First 3ObjectsProcess objects with properties like Name, Id, CPU
Bashps | head -3TextText lines showing process info columns
CMDtasklist | findstr /R /C:"^[^ ]" | more +3TextText lines with process names and IDs
Key Moments - 3 Insights
Why does PowerShell output look different from Bash and CMD?
PowerShell outputs objects with properties, not plain text lines, as shown in execution_table row 1 vs rows 2 and 3.
Why does CMD command use findstr and more to filter output?
CMD outputs plain text with headers; findstr and more skip headers to show only processes, as in execution_table row 3.
Are Bash and CMD commands interchangeable?
No, Bash commands use Unix syntax and tools, CMD uses Windows commands; they differ in syntax and output format (rows 2 and 3).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, which shell outputs objects instead of plain text?
APowerShell
BBash
CCMD
DAll output plain text
💡 Hint
Check the 'Output Example' column in rows 1-3 of the execution_table.
At which step does the CMD command filter out header lines?
AStep 1
BStep 3
CStep 2
DStep 4
💡 Hint
Look at the 'Action' column for CMD in execution_table row 3.
If you want detailed process info with properties, which shell is best?
ABash
BCMD
CPowerShell
DNone of these
💡 Hint
Refer to the 'Output Detail' in variable_tracker for PowerShell.
Concept Snapshot
PowerShell vs Bash vs CMD comparison:
- PowerShell outputs rich objects, uses cmdlets.
- Bash uses Unix commands, outputs text.
- CMD is Windows legacy shell, text output.
- Commands differ in syntax and output style.
- Choose shell based on task and environment.
Full Transcript
This visual compares PowerShell, Bash, and CMD shells by running commands to list processes. PowerShell outputs objects with detailed properties, Bash and CMD output plain text lines. CMD requires extra filtering to skip headers. The flow shows choosing a shell, running commands, and comparing outputs. Key points include PowerShell's object output, CMD's legacy text filtering, and Bash's Unix style. Quiz questions test understanding of output types and command steps.

Practice

(1/5)
1. Which shell is object-based and primarily designed for Windows automation?
easy
A. CMD
B. Bash
C. PowerShell
D. Zsh

Solution

  1. Step 1: Understand shell types

    PowerShell is known for handling objects, unlike Bash and CMD which handle text.
  2. Step 2: Identify platform focus

    PowerShell is designed mainly for Windows automation, while Bash is common on Linux/macOS and CMD is basic Windows shell.
  3. Final Answer:

    PowerShell -> Option C
  4. Quick Check:

    Object-based Windows shell = PowerShell [OK]
Hint: PowerShell = objects + Windows automation [OK]
Common Mistakes:
  • Confusing Bash as object-based
  • Thinking CMD is object-based
  • Selecting shells not related to Windows
2. Which of the following is the correct way to list files in PowerShell?
easy
A. ls -l
B. listfiles
C. dir /w
D. Get-ChildItem

Solution

  1. Step 1: Recall PowerShell commands

    PowerShell uses cmdlets like Get-ChildItem to list files.
  2. Step 2: Compare with other shells

    ls -l is Bash/Linux syntax, dir /w is CMD syntax, listfiles is invalid.
  3. Final Answer:

    Get-ChildItem -> Option D
  4. Quick Check:

    PowerShell file list = Get-ChildItem [OK]
Hint: PowerShell cmdlets start with Get- or Set- [OK]
Common Mistakes:
  • Using Bash command ls -l in PowerShell
  • Using CMD dir /w in PowerShell
  • Typing invalid commands like listfiles
3. What will be the output of this PowerShell command?
Get-Process | Where-Object { $_.CPU -gt 100 }
medium
A. Lists all processes with CPU usage less than 100 seconds
B. Lists all processes with CPU usage greater than 100 seconds
C. Shows an error because CPU property does not exist
D. Lists all processes regardless of CPU usage

Solution

  1. Step 1: Understand Get-Process output

    Get-Process returns process objects with a CPU property showing CPU time in seconds.
  2. Step 2: Analyze Where-Object filter

    The filter $_.CPU -gt 100 selects processes with CPU time greater than 100 seconds.
  3. Final Answer:

    Lists all processes with CPU usage greater than 100 seconds -> Option B
  4. Quick Check:

    Filter CPU > 100 seconds = Lists all processes with CPU usage greater than 100 seconds [OK]
Hint: Where-Object filters objects by property conditions [OK]
Common Mistakes:
  • Confusing greater than (gt) with less than
  • Assuming CPU property is missing
  • Thinking it lists all processes without filtering
4. Identify the error in this PowerShell command that tries to list files:
ls -l | grep ".txt"
medium
A. PowerShell does not support ls -l syntax
B. grep is not a native PowerShell command
C. Quotes around .txt should be single quotes
D. The pipe symbol | is invalid in PowerShell

Solution

  1. Step 1: Check command compatibility

    PowerShell supports ls alias but not with -l option; it uses Get-ChildItem instead.
  2. Step 2: Identify grep usage

    grep is a Linux command, not native in PowerShell; PowerShell uses Where-Object or Select-String.
  3. Final Answer:

    PowerShell does not support ls -l syntax -> Option A
  4. Quick Check:

    ls -l syntax unsupported = PowerShell does not support ls -l syntax [OK]
Hint: PowerShell ls alias lacks Bash -l flag [OK]
Common Mistakes:
  • Assuming ls -l works fully in PowerShell
  • Thinking pipe | is invalid
  • Believing quote style causes error here
5. You want to write a script that works on Windows and Linux to list files. Which approach is best?
hard
A. Write a PowerShell script using Get-ChildItem and run PowerShell Core on both OS
B. Write a Bash script using ls and run it only on Linux
C. Write a CMD batch file using dir and run it on Windows only
D. Write separate scripts for each OS and manually switch

Solution

  1. Step 1: Consider cross-platform support

    PowerShell Core (PowerShell 7+) runs on Windows and Linux, supporting Get-ChildItem on both.
  2. Step 2: Evaluate other options

    Bash scripts work only on Linux/macOS; CMD batch files only on Windows; separate scripts add complexity.
  3. Final Answer:

    Write a PowerShell script using Get-ChildItem and run PowerShell Core on both OS -> Option A
  4. Quick Check:

    Cross-platform scripting = PowerShell Core + Get-ChildItem [OK]
Hint: PowerShell Core runs cross-platform, unlike CMD or Bash alone [OK]
Common Mistakes:
  • Assuming Bash works on Windows by default
  • Thinking CMD scripts run on Linux
  • Ignoring cross-platform PowerShell Core availability
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