function ConvertTo-Dictionary {
  begin { $Result = @{} }
  process { $Result[(&$KeyExpression)]=(&$ValueExpression) }
  end { $Result }

I already have this function in a compiled C# PSSnapin that I’ve been using (it’s named differently, which would piss off the PowerShell verb nazi’s) but here is a very short and useful function that you can use to turn any pipeline into a dictionary using an expression for extracting the key and value. Very similar to LINQ’s ToDictionary extension method – not coincidentally.

$Services = Get-Service | ConvertTo-Dictionary {$_.Name} {$_.DisplayName}
# Windows Search