Как установить предпочтение `$ ErrorView =" CategoryView "` перед запуском powershell.exe - PullRequest
1 голос
/ 07 марта 2019

Как установить предпочтение $ErrorView = "CategoryView" перед запуском powershell.exe?

powershell.exe -command "$ErrorView = "CategoryView" ; dir wrong.txt" не работает.

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

в вашем коде есть серьезная ошибка.Вы использовали 4 двойных кавычки вместо двух снаружи и пару одинарных кавычек внутри.[ ухмылка ]

это работает ...

powershell.exe -command  "$ErrorView = 'CategoryView' ; dir wrong.txt; pause"

удалите pause, когда вы уверены, что все работает как нужно.[ ухмылка ]

0 голосов
/ 08 марта 2019

В дополнение к Полезный ответ Ли Дейли : Как отмечает Ли, ваша основная проблема заключается в том, что вы пренебрегли побегом " символов. встроено в вашу общую команду "..." .

Предполагая, что вы вызываете команду из вне PowerShell , например из cmd.exe (Командная строка):

  • Использование встроенного одиночного -цитирования ('...') вместо встроенного "..." является опцией в данном случае , так как показано в ответе Ли, потому что CategoryView должен рассматриваться как литерал строка .
    Удобное использование ' для встроенного цитирования устраняет необходимость в экранировании.

  • Однако в случаях, когда встроенная строка содержит ссылки на переменные (например, $var) или выражений (например, $(Get-Date)), используйте строки в двойных кавычках ("...") является обязательным , поскольку только строки в двойных кавычках расширяются (с интерполяцией). Выход из встроенного " в \" становится обязательным .

    • Обратите внимание, что, напротив, внутри PowerShell " символов. должен быть экранирован как `".
# From cmd.exe, for instance.
C:\>powershell.exe -command  "$ErrorView = \"CategoryView\"; dir wrong.txt" 

Если по какой-либо причине вам необходимо вызвать другой экземпляр PowerShell из в PowerShell, используйте блок сценариев ({ ... }), который также устраняет необходимость экранирования (и лучше интегрируется с вызывающим сеансом, возвращая объекты из вызова, а не только строки ).

# From Powershell.
PS> powershell.exe -command { $ErrorView = "CategoryView" ; dir wrong.txt }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...