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

106

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

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

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

{ write-host 'hello' }

% { write-host 'hello' }

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

get-childitem | { write-host $_.Name }
Шон Латтин
источник
2
Вы пробовали искать "знак процента powershell"
PeeHaa
17
Вы также могли попробовать Get-Help%
mjolinor
7
@mjolinor Это полезно. Я не знал, что могу получить помощь по символам. Я вижу, что мы также можем найти $ _ с помощью get-help. Замечательно!
Шон Латтин
1
Это также оператор модуля! только не в этом контексте
Cole9350 03
41
@PeeHaa Ваше предложение ведет сюда.
NiloCK

Ответы:

144

При использовании в контексте командлета (например, в вашем примере) это псевдоним для 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
Я отмечу это как ответ, если он также будет содержать роль% в качестве оператора модуля в разных контекстах.
Шон Латтин
1
Добавлены примеры уравнения и оператора присваивания
Kohlbrr
17
В случае Foreach-Object я бы посоветовал не использовать символ «%» - это затрудняет чтение / поддержку вашего кода для людей, особенно для новичков в PS. Посмотрим правде в глаза, чем больше людей возьмутся за PS, тем лучше.
Саймон Кэтлин
1
Где я могу найти значение ForEach-Object в официальной документации MSDN?
правый фолд
Я не согласен с Саймоном Кэтлином, по этой логике мы все должны использовать ассемблер, потому что остальное - просто синтаксический сахар
регги-гитара
16

Сообщение 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
Майкл Фрейджейм
источник
7
@ShaunLuttin: Значение представляет собой ссылку, которая описывает несколько специальных символов, включая%
Майкл Фрейдгейм
Технически это псевдоним для ForEach-Object. ForEachтакже является псевдонимом для ForEach-Object- кроме случаев, когда он используется в начале оператора, где это ключевое слово управления циклом (например, while).
mwfearnley
4

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

Xao
источник