As Peter Hahndorf said, PowerShell is stripping the outer quotes. See PowerShell stripping double quotes from command line arguments. You can check it by echoing or writing the string directly in command line
PS C:\> echo C:\Windows\System32\find.exe /i "System.Diagnostics.Process" *.ps1xml
C:\Windows\System32\find.exe
/i
System.Diagnostics.Process
*.ps1xml
PS C:\> "System.Diagnostics.Process"
System.Diagnostics.Process
IMHO it's a good thing because now you can use single quotes to wrap strings. You also have a standardized way to pass special characters in parameters similar to bash, unlike in cmd where embedded double quotes are a pain
According to PowerShell quoting rule you must escape the quote by either `backticks`
or the double quote itself, or simply put it in single quotes
find.exe /i "`"System.Diagnostics.Process`"" *.ps1xml
find.exe /i """System.Diagnostics.Process""" *.ps1xml
find.exe /i '"System.Diagnostics.Process"' *.ps1xml
In simple cases like this when there's no space in the parameter you can also escape the double quotes directly without putting it inside another pair of quotes
find.exe /i `"System.Diagnostics.Process`" *.ps1xml
However there's an easier way with Verbatim arguments --%
In PowerShell 3.0 the special marker --%
is a signal to PowerShell to stop interpreting any remaining characters on the line. This can be used to call a non-PowerShell utility and pass along some quoted parameters exactly as is.
As a result you can use it like this
find.exe --% "System.Diagnostics.Process" *.ps1xml
Or if you don't need Unicode support then you can simply find
with findstr
which doesn't need the quotes
PS C:\Users> help | findstr command
topics at the command line.
The Get-Help cmdlet displays help at the command line from content in
But if PowerShell is available then you can use its Select-String
cmdlet directly. It's much more powerful than find
and findstr
It isn't a Powershell command? Don't get confused between a executable ipconfig and a command shell command – Ramhound – 2017-05-14T02:29:39.300
What is it using other than
C:\Windows\SYSTEM32\find.EXE
? – lit – 2017-05-14T02:44:41.207What exactly are you trying to do? Your third example uses invalid syntax – Ramhound – 2017-05-14T02:53:21.973
indeed I tried exactly the same command and it fails in PowerShell while gives proper output in cmd. Moreover
where find
works in cmd but doesn't in PowerShell – phuclv – 2017-05-14T02:54:34.883I am in a PowerShell console. I want to search files for a string.
find.exe
does that. Yes, I know that PowerShell can also do that with Get-Content... etc. I am just trying to do something simple. Is that not possible in PowerShell? I have written agrep
-like PowerShell script, but it is not on this system and I did not want to chase it down tonight. – lit – 2017-05-14T02:56:53.103cross-site duplicate: PowerShell pipe into find.exe command
– phuclv – 2018-04-02T01:24:36.203