Сведения о вопросе

nikolya

09:05, 19th August, 2020

Теги

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

Просмотров: 282   Ответов: 2

Есть скрипт, написанный на 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



  Сведения об ответе

park

18:09, 11th August, 2020

Может как-то заюзать WinExec?


  Сведения об ответе

DINO

07:20, 27th August, 2020

Создал 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"


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться