Running CMD command in PowerShell
Categories:
Mastering CMD Commands within PowerShell

Learn how to effectively execute traditional Windows Command Prompt (CMD) commands and batch scripts directly from PowerShell, bridging the gap between two powerful command-line environments.
PowerShell is a robust, object-oriented shell and scripting language for Windows, Linux, and macOS. While it offers its own rich set of cmdlets, there are times when you need to run older Command Prompt (CMD) commands or batch files. This article will guide you through the various methods to seamlessly integrate and execute CMD commands within your PowerShell sessions, ensuring you can leverage the best of both worlds.
Direct Execution of CMD Commands
The simplest way to run a CMD command in PowerShell is to type it directly. PowerShell is designed to be backward compatible with CMD, so many commands will execute without any special syntax. However, there are nuances, especially with commands that have special characters or require specific shell features.
dir
ipconfig /all
whoami
Examples of basic CMD commands executed directly in PowerShell.
dir
vs. Get-ChildItem
), PowerShell prioritizes its own cmdlets. To force the CMD version, you might need to use cmd /c
.Using cmd /c
for Complex Commands and Batch Files
For more complex CMD commands, commands with redirection operators (>
, |
, &
), or when executing batch files (.bat
, .cmd
), it's often best to explicitly invoke the CMD interpreter using cmd /c
. The /c
switch tells cmd.exe
to execute the specified string command and then terminate.
cmd /c "echo Hello World > output.txt"
cmd /c "dir C:\Windows | findstr System32"
cmd /c "C:\Scripts\mybatchfile.bat Argument1 Argument2"
Executing CMD commands with redirection and batch files using cmd /c
.
flowchart TD A[PowerShell Session] --> B{"CMD Command?"} B -->|Simple Command| C[Direct Execution] B -->|Complex/Batch File| D[Invoke `cmd /c`] C --> E[CMD Command Runs] D --> F[CMD.exe Interpreter] F --> E E --> G[Output to PowerShell]
Decision flow for running CMD commands in PowerShell.
Handling Arguments and Special Characters
Passing arguments to CMD commands from PowerShell requires careful handling of quoting. PowerShell interprets quotes differently than CMD. When using cmd /c
, the entire command string passed to /c
is interpreted by cmd.exe
. This means you might need to escape quotes or use different quoting strategies.
# Command with spaces in an argument
cmd /c "echo "Hello World with Spaces""
# Using single quotes for the outer string, double quotes for CMD's internal string
cmd /c 'echo "Another example"'
# Escaping double quotes for CMD within a PowerShell double-quoted string
cmd /c "echo \"Escaped Quotes\""
Examples demonstrating how to pass arguments with spaces and special characters.
cmd.exe
then re-parses the string passed to its /c
switch. This can lead to unexpected behavior if not handled correctly. Experimentation is key for complex scenarios.1. Identify the CMD Command
Determine the exact CMD command or batch file you need to run, including any arguments or redirection operators.
2. Test Direct Execution
First, try running the command directly in PowerShell. If it works as expected, you're done.
3. Use cmd /c
for Complexity
If direct execution fails, involves redirection, or is a batch file, prepend cmd /c
to your command. Enclose the entire CMD command string in double quotes for cmd /c
.
4. Handle Quoting and Escaping
For arguments with spaces or special characters within the cmd /c
string, use appropriate quoting (e.g., double quotes around the argument) and escape any internal double quotes if necessary (e.g., \"
).
5. Verify Output and Exit Code
Check the output of the command and the $LASTEXITCODE
variable in PowerShell to ensure the CMD command executed successfully and returned the expected result.