Come faccio ad andare in giro PowerShell non vincolanti parametri di pipeline fino a dopo BeginProcessing si chiama?

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

  •  19-09-2019
  •  | 
  •  

Domanda

Sto scrivendo un cmdlet che può essere chiamato nel bel mezzo di una condotta. Con questo cmdlet, ci sono i parametri che hanno il attributo ValueFromPipelineByPropertyName definito in modo che il cmdlet può utilizzare i parametri con gli stessi nomi che sono definiti in precedenza in cantiere.

Il paradosso che ho incontrato è nel override BeginProcessing () metodo , ho utilizzare uno dei parametri che possono ottenere il suo valore vincolati dalla tubazione. Secondo la Cmdlet Processing Lifecycle , il legame dei parametri della pipeline non si verifica fino a quando dopo BeginProcessing () viene chiamato. Pertanto, sembra che non riesco a fare affidamento sui parametri della pipeline legato se stanno cercando di essere utilizzato in BeginProcessing () .

Ho pensato di spostare le cose al ProcessRecord () metodo "nofollow noreferrer" . Purtroppo, v'è una sola volta, un'operazione relativamente costosa che deve accadere. Il posto migliore per questo accada sembra essere nel BeginProcessing () metodo per garantire che avviene solo una volta nella conduttura.

A alcune domande domanda che circonda questo:

  1. C'è un bene modo per aggirare questo?
  2. Questi stessi parametri hanno anche la Mandatory attributo impostato su di loro. Come posso anche arrivare a questo punto senza PowerShell lamentarsi di non avere questi parametri richiesti?

Grazie in anticipo per i vostri pensieri.


Aggiornamento

ho tirato fuori la seconda parte della domanda, come ho capito io proprio non capivo parametri gasdotti legato abbastanza bene. Ho pensato che mistakingly parametri gasdotto legato provenivano dalla precedente Cmdlet che ha eseguito in cantiere. La realtà provengono dalla oggetto di essere passati attraverso la pipeline! Ho fatto riferimento a post di Keith Hill per aiutare a capire questo.

È stato utile?

Soluzione

È possibile impostare un campo di istanza bool (Init) per falso in BeginProcessing. Poi controllare per vedere se il parametro è impostato in BeginProcessing. Se è quindi chiamare un metodo che fa l'init una sola volta (InitMe). In ProcessRecord controllare il valore di Init e se è falso, quindi chiamare InitMe. InitMe dovrebbe impostare Init su true prima di tornare.

Per quanto riguarda la seconda domanda, se hai segnato il parametro come obbligatorio, allora deve essere fornito sia come un parametro o attraverso il gasdotto. Si sta utilizzando più set di parametri? Se è così, anche se un parametro è contrassegnato come obbligatorio, è obbligatorio solo se il parametro set associato è quella che è determinato da PowerShell essere utilizzato per una particolare invocazione del cmdlet.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top