Co robi „%” (percent) w PowerShell?

106

Wygląda na to, że operacja% uruchamia bloki skryptu po potoku, chociaż about_Script_Blocks wskazuje, że% nie jest potrzebny.

To wszystko działa dobrze.

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

{ write-host 'hello' }

% { write-host 'hello' }

Ale kiedy dodajemy blok skryptu po potoku, najpierw musimy mieć%.

get-childitem | { write-host $_.Name }
Shaun Luttin
źródło
2
Czy próbowałeś wyszukać „znak procentu powershell”
PeeHaa
17
Mogłeś także wypróbować Get-Help%
mjolinor
7
@mjolinor To przydatne. Nie wiedziałem, że mogę uzyskać pomoc dotyczącą symboli. Widzę, że możemy również wyszukać $ _ za pomocą get-help. To wspaniale!
Shaun Luttin
1
To także operator modułu! po prostu nie w tym kontekście
Cole9350
41
@PeeHaa Twoja sugestia prowadzi tutaj.
NiloCK

Odpowiedzi:

144

W przypadku użycia w kontekście polecenia cmdlet (takiego jak w przykładzie) jest to alias dla ForEach-Object:

> Get-Alias -Definition ForEach-Object

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

W przypadku użycia w kontekście równania jest to operator modułu :

> 11 % 5

1

a jako operator modułu %może być również używany w operatorze przypisania ( %=):

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

1
Kohlbrr
źródło
2
Oznaczę to jako odpowiedź, gdy będzie zawierało również rolę% jako operatora modułu w różnych kontekstach.
Shaun Luttin
1
Dodano przykłady równań i operatorów przypisania
Kohlbrr,
17
W przypadku Foreach-Object radziłbym nie używać symbolu „%” - utrudnia to ludziom odczytywanie / utrzymywanie twojego kodu - zwłaszcza osobom nowym w PS. Spójrzmy prawdzie w oczy, im więcej osób odbiera PS, tym lepiej.
Simon Catlin
1
Gdzie mogę znaleźć znaczenie ForEach-Object w oficjalnej dokumentacji w witrynie MSDN?
rightfold
Nie zgadzam się z Simonem Catlinem, zgodnie z tą logiką wszyscy powinniśmy używać asemblera, ponieważ reszta to tylko cukier składniowy
reggaeguitar
16

Post PowerShell - znaki specjalne i tokeny zawiera opis wielu symboli, w tym%

% (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
źródło
7
@ShaunLuttin: Wartością jest link, który opisuje wiele znaków specjalnych, w tym%
Michael Freidgeim
Technicznie jest to alias dla ForEach-Object. ForEachjest także aliasem for ForEach-Object- z wyjątkiem sytuacji, gdy jest używany na początku instrukcji, gdzie jest to słowo kluczowe kontroli pętli (jak while).
mwfearnley
4

%można zastąpić, które nie będą działać bez rozszerzenia lub .Get-ChildItem | ForEach-Object { write-host $_.Name }%ForEach-Object

Xao
źródło