Вывод хэш-таблицы массивов в Powershell


Я в полном уме. Я новичок в powershell и перепробовал все, что смог найти по этой теме в интернете. То, что я пытаюсь сделать, - это напечатать хэш-таблицу массивов в файл без дурацкого многоточия, появляющегося в конце каждого значения массива. Ниже - моя лучшая попытка.

# Update output buffer size to prevent clipping in output window.
if( $Host -and $Host.UI -and $Host.UI.RawUI ) 
{
   $rawUI = $Host.UI.RawUI
   $oldSize = $rawUI.BufferSize
   $typeName = $oldSize.GetType( ).FullName
   $newSize = New-Object $typeName (1000, $oldSize.Height)
   $rawUI.BufferSize = $newSize
}

# Suposedly to allow enumeration in formatting to be unlimited
$formatenumerationlimit = -1

$Dir = get-childitem c:SomeFolderWithFiles -recurse
$List = $Dir | where {$_.extension -eq ".hash"} | where-object {$_ -ne $null}
$lookupTable = @{}
Foreach ($element in $List)
{
    #Get the type of file from filename
    $PSV_Type = $element.Name.Substring(0, $element.Name.indexOf("."))
    #Get the date sent from filename
    $Date_Sent = $element.Name.Substring($element.Name.length - 20,8)

    #Populate hashTable
    .....
}
$columns = @{Expression={$_.Name};Label="Date_Sent";width=12}, @{Expression={$_.Value};Label="PSV_Types";width=1000}
$lookupTable.GetEnumerator() | Sort-Object Name | Format-Table $columns | out-file C:hashFiles.txt -width 1012

Теперь, после всего этого, я все еще получаю это в результате:

Date_Sent PSV_Types
--------- ---------
20091201 {31, РАСПРЕДЕЛЕНИЕ, AUDIT_TRAIL, КНИГИ...}
20091202 {31, РАСПРЕДЕЛЕНИЕ, AUDIT_TRAIL, КНИГИ...}
20091203 {31, РАСПРЕДЕЛЕНИЕ, AUDIT_TRAIL, КНИГИ...}
20091204 {31, РАСПРЕДЕЛЕНИЕ, AUDIT_TRAIL, КНИГИ...}
20091207 {31, РАСПРЕДЕЛЕНИЕ, AUDIT_TRAIL, КНИГИ...}
20091208 {31, РАСПРЕДЕЛЕНИЕ, AUDIT_TRAIL, КНИГИ...}
20091209 {31, РАСПРЕДЕЛЕНИЕ, AUDIT_TRAIL, КНИГИ...}
20091210 {31, РАСПРЕДЕЛЕНИЕ, AUDIT_TRAIL, КНИГИ...}
20091211 {31, РАСПРЕДЕЛЕНИЕ, AUDIT_TRAIL, КНИГИ...}
20091214 {31, РАСПРЕДЕЛЕНИЕ, AUDIT_TRAIL, КНИГИ...}
20091215 {31, РАСПРЕДЕЛЕНИЕ, AUDIT_TRAIL, КНИГИ...}

Кто-нибудь более мудрый в способах powershell, пожалуйста, скажите мне, что я упускаю. Как мне избавиться от этих проклятых многоточий в конце и просто написать все члены массива, независимо от того, сколько их там? Должен ли я просто свернуть какое-то решение гетто, создав большой буфер строк и выведя его в файл, или есть лучший способ сделать это вот это?

Спасибо.

2 7

2 ответа:

Вы не должны использовать Out-File по этой причине, он работает через механизм форматирования по умолчанию. То, что вы хотите использовать, это Set-Content / Add-Content, как это.

$lookupTable.GetEnumerator() | Sort-Object Name |
    ForEach-Object {"{0}`t{1}" -f $_.Name,($_.Value -join ",")} |
    Add-Content C:\hashFiles.txt

Хорошо, powershell не будет играть хорошо. Это единственное, что я мог сделать, чтобы работать:

$lookupTable = $lookupTable.GetEnumerator() | Sort-Object Name 

foreach ($element in $lookupTable)
{
    $msg = $element.Key + "`t"
    foreach ($psv in $element.Value)
    {
        $msg = $msg + $psv + ","
    }
    #remove last comma and add newline
    $msg = $msg.SubString(0, $msg.length -1) + "`n"

    Add-Content C:\hashFiles.txt $msg
}