O que “%” (porcentagem) faz no PowerShell?

106

Parece que a operação% inicia blocos de script após o pipeline, embora about_Script_Blocks indique que% não é necessário.

Tudo isso funciona muito bem.

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

{ write-host 'hello' }

% { write-host 'hello' }

Mas quando adicionamos um bloco de script após o pipeline, precisamos primeiro ter o%.

get-childitem | { write-host $_.Name }
Shaun Luttin
fonte
2
Você já tentou pesquisar "sinal de porcentagem do PowerShell"
PeeHaa
17
Você também pode ter tentado Get-Help%
mjolinor
7
@mjolinor Isso é útil. Eu não sabia que poderia conseguir ajuda com os símbolos. Vejo que também podemos pesquisar $ _ com get-help. Isso é ótimo!
Shaun Luttin
1
É também um operador de módulo! mas não neste contexto
Cole9350,
41
@PeeHaa Sua sugestão chega aqui.
NiloCK

Respostas:

144

Quando usado no contexto de um cmdlet (como seu exemplo), é um alias para ForEach-Object:

> Get-Alias -Definition ForEach-Object

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

Quando usado no contexto de uma equação, é o operador módulo :

> 11 % 5

1

e como o operador de módulo, %também pode ser usado em um operador de atribuição ( %=):

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

1
Kohlbrr
fonte
2
Vou marcar isso como resposta, uma vez que também contém o papel% como um operador de módulo em diferentes contextos.
Shaun Luttin
1
Adicionados exemplos de equações e operadores de atribuição
Kohlbrr
17
No caso de Foreach-Object, aconselho não usar o símbolo "%" - torna mais difícil para as pessoas ler / manter seu código - especialmente para as pessoas novas no PS. Sejamos realistas, quanto mais pessoas aprenderem PS, melhor.
Simon Catlin,
1
Onde posso encontrar o significado de ForEach-Object na documentação oficial do MSDN?
direita
Eu discordo de Simon Catlin, por essa lógica todos nós deveríamos estar usando assembly porque o resto é apenas açúcar sintático
reggaeguitar
16

Uma postagem PowerShell - caracteres especiais e tokens fornece a descrição de vários símbolos, incluindo%

% (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
fonte
7
@ShaunLuttin: O valor é um link, que descreve vários caracteres especiais, incluindo%
Michael Freidgeim
Tecnicamente, é um apelido para ForEach-Object. ForEachtambém é um apelido para ForEach-Object- exceto quando usado no início de uma instrução, onde é uma palavra-chave de controle de loop (como while).
mwfearnley
4

%pode substituir o que não funcionará sem o ou o .Get-ChildItem | ForEach-Object { write-host $_.Name }%ForEach-Object

Xao
fonte