Значит ли это, что я всегда могу использовать блок скрипта, когда требуемый тип параметра - строка?: NO
Здесь этот метод называется Задержка привязки , что очень полезно в этом сценарии.
Что происходит, когдаВы делаете задержку привязки?
PowerShell ParameteBinder поймет использование привязки задержки и сначала выполнит ScriptBlock, а затем результат преобразуется в ожидаемый тип соответствующего параметра, здесь это строка.
Ниже приведен пример.
#Working one
'Path'|Join-Path -Path {$_} -ChildPath 'File'
#Not working one
Join-Path -Path {'path'} -ChildPath 'File'
Join-Path : Cannot evaluate parameter 'Path' because its argument is specified as a script block and there is no input. A script block cannot be evaluated without input.
Чтобы узнать больше о ParameterBinding, вы можете сделать Trace-Command
, как показано ниже.
Trace-Command ParameterBinding -Expression {'Path'|Join-Path -Path {$_} -ChildPath 'File'} -PSHost