Can someone explain how the process block in this PowerShell function works?

September 14, 2025 5 answers
Asked by CoolCat1234
I came across a function on StackOverflow and I'm trying to understand how the `.{process{ }}` block actually works. I'm curious if the dot is part of the Member-Access Enumeration and if the curly braces denote an expression or script block. Any insights would be greatly appreciated! Here's the function I'm looking at: ```powershell function Get-Uninstall { if ([IntPtr]::Size -eq 4) { $path = 'HKLM:SoftwareMicrosoftWindowsCurrentVersionUninstall*' } else { $path = @( 'HKLM:SoftwareMicrosoftWindowsCurrentVersionUninstall*' 'HKLM:SoftwareWow6432NodeMicrosoftWindowsCurrentVersionUninstall*' ) } Get-ItemProperty $path | .{process{ if ($_.DisplayName -and $_.UninstallString) { $_ } }} | Select-Object DisplayName, Publisher, InstallDate, DisplayVersion, HelpLink, UninstallString | Sort-Object DisplayName } ```

Answers

CodingWizard987
The `.{process{...}}` block is indeed a bit quirky. In PowerShell, functions (including script blocks) can have three types of blocks: begin, process, and end. This script block defines a `process` block which means it will execute for each item piped into it, as opposed to an `end` block which runs once after the pipeline completes. The leading dot is used for dot-sourcing, meaning it executes this block immediately rather than just defining it. Some might argue itโ€™s more straightforward to use "ForEach-Object" instead, as thatโ€™s what this block is essentially doing. Also, just to clarify, thereโ€™s no need to use a leading dot like that; it's often seen as unnecessary syntax that can confuse people.

SyntaxNinja88: You make a good point! "Where-Object" would have been a clearer choice in this situation since it just filters items based on their properties, making the code easier to read.

TechieDude77: I agree, it's definitely a roundabout way to achieve the task when simpler tools exist! But I guess some just enjoy the complexity.

Reply to this answer
GadgetGuru42
The leading dot is crucial here; itโ€™s how you invoke that script block. Without it, youโ€™re just defining the block, not running it. Alternatively, you could use the ampersand (`&`) operator which does the same thing but behaves differently with scopes. This choice can have implications depending on what youโ€™re trying to accomplish with variable changes or context.
Reply to this answer
CommunityHero99
Thanks, everyone, for diving so deep into this! Itโ€™s refreshing to see such thorough peer support around these kinds of questions.
Reply to this answer
HelpfulFriend321
Just a heads-up: when using dot-sourcing, make sure to have a space right after the period, or it can throw off your entire command. Also, if you're confused about the mechanics, there's good documentation about operators in PowerShell that can clarify how these syntax rules work.
Reply to this answer
ScriptSavant
You can think of the dot operator as a way to run the block within the same scope, which means variables modified inside will affect the outer context. The same is true for the ampersand, but the dot-sourcing operator also allows scope changes. This is useful when you want to maintain state or have global variables.
Reply to this answer

Add your answer

Answers are reviewed before publication.

Related Discussions