当某些值为空时,通过管道按名称进行参数绑定

时间:2018-03-06 23:20:28

标签: powershell

在我的模块中,我有两个函数:'Get-Data'和'Add-Data'我在通过管道传递信息时遇到了麻烦。

以下简化代码显示了我的问题。

function Get-Data{
    param ($path)
    $out = Import-Csv $path
    Write-Output $out
}

数据如下,注意数据中存在“缺口”并且并非每个对象都具有所有三个属性,实际上它们不能。您只能拥有名称和颜色或名称和水果。 (在实际代码中还有更多属性)

Name,Color,Fruit
Jim,red,
Kate,,Apple
Bob,green,
Abby,,Banana

在Add-Data函数中,我想使用参数集,因为有很多参数,但只有4个参数集可能(简化代码中有两个,'A'和'B')。此功能从模块导出,我不希望用户能够输入无效的参数组合。

这是add-data函数:

function Add-Data {
    [CmdletBinding()]
    Param (
        [Parameter(
            Position = 1,
            ValuefromPipelineByPropertyName = $true,
            Mandatory = $true
        )]
        [System.String]$Name,

        [Parameter(
            ParameterSetName = 'A',
            Position = 2,
            ValuefromPipelineByPropertyName = $true,
            Mandatory = $true
        )]
        [System.String]$Color,

        [Parameter(
            ParameterSetName = 'B',
            Position = 3,
            ValuefromPipelineByPropertyName = $true,
            Mandatory = $true
        )]
        [System.String]$Fruit
    )
    BEGIN{}
    PROCESS{
        Write-Output "$Name $Color $Fruit"
    }
    END{}
}

当我将一个管道输送到另一个时,如下所示:

Get-Data -Path c:\some.csv | Add-Data

我收到错误:

Cannot bind argument to parameter 'Fruit' because it is an empty string

我知道我将一个空字符串传递给fruit参数,这是导致我出现此问题的原因,但显然不是我想要的行为。

我希望该属性为空以帮助解析参数集,因此它只需要Name和Color。

我不能使用[AllowNull()]或[AllowEmptyString()]并删除参数集,因为我希望用户从命令行使用'add-data',我想要     帮助添加数据 向他们展示正确的参赛资格。

提前感谢您的帮助。

0 个答案:

没有答案