Apa yang dilakukan "%" (persen) di PowerShell?

106

Tampaknya% operasi memulai blok skrip setelah pipa, meskipun about_Script_Blocks menunjukkan% tidak diperlukan.

Ini semua bekerja dengan baik.

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

{ write-host 'hello' }

% { write-host 'hello' }

Tetapi ketika kita menambahkan blok skrip setelah pipeline, kita harus memiliki% terlebih dahulu.

get-childitem | { write-host $_.Name }
Shaun Luttin
sumber
2
Sudahkah Anda mencoba mencari "tanda persen PowerShell"
PeeHaa
17
Anda mungkin juga telah mencoba Get-Help%
mjolinor
7
@mjolinor Itu berguna. Saya tidak tahu saya bisa mendapatkan bantuan tentang simbol. Saya melihat bahwa kita juga dapat mencari $ _ dengan get-help. Itu hebat!
Shaun Luttin
1
Ini juga merupakan operator modulus! tidak hanya dalam konteks ini
Cole9350
41
@PeeHaa Saran Anda mengarah ke sini.
NiloCK

Jawaban:

144

Saat digunakan dalam konteks cmdlet (seperti contoh Anda), ini adalah alias untuk ForEach-Object:

> Get-Alias -Definition ForEach-Object

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

Saat digunakan dalam konteks persamaan, itu adalah operator modulus :

> 11 % 5

1

dan sebagai operator modulus, %juga dapat digunakan dalam sebuah operator penugasan ( %=):

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

1
Kohlbrr
sumber
2
Saya akan menandai ini sebagai jawaban setelah itu juga berisi peran% sebagai operator modulus dalam konteks yang berbeda.
Shaun Luttin
1
Menambahkan persamaan dan contoh operator penugasan
Kohlbrr
17
Dalam kasus Foreach-Object, saya sarankan untuk tidak menggunakan simbol "%" - ini akan mempersulit orang-orang untuk membaca / memelihara kode Anda - terutama orang-orang yang baru mengenal PS. Mari kita hadapi itu, semakin banyak orang yang menggunakan PS, semakin baik.
Simon Catlin
1
Di mana saya bisa menemukan arti ForEach-Object dalam dokumentasi resmi di MSDN?
lipatan kanan
Saya tidak setuju Simon Catlin, dengan logika itu kita semua harus menggunakan perakitan karena sisanya hanya gula sintaksis
reggaeguitar
16

Sebuah posting PowerShell - Karakter Khusus Dan Token memberikan deskripsi beberapa simbol termasuk%

% (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
sumber
7
@ShaunLuttin: Nilainya adalah tautan, yang menjelaskan beberapa karakter khusus termasuk%
Michael Freidgeim
Secara teknis ini adalah alias untuk ForEach-Object. ForEachjuga merupakan alias untuk ForEach-Object- kecuali jika digunakan di awal pernyataan, yang merupakan kata kunci kontrol loop (seperti while).
mwfearnley
4

%dapat menggantikan yang tidak akan berfungsi tanpa atau .Get-ChildItem | ForEach-Object { write-host $_.Name }%ForEach-Object

Xao
sumber