Il semble que l'appelant un bloc de script PowerShell (en invoquant le Invoquant même un bloc de script vide ( Cela s'avère être pratique si vous avez besoin d'une collection au lieu d'un tableau, mais cela semble un peu contre-intuitif. p>
Est-ce que quelqu'un sait pourquoi il se comporte de cette façon? p>
EDIT: P>
Je savais qu'il existe deux invocations différentes, Je ne comprends tout simplement pas le raisonnement de la convention de dénomination et la manière dont la mécanique semble fonctionner. En regardant la documentation, ce que j'aurais pensé, la méthode d'invocation par défaut n'est pas ce qui est utilisé lorsque le script est invoqué dans PowerShell. Il semble que .invoke () code> méthode) produit toujours une collection. Plus précisément, une collection de type p>
system.collections.Objectmodel.collection`1 [[System.management.Automation.psObject, systeme.Management.Automation, version = 3.0.0.0, Culture = neutre, PublickeyToken = 31bf3856ad364E35]] Code> p>
{}. Invoke () code>) renvoie une collection. Invoquant le même bloc de script à l'aide de l'opérateur d'appel (
& code>) produit la déclaration normalement attendue (un scalaire ou
[objet []] code>). P>
.invoke () code> et
.invokertaturnasis () code> à partir de la lecture de la langue de la langue. C'est j'ai été remarqué pour la première fois. p>
.invokertaturnasis () code> vient de renvoyer un flux d'objets, puis PowerShell enroule dans un tableau d'objet s'il y a plus d'un objet, en tant que scalaire s'il n'y a qu'un seul objet, ou crée un objet null. S'il n'y en a pas, comme s'il y a un pipeline implicite là-bas. En utilisant
.invoke () code> renvoie une collection, toujours et PowerShell le laisse comme une collection. p>
3 Réponses :
semble être la différence entre ces deux méthodes:
invoke strong> - invoque le bloc de script avec les arguments spécifiés, retourner les résultats comme objets psobjectés. p>
InvokeTeturnasis strong> - exécute le bloc de script avec les arguments spécifiés. Cette méthode renvoie les objets de résultat bruts (non emballés) afin qu'il puisse être plus efficace. p> blockQuote>
invoquer Strong> p>
xxx pré> sortie: p>
xxx pré> InvokeTeturnasis strong> p>
xxx pré> sortie: p>
xxx pré> p>
Parce que c'est ce qu'il est conçu pour faire, et il y a une alternative! p>
Aussi, Invoke code> - invoque le bloc de script avec les arguments spécifiés, renvoyant les résultats en tant que (collection d'objets) psobjectés. P>
InvokeTurnasis code> - exécute le bloc de script avec les arguments spécifiés. Cette méthode renvoie les objets de résultat bruts (non emballés) afin qu'il puisse être plus efficace. P>
{}. invoquer () code> retourne null, donc je ne sais pas où vous avez les impressions que même qui renvoie une collection. P>
J'ai eu l'idée qu'il récupère comme collection quand je l'ai fait: ({} .invoke) .getType ()
get-member -inputObject ({} .invoke ()) code> montre qu'il renvoie trop une collection; Inversement,
$ null -eq {} .invoke () code> retourne
$ false code>. La collection renvoyée est vide i>, c'est pourquoi elle ne produit aucune sortie dans la console.
Je suppose que l'équipe voulait être cohérente avec le powershell.invoke () code> API
, qui renvoie une collection