Я думал, что у меня был ответ на это, но чем больше я играю с ним, тем больше я рассматриваю его как недостаток дизайна Powershell.
Я хотел бы перетащить (или использовать Отправление - Для механизма) для передачи нескольких файлов и/или папок как массив к сценарию Powershell.
Сценарий тестирования
#Test.ps1
param ( [string[]] $Paths, [string] $ExampleParameter )
"Paths"
$Paths
"args"
$args
Попытка № 1
Я создал ярлык со следующей командной строкой и перетащил некоторые файлы на ней. Файлы сталкиваются отдельных параметров, которые сначала соответствуют параметрам сценария позиционально, при этом остаток помещается в массив $args.
Ярлык для попытки № 1
powershell.exe -noprofile -noexit -file c:\Test.ps1
Сценарий обертки
Я нашел, что могу сделать это со сценарием обертки...
#TestWrapper.ps1
& .\Test.ps1 -Paths $args
Ярлык для сценария обертки
powershell.exe -noprofile -noexit -file c:\TestWrapper.ps1
Сценарий обертки пакетного файла
И это работает через сценарий обертки пакетного файла...
REM TestWrapper.bat
SET args='%1'
:More
SHIFT
IF '%1' == '' GOTO Done
SET args=%args%,'%1'
GOTO More
:Done
Powershell.exe -noprofile -noexit -command "& {c:\test.ps1 %args%}"
Предпринятые ответы
Keith Hill сделал превосходное предложение для использования следующей командной строки ярлыка, однако это не передало аргументы правильно. Пути с пробелами были разделены независимо, когда они прибыли в Тестовый ps1 сценарий.
powershell.exe -noprofile -noexit -command "& {c:\test1.ps1 $args}"
Кто-либо нашел способ сделать это без дополнительного сценария?
Измените свой ярлык на этот и попробуйте:
powershell.exe -noprofile -noexit -command "& {c:\test1.ps1 $args}"
Я подал отчет об ошибке на сайте Powershell Microsoft Connect.