我正在尝试使用带有管道参数的$args
数组。
该函数需要在第一个流水线参数之后的任意数量的参数(例如param0):
function rpt-params {
param (
[Parameter(ValueFromPipeline=$true,Position=0,Mandatory=$true)][CrystalDecisions.CrystalReports.Engine.ReportDocument]$reportDocument
)
try {
write-host "count: " $args.count
#TODO process args
}
catch [Exception] {
write-host $_.Exception
}
finally {
return $reportDocument
}
}
尝试调用该函数会产生一个错误,该错误显示为“rpt-params:找不到与参数名称'param0'匹配的参数。”:
...
# syntax 0
rpt-params $rpt -param0 "mb-1" -param1 "me-1"
...
...
# syntax 1; explicitly naming the first parameter
rpt-params -reportDocument $rpt -param0 "mb-1" -param1 "me-1"
...
我的语法是问题还是与使用流水线参数有关?
答案 0 :(得分:1)
创建另一个参数,称为$ rest,并用[Parameter(ValueFromRemainingArguments = $true)]
装饰它。
答案 1 :(得分:0)
使用" [cmdletbinding()]"或" [Parameter()]",在这种情况下,您的功能变为高级功能。高级函数只能获取" Param"中指定的参数。而且没有了。为了使您的功能像以前一样,就像Keith建议的那样,您需要添加[Parameter(ValueFromRemainingArguments = $true)]
例如:
function rpt-params {
param (
[Parameter(ValueFromPipeline=$true,Position=0,Mandatory=$true)]
[CrystalDecisions.CrystalReports.Engine.ReportDocument]$reportDocument,
[Parameter(ValueFromRemainingArguments=$true)]$args
)
try {
write-host "count: " $args.count
#TODO Now args can have all remaining values
}
catch [Exception] {
write-host $_.Exception
}
finally {
return $reportDocument
}
}