Передача аргументов в PowerShell с параметром «-Command» с использованием AutoHotKey и Windows Terminal - PullRequest
0 голосов
/ 25 мая 2020

Мой вопрос больше относится к PowerShell, но для полноты картины я использую AutoHotKey для запуска команды PowerShell.

Я пытаюсь передать некоторые аргументы в PowerShell с параметром «-Command», но сталкиваюсь с проблемы, если аргументы содержат «специальные» символы.

Например, у меня есть три папки:

c:\folder that works
c:\folder doesn't work
c:\[01] folder not working either

Я также тестирую PowerShell 5.1 (встроенные в Windows 10) и новый PowerShell 7.0.1 (портативная версия) с Windows Терминалом (wt.exe). Это команды, которые я пробовал использовать с помощью AutoHotKey:

Run, powershell.exe -NoExit -ExecutionPolicy Bypass -Command "Get-ChildItem -Path '%Clipboard%'"
Run, wt.exe "c:\ps7\pwsh.exe" -NoExit -ExecutionPolicy Bypass -Command "Get-ChildItem -Path '%Clipboard%'"

Любое использование PowerShell работает с папками, не содержащими специальных символов.

С папкой с апострофом (отображается как одинарная кавычка) в имени, например c:\folder doesn't work, PowerShell 5.1 выдает следующую ошибку:

The string is missing the terminator: '.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

PowerShell 7.0.1 даже не выдает ошибку. На самом деле он ничего не показывает.

В папке с квадратными скобками «[]» ни PowerShell 5.1, ни 7.0.1 тоже ничего не показывают. Даже не ошибка.

Думаю, у меня проблема с экранированием символов или их правильным цитированием.

Я был бы очень признателен за любые комментарии относительно того, как я могу заставить свой код работать.

РЕДАКТИРОВАТЬ: Забыл упомянуть, я использую Windows Терминал ( wt.exe ) для PowerShell 7.0.1.

Ответы [ 2 ]

0 голосов
/ 25 мая 2020

Поэкспериментировав, у меня есть частичный ответ на мою проблему. И PowerShell 5.1, и 7.0.1 сами по себе ( без использования Windows Terminal ) работают при использовании следующих команд в AutoHotKey:

Run, powershell.exe -NoExit -ExecutionPolicy Bypass -Command " Get-ChildItem -LiteralPath `"`"`"%Clipboard%`"`"`" "
Run, "c:\ps7\pwsh.exe" -NoExit -ExecutionPolicy Bypass -Command " Get-ChildItem -LiteralPath `"`"`"%Clipboard%`"`"`" "

Для некоторых Причина, мне пришлось избегать кавычек, окружающих %Clipboard% AutoHotKey, трижды используя `" (обратная кавычка / серьезная и двойная кавычка)

Но как только я добавил Windows Terminal (wt.exe) в AutoHotKey Запустите команду , она каким-то образом не сработает во всех трех папках. Думаю, создам отдельный вопрос только для Windows Терминал.

0 голосов
/ 25 мая 2020

Это работает по крайней мере в cmd. Если каталог пуст, он ничего не покажет.

powershell dir -literal (get-clipboard)
pwsh -c dir -literal (get-clipboard)
...