什么是[cmdletbinding()]以及它实际上是如何工作的?

Loï*_*HEL 37 powershell binding

我经常使用cmdlbinding我的函数或脚本,但总是发现这些东西很深奥,也许你们中的一些人可以分享他们的灯光.
根据get-help about_Functions_CmdletBindingAttribute

CmdletBinding属性是函数的一个属性,使它们像编译的cmdlet一样运行

但我们可以在我们的脚本之上使用它,在这种情况下的功能是什么?ps引擎为其所有输入调用的内部隐式"main"函数?

关于语法现在:

[CmdletBinding(ConfirmImpact=<String>,
                     DefaultParameterSetName=<String>,
                     HelpURI=<URI>,
                     SupportsPaging=<Boolean>,
                     SupportsShouldProcess=<Boolean>,
                     PositionalBinding=<Boolean>)]
Run Code Online (Sandbox Code Playgroud)

我们在做什么 ?实例化cmdlbinding对象并为其构造函数提供参数列表?这个语法可以在param()中找到,例如param()这个语法是否有特定的名称,可以在其他地方找到吗?

最后,作为简单的powershellers,我们能够通过设置属性来模仿这个功能并修改脚本的行为吗?

Fro*_* F. 15

CmdletBinding,Parameter等是特殊的属性类,脚本编写者可以使用它们来定义PowerShell的行为,例如使函数成为具有Cmdlet功能的高级函数.

当你通过例如[CmdletBinding()]初始化类的新实例来调用它们时.

在以下位置阅读有关CmdletBindingAttribute类的更多信息:MSDN

在以下位置阅读有关ParameterAttribute类的更多信息:MSDN

更多关于属性类在这里这里


Sha*_*evy 10

一般来说,CmdletBinding是使用Advanced函数创建函数的函数.将它放在脚本的顶部会使脚本成为"高级"脚本.函数和脚本大致相同,其中脚本文件名等同于函数名,脚本内容等同于函数的scripblock部分.

CmdletBinding属性使您可以控制功能,例如添加Confirm和WhatIf支持(通过SupportsShouldProcess),禁用参数位置绑定等.