Powershell Format-Wide и сортировка

Одна из вещей, которые мне нравится делать в Powershell:

Set-Location 'C:\Windows\System32\WindowsPowerShell\v1.0\en-US\'
Get-ChildItem *.txt | Format-Wide -Column 3

Это дает мне прекрасный обзор всего, что нужно изучить и изучить. Что меня беспокоило, так это сортировка, потому что теперь у меня есть 3 столбца, которые начинаются с «А». Было бы более читаемо, если бы у меня был (например) один столбец с A-J, один столбец с L-R и один, идущий от R-Z. Это меня так беспокоило, что я написал для этого функцию:

Function PSHELP {    
    Set-Location 'C:\Windows\System32\WindowsPowerShell\v1.0\en-US\'

    #Initialize variables
    $files = gci *.txt | select name
    $count = $files.count
    $remainder = $count % 3
    $rows = ($count - $remainder) /3 -as [int]

    #I add an extra row by default, to deal with remainders
    $rows++
    $Table = New-Object 'object[,]' $rows,3


    #Build up a table the way I want to see it
    #column 1: A,B,C...
    #column 2: L,M,N..
    #column 3: R,...,Z

    $index = 0
    for ($j = 0; $j -lt 3; $j++)
    {   
        $ThisColumnLength = $rows
        if($j -ge $remainder){
            $ThisColumnLength--
        }

        for ($i = 0; $i -lt $ThisColumnLength; $i++)
        { 
            $table[$i,$j] = $files[$index]
            $index++
        }        
    }

    #Read the table in the order Format-Wide throws them on the screen
    #And store this in an array
    $array = @()
    for ($i = 0; $i -lt $rows; $i++)
    {   $ThisRowLength = 3

        if(($i+1) -eq $Rows){
            $ThisRowLength = $remainder
        }

        if ($ThisRowLength -gt 0){
            for ($j = 0; $j -lt $ThisRowLength; $j++)
            { 
                $array += $table[$i,$j]
            }
        }
    }

    $array | fw -Column 3
}

Есть ли более «стандартный» способ сделать это в powershell? Мне кажется, что это вполне естественный вариант, но я не мог его найти. Есть ли опция или команда, которую я пропустил?

Чтобы уточнить: я не ищу способов найти помощь. Этот вопрос касается команды Format-Wide и/или возможной альтернативы. Я просто подумал, что это будет хороший пример.

[Редактировать:] Изменил мою функцию на что-то менее громоздкое.

[Edit2:] Код, который я опубликовал, ошибочен, и уже поздно. Если вставить его в оболочку и сравнить с {Get-Childitem *.txt | format-wide -column 3}', вы сможете увидеть, что я пытаюсь здесь сделать. Я надеюсь, что кто-то может предложить какую-то альтернативу.

[Edit3:] Снова изменил код, наконец, это заработало. В процессе я узнал очень интересную вещь о том, что возвращает Format-Wide:

PS> (Get-ChildItem).count Результат: 125

PS> (Get-ChildItem | Format-Wide).count Результат: 129

Меня это сильно смутило, потому что иногда я считал результаты и получал не то, что ожидал, поэтому пару раз я думал, что с моим кодом что-то не так, но, возможно, все было в порядке.


person jnoort    schedule 07.06.2016    source источник


Ответы (2)


Если вы имеете в виду стандартный способ поиска всех файлов справки в PowerShell, то да:

Get-Help * -Category HelpFile

Помимо этого, я просто захожу на эту страницу в Technet: Windows PowerShell Core About Topics

person Community    schedule 07.06.2016

Я нашел что-то, что делает именно то, что я хочу, и более общее: http://www.leporelo.eu/blog.aspx?id=powershell-formatting-format-wide-rotated-to-format-столбцы

Я все еще удивлен, что Powershell не имеет встроенной опции для этого.

person jnoort    schedule 08.06.2016