Powershell dynamische Parameter ( DynamicParam ) verschachteln
Hallo @ All
Ich stehe wieder mal vor einem Problem mit Powershell das ich gerne umsetzen möchte.
In diesem Thread ( Powershell Parametersets und Auswahlmöglichkeiten ) hat mir colinardo (nochmals mein Dank dazu!) bereits mit super Beispielen und sogar einem 100% funktionierendem Snipped weiter geholfen. Jetzt bin ich auf den Geschmack gekommen und versuche seitdem dynamische Parameter zu verschachteln, sprich, wenn ein Parameter aus einem ParameterSet ausgewählt wurde, dass weitere Parameter angezeigt werden.
In etwa so wie in diesem Beispiel:
Wählt man nun "CreateRegKey_AsActiveSetup" sollen noch zusätzliche Parameter auftauchen wie "StubPath", "ComponentID", "Version". Irgendwie weiß ich aber nicht so recht wie ich ansetzen soll. Bisher hat alles was ich versucht habe schlicht "nicht" funktioniert.
Hat eventuell jemand eine Ide dazu?
Danke!
Mayho
Ich stehe wieder mal vor einem Problem mit Powershell das ich gerne umsetzen möchte.
In diesem Thread ( Powershell Parametersets und Auswahlmöglichkeiten ) hat mir colinardo (nochmals mein Dank dazu!) bereits mit super Beispielen und sogar einem 100% funktionierendem Snipped weiter geholfen. Jetzt bin ich auf den Geschmack gekommen und versuche seitdem dynamische Parameter zu verschachteln, sprich, wenn ein Parameter aus einem ParameterSet ausgewählt wurde, dass weitere Parameter angezeigt werden.
In etwa so wie in diesem Beispiel:
Function Start-Test() {
[CmdletBinding()]
param ([parameter(ParameterSetName="CREATEREGKEY")] [switch]$CreateRegistryKey)
DynamicParam{
$attrCollection = new-object System.Collections.ObjectModel.Collection[System.Attribute]
$paramDic = new-object System.Management.Automation.RuntimeDefinedParameterDictionary
if ($CreateRegistryKey) {
$attr = new-object System.Management.Automation.ParameterAttribute
$attr.ParameterSetName = "CREATEREGKEY" ; $attr.Mandatory = $false ; $attrCollection.Add($attr)
$paramDic.Add("HIVE", (new-object System.Management.Automation.RuntimeDefinedParameter("HIVE", [Array], $attrCollection)))
$paramDic.Add("Path", (new-object System.Management.Automation.RuntimeDefinedParameter("Path", [String], $attrCollection)))
$paramDic.Add("AsActiveSetup", (new-object System.Management.Automation.RuntimeDefinedParameter("AsActiveSetup", [String], $attrCollection)))
return $paramDic
}
}
}
Wählt man nun "CreateRegKey_AsActiveSetup" sollen noch zusätzliche Parameter auftauchen wie "StubPath", "ComponentID", "Version". Irgendwie weiß ich aber nicht so recht wie ich ansetzen soll. Bisher hat alles was ich versucht habe schlicht "nicht" funktioniert.
Hat eventuell jemand eine Ide dazu?
Danke!
Mayho
Please also mark the comments that contributed to the solution of the article
Content-ID: 236646
Url: https://administrator.de/forum/powershell-dynamische-parameter-dynamicparam-verschachteln-236646.html
Printed on: January 25, 2025 at 00:01 o'clock
9 Comments
Latest comment
Hallo Mayho,
also was ich jetzt auf Anhieb in deinem Bild erkennen kann ist folgender Fehler:
Der Name des ersten Parameters CreateRegKey_HIVE stimmt nicht mit dem RuntimeDefinedParameter Namen überein CreateRegKey_TOHIVE
Ist doch alles kein Hexenwerk, wenn du dir mein Beispiel nochmal genau ansiehst. Wichtig ist auch das du bei Verwendung von DynamicParam die Funktions-Abschnitte wie begin{}, process{} und end{} benutzt.
Grüße Uwe
also was ich jetzt auf Anhieb in deinem Bild erkennen kann ist folgender Fehler:
Der Name des ersten Parameters CreateRegKey_HIVE stimmt nicht mit dem RuntimeDefinedParameter Namen überein CreateRegKey_TOHIVE
Ist doch alles kein Hexenwerk, wenn du dir mein Beispiel nochmal genau ansiehst. Wichtig ist auch das du bei Verwendung von DynamicParam die Funktions-Abschnitte wie begin{}, process{} und end{} benutzt.
Grüße Uwe
hier noch ein Beispiel:
Suche DNS Command um Host A Einträge zu ändern
Du hast 100% einfach wieder dein Anzeigeproblem in der ISE, das hindert aber nichts an der korrekten Funktion. Damit die Parameter auch angezeigt werden musst du natürlich immer wieder zwischendurch F5 drücken und kompilieren damit die Parameter in der Konsole angezeigt werden können.
Suche DNS Command um Host A Einträge zu ändern
Du hast 100% einfach wieder dein Anzeigeproblem in der ISE, das hindert aber nichts an der korrekten Funktion. Damit die Parameter auch angezeigt werden musst du natürlich immer wieder zwischendurch F5 drücken und kompilieren damit die Parameter in der Konsole angezeigt werden können.
das kann so auch nicht gehen, da zu dem Zeitpunkt PSBoundParameters noch nicht mit deinen vorherigen Parametern befüllt ist; das wird ja erst mit return $paramDic gemacht.
Schau mir das mal an und melde mich später wieder...
-edit- öhm, der Code ist wieder der alte ...
Schau mir das mal an und melde mich später wieder...
-edit- öhm, der Code ist wieder der alte ...
So wie du das machen willst (das Verschachteln) geht das meines Wissens nicht(der Grund siehe voriger Kommentar). Hier solltest du deine Vorgehensweise überdenken und am Anfang mit differenzierten Parametern arbeiten z.B mit zwei unterschiedlichen Switches -CREATEREGKEY / -CREATEREGKEY-XYZ.
Der User muss schon wissen was er tut. Dazu hilft außerdem eine gute Dokumentation im Synopsis Abschnitt deiner Funktion.
Grüße Uwe
Der User muss schon wissen was er tut. Dazu hilft außerdem eine gute Dokumentation im Synopsis Abschnitt deiner Funktion.
Ich bin mir aber garnicht mehr so sicher ob ich das brauche. Sollte vielleicht einfach noch einen zusätzliche Switch einführen mit den entsprechenden Parametern:
genau das meine ich Grüße Uwe