Задать вопрос

Вызов скрипта powershell с аргументом

Есть скрипт, написанный на powershell. Для чистоты эксперимента допустим он содержит лишь одну строку:
exit 0
Создаем раздел в реестре HKEY_CURRENT_USER\Software\Classes\*\shell\mycheck
Видим что в контекстном меню файлового менеджера появился пункт mycheck
Создаем еще один раздел в реестре HKEY_CURRENT_USER\Software\Classes\*\shell\checksum\command
В его значение по-умолчанию вписываем
C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -command "& 'C:\Users\myuser\Documents\mycheck.ps1' '%1' "
Соответственно замените имя пользователя на свое.
Это позволяет передать скрипту имя файла. На любом файле все работает кроме *.exe!
Если вызвать скрипт на исполнение и передать ему имя exe-файла (не из консоли, а именно из контекстного меню), то передаваемая как аргумент программа запускается на исполнение.
Предполагаю, что решается неким экранированием…
У кого есть решение проблемы?
P.S. ОС Windows 7
  • Вопрос задан
  • 10629 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
butteff
@butteff
Раз в тысячу лет заправляю свитер в носки
Может как-то заюзать WinExec?
Ответ написан
Комментировать
@amirul
Создал c:\test.ps1 следующего содержимого:
powershell -noexit "echo $args"


Добавил в HKCU\...\test\command\@ следующее:
C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -EP Bypass -File C:\test.ps1 "%1"


Никакой разницы при запуске для exe и остальных файлов не заметил. Вообще говоря более правильный способ передачи параметров в скрипты — указание param блока.

test.ps1:
param($FilePath)
powershell -noexit "echo $FilePath"

HKCU\...\test\command\@:
C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -EP Bypass -File C:\test.ps1 -FilePath "%1"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы