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 }
Shaun Luttin
la source
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
Kohlbrr
la source
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
Michael Freidgeim
la source
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

Xao
la source