Проблема была отмечена в комментариях. Вы не можете просто присвоить то, что называется Default
, как значение по умолчанию для вашего параметра.
Поскольку у этого перечисления нет значения по умолчанию, я предложу другой подход.
Не используйте значение по умолчанию для параметра, затем используйте условное (bleh) или splatting (super cool) для обработки этого:
Условный
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
}
}
Splatting
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
}
}