es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál es la forma más sencilla de los Parámetros Dinámicos?

Tratando de obtener una mejor comprensión de los Parámetros Dinámicos, pero algo me sigue molestando. Todos los ejemplos que he encontrado en la web (Internet), siempre incluyen/definen los atributos del parámetro.

Esto es con lo que estoy trabajando:

Function Test-DynamicParameters {
[cmdletbinding()]
    Param (
        [System.IO.DirectoryInfo]$Path
    )
    DynamicParam
    {
        if ($Path.Extension) {
              $parameterAttribute = [System.Management.Automation.ParameterAttribute]@{
                  Mandatory = $false
              }

<pre><code>          $attributeCollection = [System.Collections.ObjectModel.Collection[System.Attribute]]::new()
          $attributeCollection.Add($parameterAttribute)

          $dynParam1 = [System.Management.Automation.RuntimeDefinedParameter]::new(
            'TestSwitch', [switch], $attributeCollection
          )

          $paramDictionary = [System.Management.Automation.RuntimeDefinedParameterDictionary]::new()
          $paramDictionary.Add('TestSwitch', $dynParam1)
          $paramDictionary
    }
}
Begin { }
Process
{
    $PSBoundParameters
}
End { }
</code></pre>

<p>}

. . .actualmente he intentado varias combinaciones de eliminar ciertas líneas/código para ver qué haría que mi Parámetro Dinámico se muestre, pero nada funciona sin que los atributos sean declarados. ¿Es esto necesario?

Pregunta: ¿Cuál es la forma más simple de declaración de Parámetro Dinámico que necesitaría para que funcione?

Por ejemplo, ¿puede acortarse de manera que solo se defina el nombre? ¿O PowerShell insistiría en que se especifique un tipo en lugar de usar el valor predeterminado de [object]? Algo como:

$paramDictionary = [System.Management.Automation.RuntimeDefinedParameterDictionary]::new()
$paramDictionary.Add('TestSwitch')
$paramDictionary

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para que los parámetros dinámicos funcionen, es necesario definir el nombre y el tipo del parámetro. PowerShell no puede inferir el tipo solo a partir del nombre, por lo que es necesario incluirlo en la definición.

    Entonces, la forma más simple de declarar un parámetro dinámico que necesitarías para que funcione es:

    $dynParam1 = [System.Management.Automation.RuntimeDefinedParameter]::new(
      'TestSwitch', [switch], [System.Collections.ObjectModel.Collection[System.Attribute]]::new()
    )
    

    Esto define un parámetro dinámico llamado TestSwitch, con un tipo de [switch] y sin atributos.

Comments are closed.