Powershell管道和命令行参数

我有一个Powershell函数需要3个参数(其中两个是可选的),函数的参数定义如下:

Param(
    [parameter(Mandatory=$true, ValueFromPipeline=$true)]
    [String]
    $text,

    [parameter(Mandatory=$false)]
    [String]
    $from = "auto",

    [parameter(Mandatory=$false)]
    [String]
    $to = "lt"
)

如果我用1,2或3个命令行参数运行脚本 - 一切正常。 如果我没有参数运行,但从管道传递值 - 一切正常。 工作示例:

Foo "hello"
Foo "hola" es
Foo "hola" es lt
"hello" | Foo

我希望能够将值从管道传递给第一个参数并提供额外的命令行参数,但我收到错误:“输入对象不能绑定到该命令的任何参数,因为该命令不需要流水线输入或输入及其属性与任何采用流水线输入的参数都不匹配“。

有一个工作示例,如果我按名称提供参数:

"hello" | Foo -from en -to ru

但我不喜欢随时键入参数的名称。 这可以忽略不计,有没有捷径? 不工作(愿望清单)的例子(任何将做):

"hello" | Foo en es
"hello" | Foo - en es
"hello" | Foo -- en es

你可以使-Text成为最后一个位置参数:

Param(
    [Parameter(Position=2, Mandatory=$true, ValueFromPipeline=$true)]
    [String]$text,

    [Parameter(Position=0, Mandatory=$false)]
    [String]$from = "auto",

    [Parameter(Position=1, Mandatory=$false)]
    [String]$to = "lt"
)

但是当不从流水线读取管理参数或使用3个​​参数调用函数时,必须使用命名参数调用该函数:

Foo -Text 'something'

否则会提示您输入:

PS C:> Foo 'something'

cmdlet Foo at command pipeline position 1
Supply values for the following parameters: _

所以,基本上你可以选择你想要提供参数名称的场景:

  • 对于从管道中读取时的可选参数,或者
  • 用于不从管道读取时的强制参数。
  • 链接地址: http://www.djcxy.com/p/37877.html

    上一篇: Powershell pipe and command line arguments

    下一篇: Execute PowerShell Script from C# with Commandline Arguments