Powershell 管道 属性 绑定失败
Powershell Pipeline Property Binding Failing
我运行遇到一个我无法弄清楚的特殊问题。我正在尝试将 Get-ADUser -Identity Test-User -Property SamAccountName
中的值绑定到自定义构建的 cmdlet。这是我以前做过很多次的事情,但由于某些奇怪的原因,它现在失败了。为了降低复杂性,我编写了一个测试函数来最小化复杂性。该函数是:
function Test-Binding{
[cmdletbinding()]
Param
(
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$True)]
[Alias("SamAccountName")]
[string]
$Identity
)
return $Identity
}
执行Get-ADUser -Identity Test-user | Test-Binding
时出现错误:
Test-Binding : Cannot bind argument to parameter 'Identity' because it is an empty string.
At line:1 char:76
+ Trace-Command parameterbinding -Expression {Get-ADUser -Identity Test-User | Test- ...
+ ~~~~~
+ CategoryInfo : InvalidData: (CN=Test-User...,DC=contoso,DC=com:PSObject) [Test-Binding], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Test-Binding
我的下一步是 运行 在检查了我的代码并查看了以前成功的脚本之后。在跟踪中,第一次尝试绑定成功,但是 powershell
然后尝试继续将其绑定到其他输入值,直到失败。这是转储:
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Get-ADUser]
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Get-ADUser]
DEBUG: ParameterBinding Information: 0 : BIND cmd line args to DYNAMIC parameters.
DEBUG: ParameterBinding Information: 0 : DYNAMIC parameter object: [Microsoft.ActiveDirectory.Management.Commands.GetADUserParameterSet]
DEBUG: ParameterBinding Information: 0 : BIND NAMED args to DYNAMIC parameters
DEBUG: ParameterBinding Information: 0 : BIND arg [Test-User] to parameter [Identity]
DEBUG: ParameterBinding Information: 0 : COERCE arg to [Microsoft.ActiveDirectory.Management.ADUser]
DEBUG: ParameterBinding Information: 0 : Trying to convert argument value from System.String to Microsoft.ActiveDirectory.Management.ADUser
DEBUG: ParameterBinding Information: 0 : CONVERT arg type to param type using LanguagePrimitives.ConvertTo
DEBUG: ParameterBinding Information: 0 : CONVERT SUCCESSFUL using LanguagePrimitives.ConvertTo: [Test-User]
DEBUG: ParameterBinding Information: 0 : Executing VALIDATION metadata: [Microsoft.ActiveDirectory.Management.Commands.ValidateNotNullOrEmptyADEntityAttribute
]
DEBUG: ParameterBinding Information: 0 : Executing VALIDATION metadata: [System.Management.Automation.ValidateNotNullAttribute]
DEBUG: ParameterBinding Information: 0 : BIND arg [Test-User] to param [Identity] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL args to DYNAMIC parameters
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Get-ADUser]
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Test-Binding]
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Test-Binding]
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Test-Binding]
DEBUG: ParameterBinding Information: 0 : BIND arg [] to parameter [Identity]
DEBUG: ParameterBinding Information: 0 : Executing DATA GENERATION metadata: [System.Management.Automation.ArgumentTypeConverterAttribute]
DEBUG: ParameterBinding Information: 0 : result returned from DATA GENERATION:
DEBUG: ParameterBinding Information: 0 : COERCE arg to [System.String]
DEBUG: ParameterBinding Information: 0 : Parameter and arg types the same, no coercion is needed.
DEBUG: ParameterBinding Information: 0 : BIND arg [] to param [Identity] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : BIND PIPELINE object to parameters: [Test-Binding]
DEBUG: ParameterBinding Information: 0 : PIPELINE object TYPE = [Microsoft.ActiveDirectory.Management.ADUser]
DEBUG: ParameterBinding Information: 0 : RESTORING pipeline parameter's original values
DEBUG: ParameterBinding Information: 0 : Parameter [Identity] PIPELINE INPUT ValueFromPipelineByPropertyName NO COERCION
DEBUG: ParameterBinding Information: 0 : BIND arg [Microsoft.ActiveDirectory.Management.ADPropertyValueCollection] to parameter [Identity]
DEBUG: ParameterBinding Information: 0 : Executing DATA GENERATION metadata: [System.Management.Automation.ArgumentTypeConverterAttribute]
DEBUG: ParameterBinding Information: 0 : result returned from DATA GENERATION: Microsoft.ActiveDirectory.Management.ADPropertyValueCollection
DEBUG: ParameterBinding Information: 0 : BIND arg [Microsoft.ActiveDirectory.Management.ADPropertyValueCollection] to param [Identity] SKIPPED
DEBUG: ParameterBinding Information: 0 : Parameter [Identity] PIPELINE INPUT ValueFromPipelineByPropertyName WITH COERCION
DEBUG: ParameterBinding Information: 0 : BIND arg [Microsoft.ActiveDirectory.Management.ADPropertyValueCollection] to parameter [Identity]
DEBUG: ParameterBinding Information: 0 : Executing DATA GENERATION metadata: [System.Management.Automation.ArgumentTypeConverterAttribute]
DEBUG: ParameterBinding Information: 0 : result returned from DATA GENERATION:
DEBUG: ParameterBinding Information: 0 : COERCE arg to [System.String]
DEBUG: ParameterBinding Information: 0 : Parameter and arg types the same, no coercion is needed.
DEBUG: ParameterBinding Information: 0 : ERROR: Argument cannot be an empty string
DEBUG: ParameterBinding Information: 0 : BIND PIPELINE object to parameters: [Out-Default]
DEBUG: ParameterBinding Information: 0 : PIPELINE object TYPE = [System.Management.Automation.ErrorRecord]
DEBUG: ParameterBinding Information: 0 : RESTORING pipeline parameter's original values
DEBUG: ParameterBinding Information: 0 : Parameter [InputObject] PIPELINE INPUT ValueFromPipeline NO COERCION
DEBUG: ParameterBinding Information: 0 : BIND arg [Cannot bind argument to parameter 'Identity' because it is an empty string.] to parameter [InputObject]
DEBUG: ParameterBinding Information: 0 : BIND arg [Cannot bind argument to parameter 'Identity' because it is an empty string.] to param [InputObject] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Out-Default]
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Out-LineOutput]
DEBUG: ParameterBinding Information: 0 : BIND arg [Microsoft.PowerShell.Commands.Internal.Format.ConsoleLineOutput] to parameter [LineOutput]
DEBUG: ParameterBinding Information: 0 : COERCE arg to [System.Object]
DEBUG: ParameterBinding Information: 0 : Parameter and arg types the same, no coercion is needed.
DEBUG: ParameterBinding Information: 0 : BIND arg [Microsoft.PowerShell.Commands.Internal.Format.ConsoleLineOutput] to param [LineOutput] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Out-LineOutput]
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Out-LineOutput]
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : BIND PIPELINE object to parameters: [Out-LineOutput]
DEBUG: ParameterBinding Information: 0 : PIPELINE object TYPE = [System.Management.Automation.ErrorRecord]
DEBUG: ParameterBinding Information: 0 : RESTORING pipeline parameter's original values
DEBUG: ParameterBinding Information: 0 : Parameter [InputObject] PIPELINE INPUT ValueFromPipeline NO COERCION
DEBUG: ParameterBinding Information: 0 : BIND arg [Cannot bind argument to parameter 'Identity' because it is an empty string.] to parameter [InputObject]
DEBUG: ParameterBinding Information: 0 : BIND arg [Cannot bind argument to parameter 'Identity' because it is an empty string.] to param [InputObject] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [out-lineoutput]
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Format-Default]
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Format-Default]
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Format-Default]
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : BIND PIPELINE object to parameters: [Format-Default]
DEBUG: ParameterBinding Information: 0 : PIPELINE object TYPE = [System.Management.Automation.ErrorRecord]
DEBUG: ParameterBinding Information: 0 : RESTORING pipeline parameter's original values
DEBUG: ParameterBinding Information: 0 : Parameter [InputObject] PIPELINE INPUT ValueFromPipeline NO COERCION
DEBUG: ParameterBinding Information: 0 : BIND arg [Cannot bind argument to parameter 'Identity' because it is an empty string.] to parameter [InputObject]
DEBUG: ParameterBinding Information: 0 : BIND arg [Cannot bind argument to parameter 'Identity' because it is an empty string.] to param [InputObject] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [format-default]
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : BIND arg [1] to parameter [Version]
DEBUG: ParameterBinding Information: 0 : Executing DATA GENERATION metadata: [Microsoft.PowerShell.Commands.SetStrictModeCommand+ArgumentToVersionTransformationAt
tribute]
DEBUG: ParameterBinding Information: 0 : result returned from DATA GENERATION: 1.0
DEBUG: ParameterBinding Information: 0 : COERCE arg to [System.Version]
DEBUG: ParameterBinding Information: 0 : Parameter and arg types the same, no coercion is needed.
DEBUG: ParameterBinding Information: 0 : Executing VALIDATION metadata: [Microsoft.PowerShell.Commands.SetStrictModeCommand+ValidateVersionAttribute]
DEBUG: ParameterBinding Information: 0 : BIND arg [1.0] to param [Version] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : CALLING EndProcessing
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : BIND arg [1] to parameter [Version]
DEBUG: ParameterBinding Information: 0 : Executing DATA GENERATION metadata: [Microsoft.PowerShell.Commands.SetStrictModeCommand+ArgumentToVersionTransformationAt
tribute]
DEBUG: ParameterBinding Information: 0 : result returned from DATA GENERATION: 1.0
DEBUG: ParameterBinding Information: 0 : COERCE arg to [System.Version]
DEBUG: ParameterBinding Information: 0 : Parameter and arg types the same, no coercion is needed.
DEBUG: ParameterBinding Information: 0 : Executing VALIDATION metadata: [Microsoft.PowerShell.Commands.SetStrictModeCommand+ValidateVersionAttribute]
DEBUG: ParameterBinding Information: 0 : BIND arg [1.0] to param [Version] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : CALLING EndProcessing
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : BIND arg [1] to parameter [Version]
DEBUG: ParameterBinding Information: 0 : Executing DATA GENERATION metadata: [Microsoft.PowerShell.Commands.SetStrictModeCommand+ArgumentToVersionTransformationAt
tribute]
DEBUG: ParameterBinding Information: 0 : result returned from DATA GENERATION: 1.0
DEBUG: ParameterBinding Information: 0 : COERCE arg to [System.Version]
DEBUG: ParameterBinding Information: 0 : Parameter and arg types the same, no coercion is needed.
DEBUG: ParameterBinding Information: 0 : Executing VALIDATION metadata: [Microsoft.PowerShell.Commands.SetStrictModeCommand+ValidateVersionAttribute]
DEBUG: ParameterBinding Information: 0 : BIND arg [1.0] to param [Version] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : CALLING EndProcessing
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : BIND arg [1] to parameter [Version]
DEBUG: ParameterBinding Information: 0 : Executing DATA GENERATION metadata: [Microsoft.PowerShell.Commands.SetStrictModeCommand+ArgumentToVersionTransformationAt
tribute]
DEBUG: ParameterBinding Information: 0 : result returned from DATA GENERATION: 1.0
DEBUG: ParameterBinding Information: 0 : COERCE arg to [System.Version]
DEBUG: ParameterBinding Information: 0 : Parameter and arg types the same, no coercion is needed.
DEBUG: ParameterBinding Information: 0 : Executing VALIDATION metadata: [Microsoft.PowerShell.Commands.SetStrictModeCommand+ValidateVersionAttribute]
DEBUG: ParameterBinding Information: 0 : BIND arg [1.0] to param [Version] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : CALLING EndProcessing
Test-Binding : Cannot bind argument to parameter 'Identity' because it is an empty string.
At line:1 char:76
+ Trace-Command parameterbinding -Expression {Get-ADUser -Identity Test-User | Test- ...
+ ~~~~~
+ CategoryInfo : InvalidData: (CN=Walter Kerce...,DC=contoso,DC=com:PSObject) [Test-Binding], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Test-Binding
DEBUG: ParameterBinding Information: 0 : CALLING EndProcessing
DEBUG: ParameterBinding Information: 0 : CALLING EndProcessing
我的目标是了解为什么此绑定在此实例中失败。
编辑:
这不是重复的,因为我没有使用 $null returns。
不幸的是,这是 AD cmdlet 的一个已知问题——如果您向 AD cmdlet 生成的对象询问 属性 它没有,它会自动生成并给它一个 $null值而不是正确返回 属性 不存在,这将允许参数绑定继续并获得正确的值。
您可以查看关于此的 Microsoft Connect 项目here。
我见过的唯一解决方法是在您的函数中以 AD 对象使用的确切 属性 名称命名参数,并为其他名称起别名。如果我希望能够通过管道将 Get-ADComputer 传递给它,我通常必须将我的参数命名为 DNSHostName,例如,使用 ComputerName 的别名。
我运行遇到一个我无法弄清楚的特殊问题。我正在尝试将 Get-ADUser -Identity Test-User -Property SamAccountName
中的值绑定到自定义构建的 cmdlet。这是我以前做过很多次的事情,但由于某些奇怪的原因,它现在失败了。为了降低复杂性,我编写了一个测试函数来最小化复杂性。该函数是:
function Test-Binding{
[cmdletbinding()]
Param
(
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$True)]
[Alias("SamAccountName")]
[string]
$Identity
)
return $Identity
}
执行Get-ADUser -Identity Test-user | Test-Binding
时出现错误:
Test-Binding : Cannot bind argument to parameter 'Identity' because it is an empty string.
At line:1 char:76
+ Trace-Command parameterbinding -Expression {Get-ADUser -Identity Test-User | Test- ...
+ ~~~~~
+ CategoryInfo : InvalidData: (CN=Test-User...,DC=contoso,DC=com:PSObject) [Test-Binding], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Test-Binding
我的下一步是 运行 在检查了我的代码并查看了以前成功的脚本之后。在跟踪中,第一次尝试绑定成功,但是 powershell
然后尝试继续将其绑定到其他输入值,直到失败。这是转储:
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Get-ADUser]
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Get-ADUser]
DEBUG: ParameterBinding Information: 0 : BIND cmd line args to DYNAMIC parameters.
DEBUG: ParameterBinding Information: 0 : DYNAMIC parameter object: [Microsoft.ActiveDirectory.Management.Commands.GetADUserParameterSet]
DEBUG: ParameterBinding Information: 0 : BIND NAMED args to DYNAMIC parameters
DEBUG: ParameterBinding Information: 0 : BIND arg [Test-User] to parameter [Identity]
DEBUG: ParameterBinding Information: 0 : COERCE arg to [Microsoft.ActiveDirectory.Management.ADUser]
DEBUG: ParameterBinding Information: 0 : Trying to convert argument value from System.String to Microsoft.ActiveDirectory.Management.ADUser
DEBUG: ParameterBinding Information: 0 : CONVERT arg type to param type using LanguagePrimitives.ConvertTo
DEBUG: ParameterBinding Information: 0 : CONVERT SUCCESSFUL using LanguagePrimitives.ConvertTo: [Test-User]
DEBUG: ParameterBinding Information: 0 : Executing VALIDATION metadata: [Microsoft.ActiveDirectory.Management.Commands.ValidateNotNullOrEmptyADEntityAttribute
]
DEBUG: ParameterBinding Information: 0 : Executing VALIDATION metadata: [System.Management.Automation.ValidateNotNullAttribute]
DEBUG: ParameterBinding Information: 0 : BIND arg [Test-User] to param [Identity] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL args to DYNAMIC parameters
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Get-ADUser]
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Test-Binding]
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Test-Binding]
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Test-Binding]
DEBUG: ParameterBinding Information: 0 : BIND arg [] to parameter [Identity]
DEBUG: ParameterBinding Information: 0 : Executing DATA GENERATION metadata: [System.Management.Automation.ArgumentTypeConverterAttribute]
DEBUG: ParameterBinding Information: 0 : result returned from DATA GENERATION:
DEBUG: ParameterBinding Information: 0 : COERCE arg to [System.String]
DEBUG: ParameterBinding Information: 0 : Parameter and arg types the same, no coercion is needed.
DEBUG: ParameterBinding Information: 0 : BIND arg [] to param [Identity] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : BIND PIPELINE object to parameters: [Test-Binding]
DEBUG: ParameterBinding Information: 0 : PIPELINE object TYPE = [Microsoft.ActiveDirectory.Management.ADUser]
DEBUG: ParameterBinding Information: 0 : RESTORING pipeline parameter's original values
DEBUG: ParameterBinding Information: 0 : Parameter [Identity] PIPELINE INPUT ValueFromPipelineByPropertyName NO COERCION
DEBUG: ParameterBinding Information: 0 : BIND arg [Microsoft.ActiveDirectory.Management.ADPropertyValueCollection] to parameter [Identity]
DEBUG: ParameterBinding Information: 0 : Executing DATA GENERATION metadata: [System.Management.Automation.ArgumentTypeConverterAttribute]
DEBUG: ParameterBinding Information: 0 : result returned from DATA GENERATION: Microsoft.ActiveDirectory.Management.ADPropertyValueCollection
DEBUG: ParameterBinding Information: 0 : BIND arg [Microsoft.ActiveDirectory.Management.ADPropertyValueCollection] to param [Identity] SKIPPED
DEBUG: ParameterBinding Information: 0 : Parameter [Identity] PIPELINE INPUT ValueFromPipelineByPropertyName WITH COERCION
DEBUG: ParameterBinding Information: 0 : BIND arg [Microsoft.ActiveDirectory.Management.ADPropertyValueCollection] to parameter [Identity]
DEBUG: ParameterBinding Information: 0 : Executing DATA GENERATION metadata: [System.Management.Automation.ArgumentTypeConverterAttribute]
DEBUG: ParameterBinding Information: 0 : result returned from DATA GENERATION:
DEBUG: ParameterBinding Information: 0 : COERCE arg to [System.String]
DEBUG: ParameterBinding Information: 0 : Parameter and arg types the same, no coercion is needed.
DEBUG: ParameterBinding Information: 0 : ERROR: Argument cannot be an empty string
DEBUG: ParameterBinding Information: 0 : BIND PIPELINE object to parameters: [Out-Default]
DEBUG: ParameterBinding Information: 0 : PIPELINE object TYPE = [System.Management.Automation.ErrorRecord]
DEBUG: ParameterBinding Information: 0 : RESTORING pipeline parameter's original values
DEBUG: ParameterBinding Information: 0 : Parameter [InputObject] PIPELINE INPUT ValueFromPipeline NO COERCION
DEBUG: ParameterBinding Information: 0 : BIND arg [Cannot bind argument to parameter 'Identity' because it is an empty string.] to parameter [InputObject]
DEBUG: ParameterBinding Information: 0 : BIND arg [Cannot bind argument to parameter 'Identity' because it is an empty string.] to param [InputObject] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Out-Default]
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Out-LineOutput]
DEBUG: ParameterBinding Information: 0 : BIND arg [Microsoft.PowerShell.Commands.Internal.Format.ConsoleLineOutput] to parameter [LineOutput]
DEBUG: ParameterBinding Information: 0 : COERCE arg to [System.Object]
DEBUG: ParameterBinding Information: 0 : Parameter and arg types the same, no coercion is needed.
DEBUG: ParameterBinding Information: 0 : BIND arg [Microsoft.PowerShell.Commands.Internal.Format.ConsoleLineOutput] to param [LineOutput] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Out-LineOutput]
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Out-LineOutput]
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : BIND PIPELINE object to parameters: [Out-LineOutput]
DEBUG: ParameterBinding Information: 0 : PIPELINE object TYPE = [System.Management.Automation.ErrorRecord]
DEBUG: ParameterBinding Information: 0 : RESTORING pipeline parameter's original values
DEBUG: ParameterBinding Information: 0 : Parameter [InputObject] PIPELINE INPUT ValueFromPipeline NO COERCION
DEBUG: ParameterBinding Information: 0 : BIND arg [Cannot bind argument to parameter 'Identity' because it is an empty string.] to parameter [InputObject]
DEBUG: ParameterBinding Information: 0 : BIND arg [Cannot bind argument to parameter 'Identity' because it is an empty string.] to param [InputObject] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [out-lineoutput]
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Format-Default]
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Format-Default]
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Format-Default]
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : BIND PIPELINE object to parameters: [Format-Default]
DEBUG: ParameterBinding Information: 0 : PIPELINE object TYPE = [System.Management.Automation.ErrorRecord]
DEBUG: ParameterBinding Information: 0 : RESTORING pipeline parameter's original values
DEBUG: ParameterBinding Information: 0 : Parameter [InputObject] PIPELINE INPUT ValueFromPipeline NO COERCION
DEBUG: ParameterBinding Information: 0 : BIND arg [Cannot bind argument to parameter 'Identity' because it is an empty string.] to parameter [InputObject]
DEBUG: ParameterBinding Information: 0 : BIND arg [Cannot bind argument to parameter 'Identity' because it is an empty string.] to param [InputObject] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [format-default]
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : BIND arg [1] to parameter [Version]
DEBUG: ParameterBinding Information: 0 : Executing DATA GENERATION metadata: [Microsoft.PowerShell.Commands.SetStrictModeCommand+ArgumentToVersionTransformationAt
tribute]
DEBUG: ParameterBinding Information: 0 : result returned from DATA GENERATION: 1.0
DEBUG: ParameterBinding Information: 0 : COERCE arg to [System.Version]
DEBUG: ParameterBinding Information: 0 : Parameter and arg types the same, no coercion is needed.
DEBUG: ParameterBinding Information: 0 : Executing VALIDATION metadata: [Microsoft.PowerShell.Commands.SetStrictModeCommand+ValidateVersionAttribute]
DEBUG: ParameterBinding Information: 0 : BIND arg [1.0] to param [Version] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : CALLING EndProcessing
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : BIND arg [1] to parameter [Version]
DEBUG: ParameterBinding Information: 0 : Executing DATA GENERATION metadata: [Microsoft.PowerShell.Commands.SetStrictModeCommand+ArgumentToVersionTransformationAt
tribute]
DEBUG: ParameterBinding Information: 0 : result returned from DATA GENERATION: 1.0
DEBUG: ParameterBinding Information: 0 : COERCE arg to [System.Version]
DEBUG: ParameterBinding Information: 0 : Parameter and arg types the same, no coercion is needed.
DEBUG: ParameterBinding Information: 0 : Executing VALIDATION metadata: [Microsoft.PowerShell.Commands.SetStrictModeCommand+ValidateVersionAttribute]
DEBUG: ParameterBinding Information: 0 : BIND arg [1.0] to param [Version] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : CALLING EndProcessing
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : BIND arg [1] to parameter [Version]
DEBUG: ParameterBinding Information: 0 : Executing DATA GENERATION metadata: [Microsoft.PowerShell.Commands.SetStrictModeCommand+ArgumentToVersionTransformationAt
tribute]
DEBUG: ParameterBinding Information: 0 : result returned from DATA GENERATION: 1.0
DEBUG: ParameterBinding Information: 0 : COERCE arg to [System.Version]
DEBUG: ParameterBinding Information: 0 : Parameter and arg types the same, no coercion is needed.
DEBUG: ParameterBinding Information: 0 : Executing VALIDATION metadata: [Microsoft.PowerShell.Commands.SetStrictModeCommand+ValidateVersionAttribute]
DEBUG: ParameterBinding Information: 0 : BIND arg [1.0] to param [Version] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : CALLING EndProcessing
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : BIND arg [1] to parameter [Version]
DEBUG: ParameterBinding Information: 0 : Executing DATA GENERATION metadata: [Microsoft.PowerShell.Commands.SetStrictModeCommand+ArgumentToVersionTransformationAt
tribute]
DEBUG: ParameterBinding Information: 0 : result returned from DATA GENERATION: 1.0
DEBUG: ParameterBinding Information: 0 : COERCE arg to [System.Version]
DEBUG: ParameterBinding Information: 0 : Parameter and arg types the same, no coercion is needed.
DEBUG: ParameterBinding Information: 0 : Executing VALIDATION metadata: [Microsoft.PowerShell.Commands.SetStrictModeCommand+ValidateVersionAttribute]
DEBUG: ParameterBinding Information: 0 : BIND arg [1.0] to param [Version] SUCCESSFUL
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Set-StrictMode]
DEBUG: ParameterBinding Information: 0 : CALLING BeginProcessing
DEBUG: ParameterBinding Information: 0 : CALLING EndProcessing
Test-Binding : Cannot bind argument to parameter 'Identity' because it is an empty string.
At line:1 char:76
+ Trace-Command parameterbinding -Expression {Get-ADUser -Identity Test-User | Test- ...
+ ~~~~~
+ CategoryInfo : InvalidData: (CN=Walter Kerce...,DC=contoso,DC=com:PSObject) [Test-Binding], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Test-Binding
DEBUG: ParameterBinding Information: 0 : CALLING EndProcessing
DEBUG: ParameterBinding Information: 0 : CALLING EndProcessing
我的目标是了解为什么此绑定在此实例中失败。
编辑:
这不是重复的,因为我没有使用 $null returns。
不幸的是,这是 AD cmdlet 的一个已知问题——如果您向 AD cmdlet 生成的对象询问 属性 它没有,它会自动生成并给它一个 $null值而不是正确返回 属性 不存在,这将允许参数绑定继续并获得正确的值。
您可以查看关于此的 Microsoft Connect 项目here。
我见过的唯一解决方法是在您的函数中以 AD 对象使用的确切 属性 名称命名参数,并为其他名称起别名。如果我希望能够通过管道将 Get-ADComputer 传递给它,我通常必须将我的参数命名为 DNSHostName,例如,使用 ComputerName 的别名。