在我的模块中,我有两个函数:'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',我想要 帮助添加数据 向他们展示正确的参赛资格。
提前感谢您的帮助。