2015-06-15 12 views
6

Sto cercando su un blocco di codice che ho utilizzato (Ottenuto da another question) e non sono stato in grado di capire ciò che il . in .{process rappresenta in questo frammento (commenti rimossi):Qual è la `.? Abbreviazione per in una pipeline di PowerShell?

Get-ItemProperty $path | 
.{process{ if ($_.DisplayName -and $_.UninstallString) { $_ } }} | 
Select-Object DisplayName, Publisher, InstallDate, DisplayVersion, HelpLink, UninstallString | 
Sort-Object DisplayName 

so che % è For-EachObject e ? è una scorciatoia per Where o Where-Object, ma la domanda rimane:

Qual è . scorciatoia per?

+0

Non ho mai visto che la sintassi particolare prima, ma sembra di fare il stessa cosa di%. O almeno quel codice funziona usando% al posto di. – EBGreen

risposta

6

. è il dot sourcing operator, che esegue uno script nell'ambito corrente anziché un nuovo ambito come operatore di chiamata (ad esempio &).

Questo secondo segmento richiama un blocco di script e in tale blocco di script definisce una funzione avanzata. La funzione avanzata itera ciascun elemento nella pipeline e lo passa in modo selettivo.

Questo non è proprio un uso idiomatico. Ciò che questo script sta cercando di raggiungere potrebbe essere fatto in un modo più semplice, più leggibile utilizzando Where-Object (spesso abbreviato in where o ?):

Get-ItemProperty $path | where { $_.DisplayName -and $_.UninstallString } 
+0

Rompendo un po 'il codice, ho finito con un'espressione quasi identica alla tua. Grazie per la spiegazione. – vmrob

4

. è l'operatore di dot source. Non l'ho mai visto usato in questo modo, ma è identico all'utilizzo di & (l'operatore di chiamata) in questo contesto.

Problemi correlati