我正在尝试在Powershell中使用2个参数创建一个cmdlet函数。我希望这两个参数之一为ConsoleColor,但ISE抱怨并说函数参数列表中有一个 Missing')'。但我找不到丢失的{{1 }}。
这是我的功能:
)
我在Powershell方面不是很好,所以我可能还不知道这可能是愚蠢的事情。
答案 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
}
}