Wie kann ich um Powershell erhalten unverbindlich Pipeline Parameter erst nach Beginprocessing genannt wird?

StackOverflow https://stackoverflow.com/questions/1303282

  •  19-09-2019
  •  | 
  •  

Frage

Ich schreibe eine Cmdlets, die in der Mitte einer Pipeline aufgerufen werden können. Mit dieser Cmdlets gibt es Parameter, die die ValueFromPipelineByPropertyName Attribut definiert, so dass die Cmdlets Parameter mit den gleichen Namen verwenden kann, die früher in der Pipeline definiert sind.

Das Paradox, das ich habe laufen in ist in der überschriebenen Cmdlets Verarbeitung Lifecycle , die Bindung von Pipeline-Parameter erfolgt erst nach Beginprocessing () genannt wird. Daher scheint es, dass ich nicht in der Lage bin auf Pipeline gebunden Parameter zu verlassen, wenn sie in Beginprocessing () .

Ich habe darüber nachgedacht, die Dinge auf den ProcessRecord () Methode. Leider gibt es eine einmalige, relativ teure Operation, die auftreten muss. Der beste Platz für dies zu geschehen scheint in der Beginprocessing () Methode um sicherzustellen, dass es nur einmal in der Pipeline passiert.

A paar Fragen Frage rund um diese:

  1. Sie haben einen gut Weg, um dieses?
  2. Die gleichen Parameter haben auch die Pflicht Attribut auf sie gesetzt. Wie kann ich das noch weit kommen, ohne Powershell beschweren sich über nicht diese erforderlichen Parameter zu haben?

Vielen Dank im Voraus für Ihre Meinung.


Update

nahm ich den zweiten Teil der Frage, wie ich merkte, ich habe einfach nicht Pipeline gebunden Parameter gut genug verstehen. Ich dachte, dass mistakingly Pipeline gebunden Parameter kamen aus der zurück Cmdlets , dass in der Pipeline ausgeführt. Die kommen eigentlich aus dem Objekt durch die Pipeline geleitet werden! Ich referenziert einen Beitrag von Keith Hill dies zu helfen, zu verstehen.

War es hilfreich?

Lösung

Sie können eine Instanz Feld Bool (Init) auf false in Beginprocessing gesetzt. Dann prüfen Sie, ob die Parameter in Beginprocessing gesetzt. Wenn es wird dann ein Verfahren nennen, das tut das ein Mal init (InitMe). In ProcessRecord den Wert von Init überprüfen und wenn es falsch ist, dann InitMe nennen. InitMe sollte Init auf true gesetzt vor der Rückkehr.

In Bezug auf Ihre zweite Frage, wenn Sie den Parameter als obligatorisch markiert haben, dann muss es entweder als Parameter oder über die Pipeline geliefert werden. Verwenden Sie mehrere Parametersätze? Wenn ja, dann, selbst wenn ein Parameter als obligatorisch gekennzeichnet ist, ist es nur erforderlich, wenn der zugehörige Parametersatz derjenige ist, der von Powershell bestimmt wird, in Verwendung für einen bestimmten Aufruf des Cmdlets zu sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top