Преобразование информации о процессе в понятные человеку значения - PullRequest
0 голосов
/ 25 мая 2018

Я использовал функцию для преобразования байтов в «дружественные» размеры для каталогов, как показано ниже:

Скрипт:

function Get-FriendlySize {
    param($Bytes)
    $sizes='Bytes,KB,MB,GB,TB,PB,EB,ZB' -split ','
    for($i=0; ($Bytes -ge 1kb) -and 
        ($i -lt $sizes.Count); $i++) {$Bytes/=1kb}
    $N=2; if($i -eq 0) {$N=0}
    "{0:N$($N)} {1}" -f $Bytes, $sizes[$i]
}

dir 'C:\Windows\ccmsetup' | Select-Object -Property Name, LastWriteTime, @{N='FriendlySize';E={Get-FriendlySize -Bytes $_.Length}}

Вывод:

Name                                     LastWriteTime         FriendlySize
----                                     -------------         ------------
cache                                    7/5/2017 10:47:32 AM  1 Bytes     
Logs                                     5/17/2018 5:18:28 PM  1 Bytes     
{6EF23B21-22B7-453C-A975-52723EE71ABA}   1/7/2018 1:06:03 PM   1 Bytes     
ccmsetup.cab                             1/7/2018 1:04:21 PM   9.42 KB     
ccmsetup.exe                             11/7/2017 8:00:00 PM  3.55 MB     
ccmsetup.xml                             12/1/2017 3:55:00 PM  10.51 KB    
CLP1031.MSP                              11/9/2017 9:00:00 AM  1.77 MB     
CLP1036.MSP                              11/9/2017 9:00:00 AM  1.77 MB     
CLP1041.MSP                              11/9/2017 9:00:00 AM  1.77 MB     
CLP2052.MSP                              11/9/2017 9:00:00 AM  1.77 MB     
configmgr1702-client-kb4019926-x64.msp   4/11/2017 11:50:00 AM 7.36 MB     
MicrosoftPolicyPlatformSetup.msi         2/28/2017 9:11:22 AM  2.45 MB     
SCEPInstall.exe                          6/20/2016 12:54:16 PM 27.05 MB    
Silverlight.exe                          4/10/2017 6:34:48 PM  6.70 MB     
WindowsFirewallConfigurationProvider.msi 2/28/2017 9:11:22 AM  589.00 KB   

Сейчас я пытаюсь применить ту же логику к выводу Get-Process, чтобы рабочий набор памяти отображался в удобном виде, а не в байтах по умолчанию, но вывод всегда равен «1 байту».

Сценарий:

function Get-FriendlySize {
    param($Bytes)
    $sizes='Bytes,KB,MB,GB,TB,PB,EB,ZB' -split ','
    for($i=0; ($Bytes -ge 1kb) -and 
        ($i -lt $sizes.Count); $i++) {$Bytes/=1kb}
    $N=2; if($i -eq 0) {$N=0}
    "{0:N$($N)} {1}" -f $Bytes, $sizes[$i]
}

Get-Process -Name explorer | Select-Object -Property Handles, @{N='RAM Working Set';E={Get-FriendlySize -Bytes $_.Length}}, CPU, Id, ProcessName

Вывод:

Handles         : 2521
RAM Working Set : 1 Bytes
CPU             : 169.125
Id              : 10080
ProcessName     : explorer

Что я делаю не так?

1 Ответ

0 голосов
/ 25 мая 2018

Вам нужно использовать $_.WorkingSet, чтобы получить память вместо $_.Length

Get-Process -Name explorer | Select-Object -Property Handles, @{N='RAM Working Set';E={Get-FriendlySize -Bytes $_.WorkingSet}}, CPU, Id, ProcessName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...