Pregunta

PowerShell expone algunos parámetros ",parámetros dinámicos", basado en el contexto. La página MSDN explica el mecanismo bastante bien, pero el flaco es que para averiguar sobre estos debe llamar GetDynamicParameters (), que devuelve una clase que contenga los parámetros adicionales. Necesito obtener estos parámetros a través de la reflexión, y (aquí está el quid de él), en un contexto de reflexión en su sentido (es decir, los tipos están cargados con reflexionylload desde). Entonces, sin ensamblaje. InvokEmember ("GetDynamicParameters").

Se puede hacer esto?

¿Fue útil?

Solución

No. Reflexión funciona contra metadatos de ensamblaje estático. Los parámetros dinámicos en PowerShell se agregan en tiempo de ejecución por el comando o función misma.

Otros consejos

Quizás esto ayuda:

1: definición de los parámetros dinámicos

#===================================================================================
# DEFINITION OF FREE FIELDS USED BY THE CUSTOMER
#-----------------------------------------------------------------------------------
# SYNTAX: @{ <FF-Name>=@(<FF-Number>,<isMandatory_CREATE>,<isMandatory_UPDATE>); }
$usedFFs = @{               
                      "defaultSMTP"=@(2,1,0); `
                      "allowedSMTP"=@(3,1,0); `
                       "secondName"=@(100,1,0); `
                            "orgID"=@(30001,1,0); `
            "allowedSubjectTypeIDs"=@(30002,1,0); `
            }

# FF-HelpMessage for input          
$usedFFs_HelpMSG = @{ 2="the default smtp domain used by the organizaiton. Sampel:'algacom.ch'"; `
                      3="comma seperated list of allowed smtp domains. Sampel:'algacom.ch,basel.algacom.ch'"; `
                      100="an additional organization name. Sampel:'algaCom AG')"; `
                      30001="an unique ID (integer) identifying the organization entry"; `
                      30002="comma seperated list of allowed subject types. Sampel:'1,2,1003,10040'"; `
            }

2: Definición de función que construye los parámetros dinámicos

#-------------------------------------------------------------------------------------------------------        
# Build-DynParams : Used to build the dynamic input parameters based on $usedFFs / $usedFFs_HelpMSG
#-------------------------------------------------------------------------------------------------------
function Build-DynParams($type) {
    $paramDictionary = New-Object -Type System.Management.Automation.RuntimeDefinedParameterDictionary

    foreach($ffName in $usedFFs.Keys) {
        $ffID = $usedFFs.Item($ffName)[0]
        $dynAttribCol = New-Object -Type System.Collections.ObjectModel.Collection[System.Attribute]
        $dynAttrib = New-Object System.Management.Automation.ParameterAttribute
        $dynAttrib.ParameterSetName = "__AllParameterSets"
        $dynAttrib.HelpMessage = $usedFFs_HelpMSG.Item($ffID)
        switch($type) {
            "CREATE" { $dynAttrib.Mandatory = [bool]($usedFFs.Item($ffName)[1]) }
            "UPDATE" { $dynAttrib.Mandatory = [bool]($usedFFs.Item($ffName)[2]) }
        }   
        $dynAttribCol.Add($dynAttrib)   
        $dynParam = New-Object -Type System.Management.Automation.RuntimeDefinedParameter($ffName, [string], $dynAttribCol)
        $paramDictionary.Add($ffName, $dynParam)        
    }
    return $paramDictionary         
}

3. Función que hace uso de los parámetros dinámicos

#-------------------------------------------------------------------------------------------------------
# aAPS-OrganizationAdd : This will add a new organization entry
#-------------------------------------------------------------------------------------------------------
Function aAPS-OrganizationAdd {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$true,HelpMessage="The name of the new organization")] 
        [String]$Descr,
        [Parameter(Mandatory=$false,HelpMessage="The name of the parent organization")] 
        [String]$ParentDescr=$null,
        [Parameter(Mandatory=$false,HelpMessage="The status of the new organization [1=Active|2=Inactive]")] 
        [int]$Status = 1,
        [Parameter(Mandatory=$false,HelpMessage="If you want to see the data of the deactivated object")] 
        [switch]$ShowResult
    )
    DynamicParam { Build-DynParams "CREATE" }

    Begin {}

    Process {
        # do what oyu want here
    }

    End {}
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top