¿Qué hace "%" (porcentaje) en PowerShell?

106

Parece que la operación% inicia bloques de script después de la canalización, aunque about_Script_Blocks indica que% no es necesario.

Todo esto funciona bien.

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

{ write-host 'hello' }

% { write-host 'hello' }

Pero cuando agregamos un bloque de secuencia de comandos después de la canalización, primero debemos tener%.

get-childitem | { write-host $_.Name }
Shaun Luttin
fuente
2
¿Ha intentado buscar "signo de porcentaje de
PowerShell
17
También puede haber probado Get-Help%
mjolinor
7
@mjolinor Eso es útil. No sabía que podía obtener ayuda con los símbolos. Veo que también podemos buscar $ _ con get-help. ¡Eso es genial!
Shaun Luttin
1
¡También es un operador de módulo! simplemente no en este contexto
Cole9350
41
@PeeHaa Tu sugerencia lleva aquí.
NiloCK

Respuestas:

144

Cuando se usa en el contexto de un cmdlet (como su ejemplo), es un alias para ForEach-Object:

> Get-Alias -Definition ForEach-Object

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

Cuando se usa en el contexto de una ecuación, es el operador de módulo :

> 11 % 5

1

y como operador de módulo, %también se puede usar en un operador de asignación ( %=):

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

1
Kohlbrr
fuente
2
Marcaré esto como respuesta una vez que también contenga el rol% como operador de módulo en diferentes contextos.
Shaun Luttin
1
Se agregaron ejemplos de operadores de asignación y ecuación
Kohlbrr
17
En el caso de Foreach-Object, aconsejaría no usar el símbolo "%", ya que hace que sea más difícil para la gente leer / mantener su código, especialmente para las personas nuevas en PS. Seamos realistas, cuanta más gente apunte a la PS, mejor.
Simon Catlin
1
¿Dónde puedo encontrar el significado de ForEach-Object en la documentación oficial de MSDN?
derecha
No estoy de acuerdo con Simon Catlin, según esa lógica, todos deberíamos usar ensamblador porque el resto es solo azúcar sintáctico
reggaeguitar
16

Una publicación de PowerShell: caracteres especiales y tokens proporciona una descripción de varios símbolos, incluidos%

% (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
fuente
7
@ShaunLuttin: El valor es un enlace, que describe varios caracteres especiales, incluido%
Michael Freidgeim
Técnicamente es un alias de ForEach-Object. ForEachtambién es un alias para ForEach-Object, excepto cuando se usa al comienzo de una declaración, donde es una palabra clave de control de bucle (como while).
mwfearnley
4

%puede reemplazar lo que no funcionará sin el o el .Get-ChildItem | ForEach-Object { write-host $_.Name }%ForEach-Object

Xao
fuente