2013-08-12 3 views
6

Наш ИТ-отдел переходит на Windows 8, и все начинают использовать PowerShell в качестве среды командной строки Windows по умолчанию, а не cmd.exe.Как передать необработанные строки командам через командную строку в PowerShell?

К сожалению, PowerShell оценивает то, что вы набираете, и довольно сложно передать исходные аргументы командной строки в программы.

Например, у меня есть программа inventory.exe, которая принимает специальную строку, которая форматирует ее вывод. Я не могу передать эту специальную строку в PowerShell, как я получаю загадочную ошибку:

PS C:\Users\Administrator> inventory.exe 'inventory "," date "," owner' 
inventory.exe error: No comma allowed 

Я предполагаю, что PowerShell оценили 'inventory "," date "," owner' строку как-то и что-то еще было передано inventory.exe программе в результате его напечатанным ошибку.

Эта программа работает нормально в cmd.exe:

C:\Documents and Settings\boda> inventory.exe 'inventory "," date "," owner' 
... (the output that I expect) ... 

Это даже становится хуже, если я ввожу символы, такие как %, $ в PowerShell.

Кто-нибудь знает, как передать необработанные строки командам в PowerShell?

ответ

8

Если вы используете Powershell v3.0, есть новый синтаксис, чтобы заставить Powershell избегать дополнительного анализа аргументов. Что-то вроде:

inventory.exe --% 'inventory', 'date', 'owner' 

Существуют и другие подходы, как указано здесь: http://blogs.technet.com/b/josebda/archive/2012/03/03/using-windows-powershell-to-run-old-command-line-tools-and-their-weirdest-parameters.aspx

+0

+1 Это отличная ссылка! –

+0

Не знал об этом синтаксисе, спасибо :) –

Смежные вопросы