2015-06-15 13 views
6

Czekam na blok kodu Użyłem (pochodzących z another question) i nie byłem w stanie dowiedzieć się, co . w .{process reprezentuje w tym fragmencie (komentarze usunięto):Co to jest skrót "." W potoku PowerShell?

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

wiem, że % jest For-EachObject i ? jest skrótem Where lub Where-Object, ale pozostaje pytanie:

Co jest . skrótem?

+0

Nigdy nie widziałem tej konkretnej składni wcześniej, ale wydaje się, aby wykonać to samo co%. Lub przynajmniej ten kod działa przy użyciu% w miejsce. – EBGreen

Odpowiedz

6

. to dot sourcing operator, który uruchamia skrypt w bieżącym zakresie, a nie nowy zakres, taki jak operator połączenia (tj. &).

Ten drugi segment wywołuje blok skryptu iw tym bloku skryptu definiuje funkcję zaawansowaną. Funkcja zaawansowana iteruje każdy element w potoku i selektywnie przekazuje go dalej.

To nie jest tak naprawdę idiomatyczne użycie. Co ten skrypt próbuje osiągnąć można zrobić w prostszy, bardziej czytelny sposób za pomocą Where-Object (często skracane do where lub ?):

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

Rozbicie kodu trochę, skończyło się na wyrażenie prawie identyczne do twojego. Dziękuję za wyjaśnienie. – vmrob

4

. jest operatorem źródła kropek. Nigdy nie widziałem, żeby był używany w ten sposób, ale jest to identyczne z użyciem & (operator połączenia) w tym kontekście.