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;
}

Source

See also