使用英语阅读

通过


about_Parameter_Binding

简短说明

参数绑定是 PowerShell 用来确定正在使用哪个参数集并将 (bind) 值与命令的参数相关联的过程。 这些值可能来自命令行和数据管道。

详细说明

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

  1. 绑定命名参数

    在命令行中查找以破折号开头的未加引号的令牌。 如果令牌以冒号结尾,则需要一个参数。 如果没有冒号,请查看参数的类型,并查看参数是否是必需的。 如果一个值是必需的,请尝试将参数的类型转换为参数所需的类型,转换成功时再绑定参数。

  2. 绑定位置参数

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

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

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

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

  1. 尝试在没有类型转换的情况下绑定 ValueFromPipeline 参数:

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

  2. 尝试在没有类型转换的情况下绑定 ValueFromPipelineByPropertyName 参数:

    如果没有找到匹配的值,那么使用精确匹配的名称从管道绑定。 查找与参数名称或其别名之一匹配的输入对象的属性。 如果类型完全匹配,请绑定参数。

  3. 如果管道输入尚未绑定,请尝试通过类型转换来绑定 ValueFromPipeline 参数。

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

  4. 如果管道输入尚未绑定,请尝试通过类型转换来绑定 ValueFromPipelineByPropertyName 参数。

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

可视化参数绑定

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

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

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