Похоже, что я могу избежать аргументов командной строки, используя одинарные или двойные кавычки:
PS C:\> echo Hello World
Hello
World
PS C:\> echo 'Hello World'
Hello World
PS C:\> echo "Hello World"
Hello World
Но есть кое-что, чего я не могу понять, а именно, когда вы хотите запустить исполняемый файл из каталога, в котором есть пробел:
PS C:\> c:\program files\test.exe
The term 'c:\program' is not recognized as a cmdlet, function, operable program, or script file. Verify the term and try again.
At line:1 char:11
+ c:\program <<<< files\test.exe
PS C:\> 'c:\program files\test.exe'
c:\program files\test.exe
PS C:\> "c:\program files\test.exe"
c:\program files\test.exe
PS C:\>
Как заставить PowerShell запускать исполняемый файл, указанный выше?





Использовать это:
. "c:\program files\test.exe"
На самом деле, еще лучшим решением было бы:
Invoke-Item "c:\program files\test.exe"
или используя псевдоним:
ii "c:\program files\test.exe"
Использование Invoke-Item означает, что будет использоваться соответствующий обработчик файлов Windows. Так что для EXE-файла он запускается. Например, для файла .doc он откроется в Microsoft Word.
Вот одна из самых удобных командных строк PowerShell. Попробуйте:
ii .
Invoke-Expression, безусловно, имеет проблемы с безопасностью, связанные с его использованием, но я не знаю о проблемах с Invoke-Item. Не могли бы вы уточнить?
Попробуйте поставить перед командой амперсанд. Например
& 'C:\Program Files\winscp\winscp.exe'
Это более правильный ответ, поскольку он просто указывает синтаксическому анализатору интерпретировать следующий токен в командном режиме, хотя он выглядит как строка.