Powershell管道处理-$可以工作,但$ParamName不能

Powershell管道处理-$可以工作,但$ParamName不能,powershell,pipeline,Powershell,Pipeline,我很难理解这种行为 给定这样的Powershell脚本(使用实际代码更新) [cmdletbinding(DefaultParameterSetName=“Default”)] param( [cmdletbinding()] [参数(必需=$true, ValueFromPipeline=$true, 参数setName=“默认值”)] [参数(必需=$true,参数setName=“Azure”)] [参数(必需=$true,参数setName=“AWS”)] [别名(“服务器”)] [St

我很难理解这种行为

给定这样的Powershell脚本(使用实际代码更新)

[cmdletbinding(DefaultParameterSetName=“Default”)]
param(
[cmdletbinding()]
[参数(必需=$true,
ValueFromPipeline=$true,
参数setName=“默认值”)]
[参数(必需=$true,参数setName=“Azure”)]
[参数(必需=$true,参数setName=“AWS”)]
[别名(“服务器”)]
[String[]]$SqlServer,
#其他参数
)
开始{}
过程{
写调试“正在处理SQL server$\ux…”
#获取SMO对象
$Error.Clear()
试一试{
#获取到目标服务器的连接
$\u svr=\u get-sqlconnection-Server$\ulogin$DatabaseLogin-Pwd$Password
#在服务器上处理数据库
}抓住{
$Error
}
}结束{}
据我所知,$\是管道中的当前对象,我想我理解为什么“Write Host$\可以工作。但为什么“Write Host$InputVariable”输出一个空字符串

我必须如何定义参数,以便可以通过管道传递值并将其作为命名参数(即-./script.ps-InputVariable“something”)

这是有效的:“someservername”|。/script 这不起作用:./script-SqlServer“someservername”


谢谢。

$\ucode>仅在处理管道输入时填充

如果您想同时接受这两个选项:

"string","morestrings" | ./script.ps1
# and
./script.ps1 -MyParameter "string","morestrings"
。。。然后使用以下模式:

[CmdletBinding()]
param(
    [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
    [string[]]$MyParameter
)

process {
    foreach($paramValue in $MyParameter){
        Write-Host "MyParameter: $paramValue"
    }
}

只有在处理管道输入时,才会填充
$\uu

如果您想同时接受这两个选项:

"string","morestrings" | ./script.ps1
# and
./script.ps1 -MyParameter "string","morestrings"
。。。然后使用以下模式:

[CmdletBinding()]
param(
    [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
    [string[]]$MyParameter
)

process {
    foreach($paramValue in $MyParameter){
        Write-Host "MyParameter: $paramValue"
    }
}

提供的代码未按原样运行。请修复
param
块中的问题(
[cmdletbinding]
->
[cmdletbinding()]
参数
->
参数
)让我们知道1)您在哪个版本的PowerShell中看到了这种行为,2)您向脚本传递了什么输入:)在进行@MathiasR.Jessen提到的修复后,代码按预期工作。也就是说,当提供非空输入时,
Write Host$\ucode>和
Write Host$InputVariable
输出非空字符串。@bprocket您正在运行的实际代码是什么?我有一种感觉,您在这里提供的示例与您观察问题的代码有很大不同。代码示例已更新。在代码示例中,我尽量不要太冗长。如果有帮助,请告诉我。提供的代码没有按原样运行。请修复
param
块中的问题(
[cmdletbinding]
->
[cmdletbinding()]
参数
->
参数
)让我们知道1)您在哪个版本的PowerShell中看到了这种行为,2)您向脚本传递了什么输入:)在进行@MathiasR.Jessen提到的修复后,代码按预期工作。也就是说,当提供非空输入时,
Write Host$\ucode>和
Write Host$InputVariable
输出非空字符串。@bprocket您正在运行的实际代码是什么?我有一种感觉,您在这里提供的示例与您观察问题的代码有很大不同。代码示例已更新。在代码示例中,我尽量不要太冗长。如果有帮助,请告诉我。或者
“string”、“morestrings”|/script.ps1-myparameter{$}
:)。或者
“string”、“morestrings”|/script.ps1-myparameter{$}
:)。