module manifest中有两个元素:cmdlet和函数。
cmdlet和函数有什么区别?
答案 0 :(得分:9)
cmdlet是用C#或其他.NET语言编写的.NET类,包含在.dll中(即,在二进制模块中)。直接在PowerShell中的脚本,脚本模块或命令行中指定功能。模块清单可能同时包含脚本和二进制模块,因此清单需要能够导出cmdlet和函数。尽管通常不建议从单个清单中导出同一个cmdlet和具有相同名称的函数,甚至是可能的。
答案 1 :(得分:7)
补充Bruce Payette's helpful answer:
并非在PowerShell中创建的所有功能都相同:
advanced function是 cmdlet (如所述,已编译(来自.NET语言);用[CmdletBinding()]
attribute装饰一个函数的param(...)
块或装饰至少一个parameter with a [Parameter()]
attribute 感谢Ansgar Wiechers
是什么使它成为高级之一;因此,它支持某些标准行为:
-Verbose
和-OutVariable
,并且,如果相应地实现了该功能,则会自动支持-WhatIf
和-Confirm
。 / li>
通常(但不一定),高级功能通过process { ... }
脚本块,通过用ValueFromPipeline
和/或{装饰的参数绑定参数来支持一对一的管道输入处理。 {1}}。
不幸的是,即使高级功能和cmdlet的创建也不完全相同:
ValueFromRemainingArguments
differently than cmdlets。
ValueFromPipelineByPropertyName
或什至通过$Input
块来处理管道输入。process { ... }
关键字定义的,针对管道处理进行了优化的简单函数。对于每个管道输入对象,都会隐式调用其主体,反映在自动变量Filter
中。 将功能导出为模块的一部分时-最好通过其模块清单($_
)-不会强制将功能设为