Как сказал Питер Хандорф, PowerShell снимает внешние цитаты. Посмотрите, как PowerShell удаляет двойные кавычки из аргументов командной строки. Вы можете проверить это, повторив или написав строку прямо в командной строке
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
ИМХО, это хорошо, потому что теперь вы можете использовать одинарные кавычки для переноса строк. У вас также есть стандартизированный способ передачи параметров специальных символов, аналогичный bash, в отличие от cmd, где вставленные двойные кавычки являются трудной задачей.
В соответствии с правилом цитирования PowerShell вы должны избегать кавычки либо с помощью `backticks`
либо самой двойной кавычки, или просто помещать ее в одинарные кавычки
find.exe /i "`"System.Diagnostics.Process`"" *.ps1xml
find.exe /i """System.Diagnostics.Process""" *.ps1xml
find.exe /i '"System.Diagnostics.Process"' *.ps1xml
В таких простых случаях, как этот, когда в параметре нет пробела, вы также можете напрямую избегать двойных кавычек, не помещая их в другую пару кавычек.
find.exe /i `"System.Diagnostics.Process`" *.ps1xml
Однако есть более простой способ с аргументами Verbatim --%
В PowerShell 3.0 специальный маркер --%
является сигналом для PowerShell о прекращении интерпретации любых оставшихся символов в строке. Это может быть использовано для вызова утилиты не-PowerShell и передачи некоторых параметров в кавычках в том виде, как они есть.
В результате вы можете использовать это так
find.exe --% "System.Diagnostics.Process" *.ps1xml
Или, если вам не нужна поддержка Unicode, вы можете просто find
с помощью findstr
который не нуждается в кавычках
PS C:\Users> help | findstr command
topics at the command line.
The Get-Help cmdlet displays help at the command line from content in