Передача FromArgb() в качестве параметра функции

У меня есть следующая функция:

Function Color-Cells {
    Param (
        [Parameter(
            Mandatory = $true,
            Valuefrompipeline = $true)]
        [String]$Range,
        [Parameter(
            Mandatory = $true)]
        [System.Drawing.Color]$Color
    )
    $Global:WorkSheet.range($Range).Interior.color = $Color
}#End Function

Который я могу назвать так:

Color-Cells -Range "A1" -Color LightBlue

Без проблем.

Я хотел бы иметь возможность вызывать функцию следующим образом:

Color-Cells -Range "A1" -Color FromArgb(217,217,217)

чтобы получить более детальный выбор цвета ячейки, однако, когда я это делаю, я получаю следующую ошибку:

Color-Cells : Cannot process argument transformation on parameter 'Color'. Cannot convert value 
"FromArgb(217,190,238)" to type "System.Drawing.Color". Error: "FromArgb(217 is not a valid value for Int32."
At line:70 char:32
+ Color-Cells -Range "A1" -Color "FromArgb(217,217,217)"
+                                ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Color-Cells], ParameterBindingArgumentTransformationException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,Color-Cells

Я попытался вызвать функцию следующим образом:

  1. "FromArgb(217,217,217)"
  2. 'FromArgb(217,217,217)'
  3. `"FromArgb(217,217,217)`"

И все они выдают ошибки. Я не очень знаком с.Net, поэтому я не уверен, как это исправить. Моя конечная цель - создать функцию, которая может окрашивать диапазон ячеек на основе [System.drawing.color] известное имя или значение RGB.

Изменить для ясности:

TypeName является конкретным типом параметра в функции. Когда я вызываю функцию Color-cells -Color параметр является типом [System.Drawing.Color], Когда я вызываю функцию, используя статическое свойство (Color-Cells -Color LightBlue например), работает, просто найди. Тем не менее, когда я пытаюсь вызвать метод (Color-Cells -Color FromArgb(217,217,217) например), вот когда я получаю сообщение об ошибке. Есть ли способ передать только метод в функцию?

Согласно ответу Майка, я могу полностью назвать функцию, подобную этой:

Color-Cell -Range "A1" -Color $([System.Drawing.Color]::FromArgb(217,190,238))

Тем не менее, я хотел бы вызвать функцию (используя метод) без добавления $() вокруг команды и без [System.Drawing.Color]:: как я могу только со свойствами (например, LightBlue).

1 ответ

Решение

Для вызова статических методов используйте [TYPENAME]::MethodName(args),

Так что делайте то, что вы хотите, используйте это:

[System.Drawing.Color]::FromArgb(217,217,217)
Другие вопросы по тегам