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