Сортировка PowerShell отлично работает на некоторых компьютерах, но не на других - PullRequest
0 голосов
/ 05 марта 2019

Я не очень разбираюсь в PowerShell и пытаюсь отсортировать вывод для кода ниже:

function Get-DirSize ($path) { 

    BEGIN {} 

    PROCESS{ 
        $colItems = Get-ChildItem $path | Where-Object {$_.PSIsContainer -eq $true} | Sort-Object

        foreach ($folder in $colItems)
        {
            $object = New-Object -TypeName PSObject 
            $subFolderItems = Get-ChildItem $folder.FullName -recurse -force -ErrorAction SilentlyContinue | Where-Object {$_.PSIsContainer -eq $false} | Measure-Object -property Length -sum | Select-Object Sum
            $sizeGB="{0:N4}" -f ($subFolderItems.sum/1GB)   
            $object | Add-Member -MemberType NoteProperty -Name "Folder" -Value $folder.FullName
            $object | Add-Member -MemberType NoteProperty -Name "Size(GB)" -Value $sizeGB 
            $object 
        } 
    }
    END {} 
}

Get-DirSize -path 'C:\' |
Sort-Object 'Size(GB)' -Descending

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

PSSortedOutput

Кто-нибудь знает, почему это может происходить?Или я должен что-то изменить в самом коде.

Спасибо.

1 Ответ

0 голосов
/ 05 марта 2019

Эта строка:

$sizeGB="{0:N4}" -f ($subFolderItems.sum/1GB)

преобразует ($subFolderItems.sum/1GB) в строку и сохраняет ее в переменной с именем sizeGB.

Затем в этой строке:

Sort-Object 'Size(GB)' -Descending

Вы сортируете эту строку в порядке убывания.Таким образом, вы выполняете лексическую сортировку (алфавитный порядок AKA) строк чисел.Если вы посмотрите на свои результаты, вы увидите, что они отсортированы в алфавитном порядке в порядке убывания (например, строка, начинающаяся с «6», предшествует строке, начинающейся с «5», которая предшествует строке, начинающейся с «4» и т. Д.).

Так что не преждевременно конвертируйте ваши числа в строки для целей форматирования.Форматирование объектов, возвращаемых из вашей функции, в любом случае противоречит идее PowerShell.Вы хотите иметь дело с объектами на всем протяжении, от начала до конца.Конечным потребителем должен быть тот, кто решает, как форматировать вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...