¿Cómo consigo alrededor de PowerShell parámetros de tuberías no vinculante hasta después BeginProcessing se llama?

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

  •  19-09-2019
  •  | 
  •  

Pregunta

Estoy escribiendo un cmdlet que se puede llamar en medio de una tubería. Con este cmdlet, hay parámetros que tienen el ValueFromPipelineByPropertyName atributo definido de manera que el cmdlet se puede usar parámetros con los mismos nombres que se han definido anteriormente en la tubería.

La paradoja de que me he encontrado es reemplazado en el BeginProcessing () método , utilizo uno de los parámetros que se pueden obtener su valor unida de la tubería. De acuerdo con la Cmdlet Procesamiento del ciclo de vida , la unión de los parámetros de tuberías no se produce hasta después BeginProcessing () se llama. Por lo tanto, parece que no soy capaz de confiar en los parámetros de tuberías con destino si están tratando de ser utilizado en BeginProcessing () .

He pensado en mover las cosas a la > ProcessRecord (). Desafortunadamente, no existe una sola vez, operación relativamente caro que tiene que ocurrir. El mejor lugar para que esto suceda parece estar en la BeginProcessing () método para ayudar a asegurar que sólo ocurre una vez en la tubería.

algunas preguntas interrogante en torno a esto:

  1. ¿Hay un bien forma de evitar esto?
  2. Estos mismos parámetros también tienen la atributo obligatorios establecidos en ellos. ¿Cómo puedo incluso llegar tan lejos sin PowerShell se quejan de no tener estos parámetros necesarios?

Gracias de antemano por sus pensamientos.


Actualizar

Saqué la segunda parte de la pregunta como me di cuenta de que no entendía parámetros de tuberías con destino lo suficientemente bien. Yo pensaba que mistakingly parámetros de tuberías con destino vinieron de la anterior Cmdlet que se ejecuta en la tubería. La realidad provienen de la objetivo que se pasa a través de la tubería! Hice referencia a un href="http://keithhill.spaces.live.com/Blog/cns!5A8D2641E0963A97!6130.entry" rel="nofollow puesto por Keith Hill para ayudar a entender esto.

¿Fue útil?

Solución

También podemos establecer un campo de instancia bool (Init) en false en BeginProcessing. A continuación, compruebe si el parámetro se establece en BeginProcessing. Si es entonces llamar a un método que hace el inicio una vez (InitMe). En ProcessRecord comprobar el valor de inicialización y si es falsa, entonces llame InitMe. InitMe debe establecer Init true antes de regresar.

En cuanto a su segunda pregunta, si se ha marcado el parámetro como obligatoria, entonces debe ser suministrada como un parámetro oa través de la tubería. ¿Está utilizando múltiples conjuntos de parámetros? Si es así, entonces incluso si un parámetro está marcado como obligatorio, sólo es obligatorio si el conjunto de parámetros asociados es el que se determina por PowerShell para estar en uso para una invocación particular de la cmdlet.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top