about_Functions_CmdletBindingAttribute

简短说明

介绍使函数像编译的 cmdlet 一样工作的属性。

长说明

CmdletBinding 属性是函数的一个属性,使函数能够像 C# 编写的已编译 cmdlet 一样运行。 它提供对 cmdlet 功能的访问权限。

PowerShell 绑定具有 CmdletBinding 属性的函数的参数时,其方式与绑定已编译 cmdlet 的参数的方式相同。 $PSCmdlet 自动变量可用于具有 CmdletBinding 属性的函数,但 $Args 变量不可用于此类函数。

在具有 CmdletBinding 属性的函数中,未知参数和没有匹配位置参数的位置参数会导致参数绑定失败。

注意

已编译的 cmdlet 使用必需的 Cmdlet 属性,该属性类似于本主题中描述的 CmdletBinding 属性。

语法

以下示例显示了一个函数的格式,该函数指定 CmdletBinding 属性的所有可选参数。 此示例后面是每个参数的简要说明。

{
    [CmdletBinding(ConfirmImpact=<String>,
    DefaultParameterSetName=<String>,
    HelpURI=<URI>,
    SupportsPaging=<Boolean>,
    SupportsShouldProcess=<Boolean>,
    PositionalBinding=<Boolean>)]

    Param ($Parameter1)
    Begin{}
    Process{}
    End{}
}

在 CmdletBinding 属性中省略时,CmdletBinding 属性的布尔参数类型默认为 False。 将参数值设置为 $true 或仅按名称列出参数。 例如,以下 CmdletBinding 属性是等效的。

{
    [CmdletBinding(SupportsPaging=$true)]

    Param ($Parameter1)
    Begin{}
    Process{}
    End{}
}

# Boolean arguments can be defined using this shorthand syntax

{
    [CmdletBinding(SupportsPaging)]

    Param ($Parameter1)
    Begin{}
    Process{}
    End{}
}

ConfirmImpact

ConfirmImpact 参数指定应该何时通过调用 ShouldProcess 方法来确认函数的操作。 仅当 ConfirmImpact 参数等于或大于 $ConfirmPreference 首选项变量的值时,对 ShouldProcess 方法的调用才会显示确认提示。 (参数的默认值为 Medium。)只有在还指定了 SupportsShouldProcess 参数的情况下,才指定此参数。

有关确认请求的详细信息,请参阅请求确认

DefaultParameterSetName

DefaultParameterSetName 参数指定 PowerShell 在无法确定要使用的参数集时会尝试使用的参数集的名称。 可以通过将每个参数集的唯一参数设置为强制参数来避免此问题。

HelpURI

HelpURI 参数指定描述函数的帮助主题联机版本的 Internet 地址。 HelpURI 参数的值必须以“http”或“https”开头。

HelpURI 参数值用于 Get-Command 为该函数返回的 CommandInfo 对象的 HelpURI 属性值。

但是,如果计算机上安装了帮助文件,并且帮助文件的 RelatedLinks 节中第一个链接的值是 URI,或者基于注释的帮助中第一个 .Link 指令的值 是 URI,则帮助文件中的 URI 用作函数的 HelpUri 属性的值。

当在命令中指定了 Get-Help 的 Online 参数时,Get-Help cmdlet 使用 HelpURI 属性的值来查找函数帮助主题的在线版本。

SupportsPaging

SupportsPaging 参数将 First、Skip 和 IncludeTotalCount 参数添加到函数中。 这些参数允许用户从非常大的结果集中选择输出。 此参数专为从支持数据选择的大型数据存储(例如 SQL 数据库)返回数据的 cmdlet 和函数而设计。

此参数是在 Windows PowerShell 3.0 中引入的。

  • First:仅获取第一个“n”对象。
  • Skip:忽略第一个“n”对象,然后获取其余对象。
  • IncludeTotalCount:报告数据集中的对象数量(整数),后跟对象。 如果 cmdlet 无法确定总计数,则会返回“总计数未知”。

PowerShell 包含 NewTotalCount,这是一种帮助程序方法,用于获取要返回的总计数值,并包括总计数值的准确度估计值。

以下示例函数展示了如何向高级函数添加对分页参数的支持。

function Get-Numbers {
    [CmdletBinding(SupportsPaging)]
    param()

    $FirstNumber = [Math]::Min($PSCmdlet.PagingParameters.Skip, 100)
    $LastNumber = [Math]::Min($PSCmdlet.PagingParameters.First +
      $FirstNumber - 1, 100)

    if ($PSCmdlet.PagingParameters.IncludeTotalCount) {
        $TotalCountAccuracy = 1.0
        $TotalCount = $PSCmdlet.PagingParameters.NewTotalCount(100,
          $TotalCountAccuracy)
        Write-Output $TotalCount
    }
    $FirstNumber .. $LastNumber | Write-Output
}

SupportsShouldProcess

SupportsShouldProcess 参数向函数添加 Confirm 和 WhatIf 参数。 Confirm 参数会在对管道中的每个对象运行命令之前提示用户。 WhatIf 参数会列出命令将进行的更改,而不是运行命令。

PositionalBinding

PositionalBinding 参数确定函数中的参数是否默认为位置参数。 默认值为 $True。 可以使用 PositionalBinding 参数和值 $False 禁用位置绑定。

PositionalBinding 参数在 Windows PowerShell 3.0 中引入。

当参数是位置参数时,参数名称是可选的。 PowerShell 根据函数命令中未命名参数值的顺序或位置将未命名参数值与函数参数相关联。

当参数不是位置参数(它们已“命名”)时,命令中需要参数名称(或者名称缩写或别名)。

当 PositionalBinding 为 $True 时,函数参数默认为位置参数。 PowerShell 按照参数在函数中声明的顺序为参数分配位置编号。

当 PositionalBinding 为 $False 时,默认情况下函数参数不是位置参数。 除非在参数上声明了 Parameter 属性的 Position 参数,否则在函数中使用参数时必须包含参数名称(或者别名或缩写)。

Parameter 属性的 Position 参数优先于 PositionalBinding 默认值。 可以使用 Position 参数指定参数的位置值。 有关 Position 参数的详细信息,请参阅 about_Functions_Advanced_Parameters

说明

高级函数不支持 SupportsTransactions 参数。

关键字

about_Functions_CmdletBinding_Attribute

另请参阅