Question

Powershell expose certains paramètres, « paramètres dynamiques de », en fonction du contexte. La page MSDN explique assez bien le mécanisme, mais le maigre est que pour en savoir plus sur ces on doit appeler GetDynamicParameters () , qui renvoie une classe contenant des paramètres supplémentaires. Je dois obtenir ces paramètres par réflexion, et (ici est le noeud de celui-ci), dans un contexte ReflectionOnly (qui est, les types sont chargés avec ReflectionOnlyLoadFrom). Donc, pas Assembly.InvokeMember ( "GetDynamicParameters").

Peut-on faire?

Était-ce utile?

La solution

Non

. La réflexion va à l'encontre des métadonnées d'assemblage statique. Les paramètres dynamiques en powershell sont ajoutés à exécution par la commande ou la fonction elle-même.

Autres conseils

Peut-être cela aide:

1: Defintion des paramètres dynamiques

#===================================================================================
# 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: définition de la fonction qui génère les paramètres de dynamique

#-------------------------------------------------------------------------------------------------------        
# 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. Fonction qui utilise les params dynamiques

#-------------------------------------------------------------------------------------------------------
# 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 {}
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top