Что делает "%" (процентов) в PowerShell?

Кажется, что операция% запускает script блоки после конвейера, хотя about_Script_Blocks указывает, что% не требуется.

Все это прекрасно работает.

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

{ write-host 'hello' }

%{ write-host 'hello' }

Но когда мы добавляем блок script после конвейера, мы должны сначала иметь%.

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

Ответ 1

При использовании в контексте командлета (например, вашего примера) это псевдоним для ForEach-Object:

> Get-Alias -Definition ForEach-Object

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

При использовании в контексте уравнения, он оператор модуля:

> 11 % 5

1

и в качестве оператора модуля % можно также использовать в операторе присваивания (%=):

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

1

Ответ 2

Сообщение PowerShell - специальные символы и токены
содержит описание нескольких символов, включая%

% (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

Ответ 3

% может заменить Get-ChildItem | ForEach-Object { write-host $_.Name }, и он не может обойтись без % или ForEach-Object