Como Peter Hahndorf disse, o PowerShell está removendo as cotações externas . Você pode verificá-lo diretamente, ecoando ou escrevendo a string diretamente na linha de comando
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 é uma coisa boa porque agora você pode usar aspas simples para agrupar strings. Você também tem uma maneira padronizada de passar parâmetros de caracteres especiais semelhantes ao bash, ao contrário de em cmd , onde aspas duplas são uma dor
Então, de acordo com a regra de cotação do PowerShell , você deve escapar da citação por 'backticks'
ou pela aspas duplas, ou simplesmente colocá-lo entre aspas simples
find.exe /i "'"System.Diagnostics.Process'"" *.ps1xml
find.exe /i """System.Diagnostics.Process""" *.ps1xml
find.exe /i '"System.Diagnostics.Process"' *.ps1xml
Em casos simples como este, quando não há espaço no parâmetro, você também pode escapar diretamente das aspas duplas sem colocá-lo dentro de outro par de citações
find.exe /i '"System.Diagnostics.Process'" *.ps1xml
No entanto, há uma maneira mais fácil com argumentos verbos --%
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.
Como resultado, você pode usá-lo assim
find.exe --% "System.Diagnostics.Process" *.ps1xml