Что делает «%» (процент) в 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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.