Frage

PowerShell enthüllt einige Parameter ","Dynamische Parameter"Basierend auf dem Kontext. Die MSDN -Seite erklärt den Mechanismus ziemlich gut, aber die Skinny ist, dass man davon erfahren muss Getdynamicparameters (), was eine Klasse mit zusätzlichen Parametern zurückgibt. Ich muss diese Parameter über Reflexion erhalten, und (hier ist der Kern davon) in einem reflexionalen Kontext (dh die Typen werden mit reflexionaler Ladung ausgeladen). Also keine Assembly.invokemember ("getdynamicparameters").

Kann das getan werden?

War es hilfreich?

Lösung

Die Reflexion arbeitet gegen statische Versammlungsmetadaten. Dynamische Parameter in PowerShell werden bei hinzugefügt Laufzeit durch den Befehl oder die Funktion selbst.

Andere Tipps

Vielleicht hilft das:

1: Definition der dynamischen Parameter

#===================================================================================
# 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: Definition der Funktion, die die dynamischen Parameter erstellt

#-------------------------------------------------------------------------------------------------------        
# 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. Funktion, die die dynamischen Parameter verwendet

#-------------------------------------------------------------------------------------------------------
# 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 {}
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top