PowerShell by default does not support the native cmd.exe command such as „dir“. Instead, it uses historic aliases called “dir” to point you to the closest PowerShell cmdlet:
PS C:\> Get-Command -Name dir | ft -AutoSize CommandType Name Version Source ----------- ---- ------- ------ Alias dir -> Get-ChildItem
This explains why “dir” in PowerShell won’t support the switches and arguments it used to in cmd.exe and batch files, like “cmd.exe /w”.
If you must use the old cmd-style commands, launch an original cmd.exe with parameter /c (for “command”), issue the command, and process the results inside PowerShell. This example runs cmd.exe /c, and then runs the old cmd command “dir” with its argument /w:
PS C:\> cmd.exe /c dir /w
An even safer way is to use the „–%“ operator:
PS C:\> cmd.exe --% /c dir /w
When it is specified at the beginning of arguments, then the PowerShell parser leaves the argument untouched, and you can even use environment variable notations like in cmd.exe. The backdraw: you can no longer use PowerShell techniques inside the arguments, like variables:
PS C:\> cmd.exe --% /c dir %WINDIR% /w