PowerShell: DynamicParam: получить список переданных параметров? - PullRequest
0 голосов
/ 17 ноября 2018

Добрый день

К сожалению, PowerShell не может обнаружить набор параметров по типам параметров, например: если 2-й параметр передается как Int, выберите ParameterSet1, в противном случае используйте ParameterSet2.

Поэтому я бы хотел вручную определить переданные комбинации параметров.
Можно ли получить список переданных параметров в DynamicParam, что-то вроде этого:

Function Log {
    [CmdletBinding()]
    Param ()
    DynamicParam {
        # Is is possible to access the passed Parameters?,
        # something like that:
        If (Args[0].ParameterName -eq 'Message') { … }

        # Or like this:
        If (Args[0].Value -eq '…') { … }
    }
    …
}

Большое спасибо за любую помощь и свет!
Thomas

1 Ответ

0 голосов
/ 17 ноября 2018

Это первое обнаружение было неверным!: "Я нашел магию, с помощью $PSBoundParameters мы можем получить доступ к переданным параметрам."

Это правильный, но очень неутешительный ответ:
Это очень раздражает и невероятно, но похоже, что PowerShell не передает никакой информации о динамически передаваемых аргументах.

В следующем примере используется функция New-DynamicParameter, как здесь определено: Можно ли сделать набор параметров зависимым от значения другого параметра?

Function Test-DynamicParam {
    [CmdletBinding()]
    Param (
        [string]$FixArg
    )
    DynamicParam {
        # The content of $PSBoundParameters is just 
        # able to show the Params declared in Param():
        # Key     Value
        # ---     -----
        # FixArg  Hello

        # Add the DynamicParameter str1:
        New-DynamicParameter -Name 'DynArg' -Type 'string' -HelpMessage 'DynArg help'

        # Here, the content of $PSBoundParameters has not been adjusted:
        # Key     Value
        # ---     -----
        # FixArg  Hello
    }
    Begin {
        # Finally - but too late to dynamically react! -
        # $PSBoundParameters knows all Parameters (as expected):
        # Key     Value
        # ---     -----
        # FixArg  Hello
        # DynArg  World
    }
    Process {
        …
    }
}

# Pass a fixed and dynamic parameter
Test-DynamicParam -FixArg 'Hello' -DynArg 'World'
...