2010-09-05 6 views
1

Dans un script shell Unix, pour appeler commande foo sur les arguments originaux du script, vous écrivez simplement

foo [email protected] 

En Powershell, $args est un tableau de (généralement) les chaînes tenant les arguments du script en cours. Si vous écrivez

foo $args 

la même chose se produira-t-elle comme dans bash ou d'autres interpréteurs de scripts shell Unix typiques?

Répondre

3

Vous souhaitez utiliser l'argument splatting qui est nouveau dans PowerShell 2.0. La variable utilisée pour splatter peut être un tableau (les args sont liés positionnellement) ou une hashtable (les clés correspondent aux noms des paramètres et leurs valeurs fournissent l'argument). Si vous ne déclarez aucun paramètre, utilisez @args. Le problème avec la tentative d'utiliser $args est qu'il sera envoyé en tant que tableau au premier parmètre plutôt que splaté sur tous les paramètres. Cependant, beaucoup de gens déclarent le paramètre. Dans ce cas, vous voulez utiliser @PSBoundParameters par exemple:

foo @PSBoundParameters 
+0

Veuillez noter que ce n'est pas exactement la même chose que de passer tous les paramètres. Les commutateurs apparaîtront comme des paramètres booléens. – JasonMArcher

+3

Il est * effectivement * le même pour tous les paramètres "liés". C'est-à-dire que PowerShell appliquera le bool au paramètre de commutateur en aval afin que vous ne réalisiez pas qu'il a traversé un booléen. De plus [switch] est juste une construction d'analyse qui se trouve au sommet d'un bool de toute façon. Maintenant, ce que '@ PSBoundParameters' ne vous procure pas est un paramètre non lié. –