我正在尝试学习如何在以下命令行中正确使用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
答案 0 :(得分: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。
答案 1 :(得分: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
。如果您是从命令行执行此操作并且只是想尽快查看结果,那么请不要使用变量,并按照您的描述进行格式化。