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 }
powershell
syntax
Shaun Luttin
fuente
fuente

Respuestas:
Cuando se usa en el contexto de un cmdlet (como su ejemplo), es un alias para
ForEach-Object:Cuando se usa en el contexto de una ecuación, es el operador de módulo :
y como operador de módulo,
%también se puede usar en un operador de asignación (%=):fuente
Una publicación de PowerShell: caracteres especiales y tokens proporciona una descripción de varios símbolos, incluidos
%fuente
ForEach-Object.ForEachtambién es un alias paraForEach-Object, excepto cuando se usa al comienzo de una declaración, donde es una palabra clave de control de bucle (comowhile).%puede reemplazar lo que no funcionará sin el o el .Get-ChildItem |ForEach-Object{ write-host $_.Name }%ForEach-Objectfuente