Powershell函数参数类型System.ConsoleColor-函数参数列表中缺少')'

时间:2019-01-17 19:40:56

标签: .net function powershell cmdlet

我正在尝试在Powershell中使用2个参数创建一个cmdlet函数。我希望这两个参数之一为ConsoleColor,但ISE抱怨并说函数参数列表中有一个 Missing')'。但我找不到丢失的{{1 }}。

这是我的功能:

)

我在Powershell方面不是很好,所以我可能还不知道这可能是愚蠢的事情。

1 个答案:

答案 0 :(得分:1)

该问题已在评论中指出。您不能只分配一个名为Default的参数作为参数的默认值。

由于该枚举没有“默认”值,因此我建议使用另一种方法。

不要为该参数使用默认值,而是使用条件(淡淡)或splatting(超酷)来处理该问题:

视情况而定

function Log {
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline=$true, ValueFromRemainingArguments=$true)]
        [AllowNull()]
        [AllowEmptyString()]
        [AllowEmptyCollection()]
        [string[]]$messages,

        [System.ConsoleColor]$color
    )

    if (($messages -eq $null) -or ($messages.Length -eq 0)) {
        $messages = @("")
    }

    foreach ($msg in $messages) {
        if ($color) {
            Write-Host $msg -ForegroundColor $color
        } else {
            Write-Host $msg
        }
        $msg | Out-File $logFile -Append
    }
}

喷溅

function Log {
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline=$true, ValueFromRemainingArguments=$true)]
        [AllowNull()]
        [AllowEmptyString()]
        [AllowEmptyCollection()]
        [string[]]$messages,

        [System.ConsoleColor]$color
    )

    $params = @{}
    if ($color) {
        $params.ForegroundColor = $color
    }

    if (($messages -eq $null) -or ($messages.Length -eq 0)) {
        $messages = @("")
    }

    foreach ($msg in $messages) {
        Write-Host $msg @params

        $msg | Out-File $logFile -Append
    }
}