【问题标题】:Converting to a ValueFromPipeline function powershell转换为 ValueFromPipeline 函数 powershell
【发布时间】:2022-01-28 03:54:06
【问题描述】:

所以我有一个名为“Get-SomeValueFromSomewhere”的函数。我希望能够按如下方式将值导入其中:

  1. 'entry1','entry2' | Get-SomeValueFromSomewhere
    
  2. Get-SomeValueFromSomewhere -parameter1 'entry1','entry2'
    

函数如下,但我不知道如何让它支持管道。目前我收到一个错误“无法处理参数 parameter1 的参数转换。无法将值转换为 System.string 类型。'

function Get-SomeValueFromSomewhere {
    [OutputType([string])]
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [string[]]$parameter1,

        [Parameter(Mandatory = $true, ValueFromPipeline = $false)]
        [string]$parameter2
    )

    Process {
        # do all of the processing here   
    }
}

非常感谢任何和所有帮助,谢谢!

【问题讨论】:

  • 'entry1','entry2' | Get-SomeValueFromSomewhereGet-SomeValueFromSomewhere -parameter1 'entry1','entry2' 都不会产生您提到的错误。请向我们展示您提供给命令的确切输入。
  • 所以你想将两个值都绑定到两个参数?
  • 该错误可能来自将 array 作为参数传递给 string 参数。
  • [1] 请在您的问题中发布 ENTIRE EXACT 错误消息...并将其包装成代码格式标记以使其易于阅读。 ///// [2] 为什么列出这么多版本的powershell?如果您需要 v2,则删除其他版本...否则,请列出您需要的实际最低版本。
  • 您已将参数 2 必需 (Mandatory = $true) 但您没有将该参数提供给函数。你发送的只是一个参数1的数组..

标签: powershell powershell-2.0 powershell-3.0 powershell-4.0


【解决方案1】:

假设您想要多个不同的参数,简单的答案是从您的第一个参数中删除数组选项,并分配 position arguments,并像这样使用 ValueFromRemain

function Get-SomeValueFromSomewhere {
    [OutputType([string])]
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position=0)]
        [string]$parameter1,

        [Parameter(Mandatory = $true, ValueFromPipeline  = $true, Position=1)]
        [string]$parameter2
    )

    Process {
        # do all of the processing here   
    }
}

如果您尝试运行 Get-SomeValueFromSomewhere 两次,一次针对 entry1,然后再次针对 entry2,那么您将需要 ForEach loop

function Get-SomeValueFromSomewhere {
    [OutputType([string])]
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [string[]]$parameter1
    )

    Process {
        foreach($entry in $parameter1){
             Write-Output $entry
             # do all of the processing here   
        }

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多