Ответ 1
Там потенциально не так много разницы между функцией и командлетом, но это зависит от того, сколько работы вы готовы записать в функцию. Дон Джонс написал статью о TechNet, когда они впервые выявили некоторые из этих различий.
Эти функции, написанные полностью в script, имеют те же возможности, что и "реальный" командлет, написанный на С# или Visual Basic и скомпилированный в Visual Studio. Эти расширенные функции (они изначально назывались командными командами script в начале цикла разработки v2) помогают вам писать более гибкие функции, которые затем можно легко использовать вместе с регулярными командлетами.
...
Реальная разница между простой функцией и полным командлетом заключается в том, что cmdlets поддерживают мощные привязки параметров. Вы можете использовать позиционные параметры, именованные параметры, обязательные параметры и даже выполнять проверки проверки основных параметров - все просто описывая параметр для оболочки.
Пример кода, который вы предложили, уже начинает размывать линии между ними, разрешая множество дополнительных параметров с помощью [CmdletBinding()]
и начиная описывать новый параметр под названием $Name
. Например, теперь вы можете использовать Write-Verbose
в любой точке этой функции и вызывать флаг -Verbose
для просмотра этих инструкций без необходимости выполнять дополнительную работу.
Функционально конечные результаты скомпилированного командлета или функции, написанной в powershell, вообще не должны быть совсем разными - кажется, это больше вопрос отличия скомпилированных командлетов от скриптовых функций.