Was macht "%" (Prozent) in PowerShell?

106

Es scheint, dass die Operation% Skriptblöcke nach der Pipeline startet, obwohl about_Script_Blocks angibt, dass% nicht erforderlich ist.

Diese funktionieren alle einwandfrei.

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

{ write-host 'hello' }

% { write-host 'hello' }

Wenn wir jedoch nach der Pipeline einen Skriptblock hinzufügen, müssen wir zuerst% haben.

get-childitem | { write-host $_.Name }
Shaun Luttin
quelle
2
Haben Sie versucht, "Powershell Prozent Zeichen"
PeeHaa
17
Sie könnten auch Get-Help%
mjolinor
7
@mjolinor Das ist nützlich. Ich wusste nicht, dass ich Hilfe bei Symbolen bekommen könnte. Ich sehe, dass wir auch $ _ mit Hilfe abrufen können. Das ist großartig!
Shaun Luttin
1
Es ist auch ein Moduloperator! nur nicht in diesem Zusammenhang
Cole9350
41
@PeeHaa Dein Vorschlag führt hierher.
NiloCK

Antworten:

144

Bei Verwendung im Kontext eines Cmdlets (wie in Ihrem Beispiel) ist es ein Alias ​​für ForEach-Object:

> Get-Alias -Definition ForEach-Object

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

Wenn es im Kontext einer Gleichung verwendet wird, ist es der Moduloperator :

> 11 % 5

1

und kann als Moduloperator %auch in einem Zuweisungsoperator ( %=) verwendet werden:

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

1
Kohlbrr
quelle
2
Ich werde dies als Antwort markieren, sobald es auch die% -Rolle als Moduloperator in verschiedenen Kontexten enthält.
Shaun Luttin
1
Beispiele für Gleichungs- und Zuweisungsoperatoren
hinzugefügt
17
Im Fall von Foreach-Object würde ich raten, das "%" -Symbol nicht zu verwenden - es erschwert es den Leuten, Ihren Code zu lesen / zu pflegen - insbesondere den PS-Neulingen. Seien wir ehrlich, je mehr Leute PS abholen, desto besser.
Simon Catlin
1
Wo finde ich die ForEach-Object-Bedeutung in der offiziellen Dokumentation zu MSDN?
Rechtsfalte
Ich bin nicht einverstanden mit Simon Catlin, nach dieser Logik sollten wir alle Assembly verwenden, da der Rest nur syntaktischer Zucker ist
Reggaeguitar
16

Ein Beitrag PowerShell - Sonderzeichen und Token enthält eine Beschreibung mehrerer Symbole, einschließlich%

% (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
quelle
7
@ ShununLuttin: Der Wert ist ein Link, der mehrere Sonderzeichen beschreibt, einschließlich%
Michael Freidgeim
Technisch ist es ein Alias ​​für ForEach-Object. ForEachist auch ein Alias ​​für ForEach-Object- außer wenn es am Anfang einer Anweisung verwendet wird, bei der es sich um ein Schleifensteuerungsschlüsselwort handelt (wie while).
mwfearnley
4

%kann ersetzen, was ohne die oder die nicht funktioniert .Get-ChildItem | ForEach-Object { write-host $_.Name }%ForEach-Object

Xao
quelle