# Iterating hash values to a log file

•
•
•
•
•
•

While working on my last script, I was trying to figure out the best way to write the values stored in a hash table for the purposes of splatting out to a log file.

Consider:

$parameters = @{}$parameters.Add("Parameter1","Value1")$parameters.Add("Parameter2","Value2")$parameters.Add("Parameter3","Value3")

I was using a modified version of my logging function, which is basically a wrapper for Add-Content with parameters for log detail/types, colors, and output display.

One of the “display” things I wanted to fix was to make sure that each parameter showed up on its own line in console output or in the log file.  To that end, this didn’t work:

So, instead of printing the objects in the table, it just prints, “Hi, I’m a hashtable.”  Not the most useful thing if you’re trying to capture detailed data. I also tried a few other things:

What I ended up doing to get the display the way I wanted:

$parameters.GetEnumerator() | % { Write-Log -LogLevel DEBUG -ConsoleOutput -Message "Parameter Name:$($_.Name); Paramater Value:$($_.Value)" } [2019-01-15 10:37:09] [DEBUG] :: Parameter Name:Parameter2; Parameter Value: Value2 [2019-01-15 10:37:09] [DEBUG] :: Parameter Name:Parameter1; Parameter Value: Value1 [2019-01-15 10:37:09] [DEBUG] :: Parameter Name:Parameter3; Parameter Value: Value3 Using the GetEnumerator() method on the hash returned the parameter key/value pair, and allowed me to reference them independently using$_.Name (Key) and $_.Value (Value). Armed with the appropriate data, I could capture each parameter / value pair in the hash table and send them to either the display or log file. Semi-pro tip: You’ll notice that I had added my parameters to the hash table using the Add() method in a one order, but the system returned them to me in a different order. It didn’t matter from the splatting perspective, but if you want to set a defined order that values are stored, you can use the [ordered] property when creating the hash: $orderedhash.Add("Parameter1","Value1")
$orderedhash.Add("Parameter2","Value2")$orderedhash.Add("Parameter3","Value3")
$orderedhash.Add("Parameter4","Value4")$orderedhash

Name Value
---- -----
Parameter1 Value1
Parameter2 Value2
Parameter3 Value3
Parameter4 Value4

That’s all for now!