1

我正在尝试学习如何在下面的命令行中正确使用Where-Object来显示所有大于 20 兆字节的进程。

get-process | Select-Object Name, @{Name="Private Memory (MB)"; Expression={$_.privatememorysize / 1mb}} |
    Where-Object {"Private Memory (MB)" -gt 20} |
    Sort-Object "Private Memory (MB)" -Descending |
    format-table -autosize

我可以在下面的命令行中做到这一点。但是,我不想使用20971520 bytes指定它。我宁愿以兆字节为单位指定它。如果这是不可能的(或者命令行会变得太复杂),那么我只希望输出显示所有大于20 MB的进程;即使我必须使用字节指定它:

get-process | Select-Object Name, @{Name="Private Memory (MB)"; Expression={$_.privatememorysize / 1mb}} |
    where-object {$_.privatememorysize -gt 20971520} |
    Sort-Object "Private Memory (MB)" -Descending |
    format-table -autosize
4

2 回答 2

1

改变

where-object {"Private Memory (MB)" -gt 20}

where-object {$_."Private Memory (MB)" -gt 20}

如在

get-process | 
    Select-Object Name, @{Name="Private Memory (MB)"; Expression={$_.privatememorysize / 1mb}} | 
    Where-Object {$_."Private Memory (MB)" -gt 20} | 
    Sort-Object "Private Memory (MB)" -Descending | 
    format-table -autosize

您可以在 Where-Object 表达式中使用 20 (vs 20mb) 的原因是您已经在 select 语句中指定了度量单位。事实上,如果你使用 20971520,它会认为你的意思是 20971520 MB。

于 2013-10-15T21:05:02.673 回答
1

您可以在 PowerShell 中逐字指定大小:

PS C:\> 1KB
1024
PS C:\> 1MB
1048576
PS C:\> 1GB
1073741824

因此,当您想要执行数学运算时,您可以在代码中使用它们。因此,如果您只想替换该文字,那就去做吧:

$myProcesses = get-process | 
where-object { $_.privatememorysize -gt 20MB } | 
select-object name, @{ Name = "Private Memory (MB)"; Expression = {$_.privatememorysize / 1MB}} |
Sort-object "Private Memory (MB)" -Descending

注意:您可能只想format-table在对象准备好输出以供用户阅读时使用它。所以在这种情况下,一旦你准备好将它输出到屏幕上,你可以简单地做$myProcesses | format-table -autosize. 如果您从命令行执行此操作并且只是想尽快查看结果,那么甚至不要打扰变量并像您描述的那样对其进行格式化。

于 2013-10-15T21:09:17.117 回答