Format the output of a hash table in Powershell to output to one line
Categories:
Formatting PowerShell Hashtable Output to a Single Line

Learn various techniques to format PowerShell hashtable output into a concise, single-line string, suitable for logging, display, or integration with other systems.
PowerShell hashtables are powerful data structures for storing key-value pairs. However, when you output a hashtable directly, PowerShell's default formatting often spreads its contents across multiple lines, which can be inconvenient for certain tasks like logging, passing data to command-line tools, or displaying compact status messages. This article explores several methods to condense hashtable output into a single, readable line.
Understanding Default Hashtable Output
Before diving into single-line formatting, it's helpful to understand how PowerShell typically presents a hashtable. By default, PowerShell uses a Format-Table
like view for hashtables, listing each key-value pair on a new line, often with aligned columns for keys and values.
$myHashTable = @{
Name = 'Alice'
Age = 30
City = 'New York'
}
$myHashTable
Default multi-line output of a PowerShell hashtable.
The output from the above code would look something like this:
Name Value
---- -----
City New York
Name Alice
Age 30
This format is great for readability in an interactive console but not ideal for single-line requirements.
Method 1: Using String Concatenation and Iteration
One straightforward way to achieve single-line output is to iterate through the hashtable's entries and build a string manually. This gives you full control over the format of each key-value pair and the separators used.
$myHashTable = @{
Name = 'Alice'
Age = 30
City = 'New York'
}
$outputString = ($myHashTable.Keys | ForEach-Object {
"$($_)=$($myHashTable.$_)"
}) -join ', '
$outputString
Building a single-line string by iterating through hashtable keys.
This method produces output like: City=New York, Name=Alice, Age=30
. You can customize the key-value separator (=
) and the pair separator (,
) as needed.
[ordered]
hashtables or sorting the keys before iteration.Method 2: Converting to JSON
For a more structured and universally parsable single-line output, converting the hashtable to JSON is an excellent option. PowerShell's ConvertTo-Json
cmdlet can do this efficiently, and you can then remove line breaks.
$myHashTable = @{
Name = 'Alice'
Age = 30
City = 'New York'
}
$jsonOutput = $myHashTable | ConvertTo-Json -Compress
$jsonOutput
Converting a hashtable to a compressed JSON string.
The -Compress
switch is crucial here, as it removes all unnecessary whitespace and line breaks, resulting in a single-line JSON string:
{"Name":"Alice","Age":30,"City":"New York"}
This is particularly useful when integrating with web services or other applications that expect JSON.
Method 3: Using Out-String
with -Stream
and -Width
While Out-String
is typically used for multi-line output, a clever combination with -Stream
and a sufficiently large -Width
can force the output onto a single line, especially if the hashtable is first converted to a custom object or formatted in a specific way.
$myHashTable = @{
Name = 'Alice'
Age = 30
City = 'New York'
}
# Convert to a custom object for better formatting control
$customObject = [PSCustomObject]$myHashTable
# Format as a list and then use Out-String with a large width
$singleLineOutput = $customObject | Format-List | Out-String -Width 1000 -Stream | ForEach-Object { $_.Trim() } -join ' '
$singleLineOutput
Using Format-List
and Out-String
to achieve single-line output.
This method is a bit more involved and might require tweaking the -Width
parameter based on the content. The Format-List
cmdlet presents each property on a new line, but by piping it to Out-String -Width 1000 -Stream
and then joining the trimmed lines, we can consolidate it. The output might look like: Name : Alice Age : 30 City : New York
.
flowchart TD A[Start with Hashtable] --> B{Choose Formatting Method} B -->|String Concatenation| C[Iterate Keys/Values] C --> D["Build String (e.g., 'Key=Value, Key2=Value2')"] B -->|JSON Conversion| E[ConvertTo-Json -Compress] E --> F["Single-line JSON (e.g., '{"Key":"Value"}')"] B -->|Out-String (Advanced)| G[Convert to PSCustomObject] G --> H[Format-List] H --> I["Out-String -Width X -Stream"] I --> J[Join Trimmed Lines] D & F & J --> K[End: Single-Line Output]
Flowchart of different methods to format hashtable output to a single line.
Choosing the Right Method
The best method depends on your specific needs:
- String Concatenation: Offers maximum flexibility for custom formatting and separators. Ideal when you need a human-readable, custom-delimited string.
- JSON Conversion: Best for structured data exchange, logging, or when the output needs to be easily parsed by other applications or languages. It's robust and standardized.
Out-String
withFormat-List
: Can be useful for quickly getting a single-line representation that resembles PowerShell's default property display, but it's less predictable and might require adjustments for very long outputs.