Когда powershell.exe
, PowerShell CLI , вызывается извне с параметром -File
, он не поддерживает массивы - только отдельные аргументы . [1]
(Кроме того, вы забыли обернуть определение параметра в блок param(...)
, что фактически привело кего следует игнорировать.)
Самое простое решение - определить ваш параметр с опцией ValueFromRemainingArguments
, чтобы он автоматически собирал все позиционные аргументы в переменной параметра:
param(
[Parameter(Mandatory, ValueFromRemainingArguments)]
[String[]] $Document
)
Затем вызовите свой сценарий через интерфейс командной строки PowerShell без -Document
:
powershell.exe -NoProfile -File "./process.ps1" %*
В качестве альтернативы использованию вспомогательного пакетного файла , вы можете:
определить файл ярлыка (*.lnk
) , который явно вызывает ваш сценарий PowerShell как powershell.exe -File \path\to\your\script.ps1
(без дополнительных аргументов)
, а затем использовать , что в качестве цели отбрасывания .
Примечание. Причина, по которой вы не можете использовать сценарий PowerShell (*.ps1
) напрямую в качестве цели удаления, заключается в том, что файлы сценариев PowerShell не непосредственно исполняемый - вместо этого, открыв (дважды щелкнув) файл *.ps1
, откройте его для редактирования .
Затем вам нужно будет добавить pause
(или что-то похожее, например Read-Host -Prompt 'Press Enter to exit.'
) на ваш сценарий PowerShell, чтобы не допустить мгновенного закрытия окна по окончании.
Либо оставьте скрипт как есть и используйте -NoExit
(помещенный перед -File
), чтобы оставить сеанс PowerShell открытым.
[1] То же самое относится к PowerShell Core CLI , pwsh
.