Add note property to object in pipeline
Here's an example Function that adds members to an object in a pipeline.
function ConvertTo-Object($hashtable)
{
	$object = New-Object PSObject
	$hashtable.GetEnumerator() |
		ForEach-Object { Add-Member -inputObject $object -memberType NoteProperty -name $_.Name -value $_.Value }
	 $object
}
Now imagine we have this hashtable:
$hash = @{
	Name='Richard';
	Status='Online';
	Color='Green';
	Hat='Reversed'}
If we inspect it, here is what we see:
> $hash | format-table
Name    Value
----    -----
Color   Green
Status  Online
Name    Richard
Hat     Reversed
Now if we run it through our ConvertTo-Object function, we'll see a very different object emerge...
> ConvertTo-Object $hash | format-table
Color  Status  Name     Hat
-----  ------  ----     ---
Green  Online  Richard  Reversed
(Essentially it's been pivoted! see sql server pivot)
And I believe I used this particular one, so our hashtable can be exported to a csv file.
ConvertTo-Object $hash | Export-Csv test.csv -NoTypeInformation
Convert custom object to hash table
And I found that in MarkJump I wrote a function that is somewhat the reverse of this, and turns a custom object into a hash...
# ConvertTo-Hash is used by Get-marks to convert the custom psObject into a hash table.
function ConvertTo-Hash($i) {
	$hash = @{ };
	$names = $i | Get-Member -MemberType properties | Select-Object -ExpandProperty name
	if ($null -ne $names) {
		$names | ForEach-Object { $hash.Add($_, $i.$_) }
	}
	$hash;
}