about_Parameter_Binding

简短说明

参数绑定是 PowerShell 用于确定正在使用的具体参数集并用于将值关联(绑定到)命令参数的过程。 这些值可能来自命令行和管道。

长说明

参数绑定过程从绑定命令行参数开始。

  1. 绑定命名参数

    在以短划线开头的命令行上查找未标记的令牌。 如果令牌以冒号结尾,则需要参数。 如果没有冒号,请查看参数的类型,并查看参数是否是必需的。 如果需要值,请尝试将参数类型转换为参数所需的类型,并且转换成功,绑定参数。

  2. 绑定位置参数

    如果有任何未使用的命令行参数,请查找采用位置参数并尝试绑定这些参数的未绑定参数。

绑定命令行自变量后,PowerShell 会尝试绑定任何管道输入。 可通过两种方式从管道绑定值。 接受管道输入的参数具有下面一个或两个特性:

  • ValueFromPipeline - 管道中的值根据其类型绑定到参数。 自变量的类型必须与参数的类型匹配。
  • ValueFromPipelineByPropertyName - 管道中的值根据其名称绑定到参数。 管道中的对象必须具有与参数的名称或其别名之一匹配的属性。 属性的类型必须匹配或可转换为参数的类型。

PowerShell 按以下顺序尝试绑定管道输入:

  1. 尝试在不进行类型转换的情况下绑定 ValueFromPipeline 参数:

    按完全类型匹配的值从管道绑定。 如果命令具有管道输入,并且仍有未绑定的参数,请尝试绑定到与类型完全匹配的参数。

  2. 尝试在不进行类型转换的情况下绑定 ValueFromPipelineByPropertyName 参数:

    如果未找到任何值匹配项,则按名称与完全匹配从管道绑定。 查找与参数名称或其别名之一匹配的输入对象的属性。 如果类型完全匹配,请绑定参数。

  3. 如果管道输入尚未绑定,请尝试使用类型转换绑定 ValueFromPipeline 参数:

    尝试将管道输入转换为所需类型。 如果转换失败,则参数未绑定。

  4. 如果管道输入尚未绑定,请尝试使用类型转换绑定 ValueFromPipelineByPropertyName 参数:

    属性的名称必须与参数的名称或其别名之一匹配。 如果输入类型不匹配,请尝试将输入转换为匹配类型。 如果转换失败,则参数未绑定。

可视化参数绑定

排查参数绑定问题可能很困难。 可以使用 Trace-Command cmdlet 可视化参数绑定过程。 以下示例演示如何跟踪简单管道的参数绑定。

Trace-Command -PSHost -Name ParameterBinding -Expression {
    Get-Item *.txt | Remove-Item
}

输出显示表达式命令的参数绑定过程的每个步骤。 输出可能很详细,但它可以帮助你了解参数未按预期绑定的原因。 有关完整示例,请参阅 “可视化参数绑定 ”一文。