Que fait «%» (pourcentage) dans PowerShell?


106

Il semble que l'opération% démarre les blocs de script après le pipeline, bien que about_Script_Blocks indique que% n'est pas nécessaire.

Tout cela fonctionne très bien.

get-childitem | % { write-host $_.Name }

{ write-host 'hello' }

% { write-host 'hello' }

Mais lorsque nous ajoutons un bloc de script après le pipeline, nous devons d'abord avoir le%.

get-childitem | { write-host $_.Name }

2
Avez-vous essayé de rechercher "PowerShell percent sign"
— PeeHaa

17
Vous avez peut-être aussi essayé Get-Help%
— mjolinor

7
@mjolinor C'est utile. Je ne savais pas que je pouvais obtenir de l'aide sur les symboles. Je vois que nous pouvons également rechercher $ _ avec get-help. C'est génial!
— Shaun Luttin

1
C'est aussi un opérateur de module! mais pas dans ce contexte
— Cole9350

41
@PeeHaa Votre suggestion mène ici.
— NiloCK

Réponses:


144

Lorsqu'il est utilisé dans le contexte d'une applet de commande (comme votre exemple), il s'agit d'un alias pour ForEach-Object:

> Get-Alias -Definition ForEach-Object

CommandType     Name                                                Definition
-----------     ----                                                ----------
Alias           %                                                   ForEach-Object
Alias           foreach                                             ForEach-Object

Lorsqu'il est utilisé dans le contexte d'une équation, il s'agit de l' opérateur de module :

> 11 % 5

1

et comme opérateur de module, %peut également être utilisé dans un opérateur d'affectation ( %=):

> $this = 11
> $this %= 5
> $this

1

2
Je marquerai ceci comme réponse une fois qu'il contiendra également le rôle% en tant qu'opérateur de module dans différents contextes.
— Shaun Luttin

1
Ajout d'exemples d'opérateurs d'équation et d'affectation
— Kohlbrr

17
Dans le cas de Foreach-Object, je vous conseille de ne pas utiliser le symbole "%" - cela rend plus difficile pour les gens de lire / maintenir votre code - en particulier les nouveaux utilisateurs de PS. Regardons les choses en face, plus il y a de gens qui utilisent PS, mieux c'est.
— Simon Catlin

1
Où puis-je trouver la signification de ForEach-Object dans la documentation officielle sur MSDN?
— droite

Je ne suis pas d'accord avec Simon Catlin, selon cette logique, nous devrions tous utiliser l'assemblage car le reste n'est que du sucre syntaxique
— reggaeguitar

16

Un post PowerShell - Caractères spéciaux et jetons fournit une description de plusieurs symboles, notamment%

% (percentage)

1. Shortcut to foreach.
Task: Print all items in a collection.
Solution.
... | % { Write-Host $_ }

2. Remainder of division, same as Mod in VB.
Example:
5 % 2

7
@ShaunLuttin: La valeur est un lien, qui décrit plusieurs caractères spéciaux, y compris%
— Michael Freidgeim

Techniquement, c'est un alias pour ForEach-Object. ForEachest également un alias pour ForEach-Object- sauf lorsqu'il est utilisé au début d'une instruction, où il s'agit d'un mot clé de contrôle de boucle (comme while).
— mwfearnley

4

%peut remplacer ce qui ne fonctionnera pas sans le ou le .Get-ChildItem | ForEach-Object { write-host $_.Name }%ForEach-Object

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.