Comment puis-je obtenir autour de PowerShell ne lie pas les paramètres de pipeline qu'après BeginProcessing est appelé?

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

  •  19-09-2019
  •  | 
  •  

Question

J'écris une applet de commande qui peut être appelé au milieu d'un pipeline. Avec cette applet de commande, il y a des paramètres qui ont le attribut de ValueFromPipelineByPropertyName défini de telle sorte que le cmdlet peut utiliser des paramètres avec les mêmes noms qui sont définis précédemment dans le pipeline.

Le paradoxe que j'ai rencontré est dans le redéfinie Cmdlet Cycle de vie Traitement , la liaison des paramètres de pipeline ne se produit pas jusqu'à ce que après BeginProcessing () est appelée. Il semble donc que je suis incapable de compter sur des paramètres liés pipeline si vous essayez d'utiliser dans BeginProcessing () .

J'ai pensé à faire avancer les choses à la ProcessRecord () . Malheureusement, il y a un temps, opération relativement coûteuse qui doit se produire. Le meilleur endroit pour que cela se produise semble être dans la BeginProcessing () méthode pour faire en sorte que cela se produit qu'une seule fois dans le pipeline.

quelques questions question entourant celle-ci:

  1. Est-il possible bon autour de cela?
  2. Ces mêmes paramètres ont également le obligatoire attribut mis sur eux. Comment puis-je obtenir encore loin sans se plaindre PowerShell de ne pas avoir ces paramètres requis?

Merci d'avance pour vos pensées.


Mise à jour

Je pris la deuxième partie de la question que je me suis aperçu que je ne comprenais tout simplement pas assez bien les paramètres liés pipeline. Je pensais que mistakingly paramètres liés pipeline est venu de la précédent Cmdlet exécuté dans le pipeline. Le fait venir de la objet étant passé à travers le pipeline! Je fait référence à une message par Keith colline pour aider à comprendre cela.

Était-ce utile?

La solution

Vous pouvez définir un champ d'instance bool (Init) false dans BeginProcessing. Vérifiez ensuite si le paramètre est réglé dans BeginProcessing. Si on appelle alors une méthode qui fait une fois init (InitMe). En ProcessRecord vérifier la valeur de Init et si elle est fausse, puis appelez InitMe. InitMe devrait mettre Init true avant de revenir.

En ce qui concerne votre deuxième question, si vous avez marqué le paramètre comme obligatoire alors il doit être fourni soit en tant que paramètre ou via le pipeline. Utilisez-vous plusieurs jeux de paramètres? Si oui, alors même si un paramètre est marqué comme obligatoire, il est obligatoire que si le jeu de paramètres associé est celui qui est déterminé par PowerShell être utilisé pour une invocation particulière de l'applet de commande.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top