传递可选参数

Mar*_*arc 4 parameters powershell

我有一个PowerShell脚本CSV2JSON.ps1,代码如下:

param(
        [String]$FieldSeparator=",",
        [String[]]$Header
)

$input | ConvertFrom-Csv -Delimiter $FieldSeparator -Header $Header | ConvertTo-JSON
Run Code Online (Sandbox Code Playgroud)

如果我称之为.\CSV2JSON.ps1 -FieldSeparator "|" -Header "name|age"它工作正常.但是,如果删除可选参数Header,ConvertFrom-Csvcmdlet会抱怨Header不能为null:

ConvertFrom-Csv : Cannot validate argument on parameter 'Header'.
The argument is null. Supply a non-null argument and try the command again.
Run Code Online (Sandbox Code Playgroud)

-Header如果没有提供,我根本不想传递参数.是否有一种简洁的方法来传递可选参数而无需进入If语句?

Mat*_*sen 7

我很惊讶,没有人建议泼溅$PSBoundParameters自动变量.

$PSBoundParameters 是一个哈希表,包含传递给命令的所有参数参数.

只需将$FieldSeparator参数重命名为$Delimiter,您就可以了.FieldSeparator如果需要,您可以将名称作为参数别名提供:

param(
        [Alias('FieldSeparator')]
        [String]$Delimiter=",",
        [String[]]$Header
)

$input | ConvertFrom-Csv @PSBoundParameters | ConvertTo-JSON
Run Code Online (Sandbox Code Playgroud)

如果-Header在执行调用函数/脚本时省略了该参数,则在调用时也将省略该参数ConvertFrom-Csv